diff --git a/heiman b/heiman new file mode 100644 index 0000000..6a92d64 --- /dev/null +++ b/heiman @@ -0,0 +1 @@ +{"Id":157,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":true,"MessageTypes":[{"Id":3718,"Code":"TEST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-SELFTEST,<>,<>,<>;","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":"^HEIMAN-SELFTEST,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3690,"Code":"DISCONNECTED","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-DISCONNECTED,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-DISCONNECTED,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3689,"Code":"RECONNECTED","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-RECONNECTED,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-RECONNECTED,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3686,"Code":"TEMP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-Temp,<>,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-Temp,[^,]*,[^,,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3692,"Code":"TEMPANDHUM-FAIL-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-TEMPANDHUM-FAIL-S,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-TEMPANDHUM-FAIL-S,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3693,"Code":"ALSM-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-ALSM-S,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALSM-S,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3688,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-CYC,<>,<>,<>,","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-CYC,[^,]*,[^,,]*,[^,,]*,","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3695,"Code":"NB-BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-NB-BATL,<>,<>,<<>>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-NB-BATL,[^,]*,[^,,]*,[^;,]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3696,"Code":"TEMPANDHUM-FAIL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-TEMPANDHUM,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-TEMPANDHUM,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3694,"Code":"ALTAM-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALTAM-S,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALTAM-S,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3697,"Code":"ALSM-FAIL-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALSM-FAIL-S,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALSM-FAIL-S,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3698,"Code":"ALSM-FAIL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALSM-FAIL,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALSM-FAIL,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3700,"Code":"RH","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-RH,<>,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-RH,[^,]*,[^,,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3701,"Code":"BATL-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-BATL-S,<>,<>,<<>>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-BATL-S,[^,]*,[^,,]*,[^;,]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3702,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-BATL,<>,<>,<<>>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-BATL,[^,]*,[^,,]*,[^;,]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3699,"Code":"NB-BATL-S","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-NB-BATL-S,<>,<>,<<>>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-NB-BATL-S,[^,]*,[^,,]*,[^;,]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3706,"Code":"ALTAM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALTAM,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALTAM,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3703,"Code":"ALTEMP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALTEMP,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALTEMP,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3704,"Code":"ALSM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"HEIMAN-ALSM,<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-ALSM,[^,]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3705,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-getCommandNumber,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^HEIMAN-getCommandNumber,[^,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3710,"Code":"ACK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-ACK,<>,<>,<>,<>","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":2321,"Protocol":{"Id":157,"Code":"Heiman","Version":"0.4","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Alarm Cycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"89\"; // Code type (1 byte) = 89 = 137 = Cycle\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"17\"; // Parameter type (1 byte) 17 = Cycle\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// var cycle = parseInt(\"60\") * 60;\r\nvar cycle = parseInt(params.Cycle.AlarmCycle) * 60;\r\nvar DPVal = (('00000000' + cycle.toString(16)).slice(-8)); // Parameter value\r\nvar DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = sequenceNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 2 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nAddValue('payload', payload);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":5,"Order":null},"CacheImei":false,"RegEx":"^HEIMAN-ACK,[^,]*,[^,,]*,[^,,]*,[^,]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3717,"Code":"INFO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"HEIMAN-INFO!<>!<>!<>!","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":"^HEIMAN-INFO![^!]*![^!!]*![^!!]*!","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3685,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"coap-<>-hd-<>-<>","LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^coap-[^-]*-hd-[^--]*-[^-]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[{"Id":2316,"Name":"Temperature Threshold","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"81\"; // Code type (1 byte) = 81 = 129 = Temp_Threshold\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"06\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar DPVal = params.TemperatureThreshold.TemperatureThreshold.toString(16) // Parameter value\r\n// var DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = sequenceNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nAddValue('payload', payload);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":9,"ProtocolActionObjects":[],"Tags":[]},{"Id":2317,"Name":"Relative Humidity","TemplateSMS":"","Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\n// var RelativeHumidity = \"80\";\r\nvar configs = []; //configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"82\"; //Code type (1 byte) = 82 = 130 = RH\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"07\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\n// var DPVal = \"50\"\r\nvar commandNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar DPVal = params.RelativeHumidity.RelativeHumidity.toString(16); // Parameter value\r\n// var DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = commandNumber + DCType + DCLength + DPType + DPLength + DPVal; //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValue('payload', payload);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2318,"Name":"Mute","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\n// var RelativeHumidity = \"80\";\r\nvar configs = []; //configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"85\"; //Code type (1 byte) = 85 = 133 = MUTE\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"10\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar commandNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nif (params.Mute.Mute == \"true\") {\r\n var DPVal = \"01\"\r\n} else if (params.Mute.Mute == \"false\") {\r\n var DPVal = \"00\"\r\n}\r\n// var DPVal = \"01\";\r\n// var DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = commandNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nAddValue('payload', payload);\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\n// console.log(payload)\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2319,"Name":"Self Test","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nvar version = '01'\nvar type = 'F2'\nvar data = '8600040B000101'\nvar mid = (+new Date()).toString(16).slice(-4).toUpperCase()\n//console.log('mid: ' + mid)\nvar lengthCommand = 2 + (data.length / 2)\nlengthCommand = (('0000' + lengthCommand).slice(-4))\n//console.log(lengthCommand)\nvar command = version + type + lengthCommand + mid + data\nvar checksum = csum(command)\nchecksum = (('00' + checksum).slice(-2))\n//console.log(checksum)\ncommand += checksum\nAddValue('command', command)\n\nfunction csum(hexstring) {\n //console.log('hexstring: ' + hexstring)\n //hexstring = ascii_to_hexa(hexstring)\n //console.log('hexstring.length: ' + hexstring.length)\n var checksum, index, sum;\n try {\n sum = 0;\n for (var n = 0; n < hexstring.length / 2; n += 1) {\n index = (n * 2);\n //console.log(\"index: \" + index)\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\n //console.log('sum: ' + sum)\n }\n //console.log('funcioan checksum? ' + (sum % 256))\n //Ascii or decimal?\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\n checksum = ((sum % 256).toString(16)).toUpperCase()\n //console.log('checksumHex: ' + checksum)\n return checksum;\n } catch (e) {\n if ((e instanceof TypeError)) {\n checksum = \"\";\n return checksum;\n } else {\n throw e;\n }\n }\n}\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2320,"Name":"Cycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"88\"; // Code type (1 byte) = 80 = 136 = Cycle\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"16\"; // Parameter type (1 byte) 16 = Cycle\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar cycle = parseInt(params.Cycle.Cycle) * 60;\r\n// var cycle = parseInt(cycle) * 60; // Test purposes\r\nvar DPVal = (('00000000' + cycle.toString(16)).slice(-8)); // Parameter value\r\nvar DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = sequenceNumber + DCType + DCLength + DPType + DPLength + DPVal; //Creates Data message\r\nvar lengthCommand = 2 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValue('payload', payload);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2321,"Name":"Alarm Cycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"89\"; // Code type (1 byte) = 89 = 137 = Cycle\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"17\"; // Parameter type (1 byte) 17 = Cycle\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// var cycle = parseInt(\"60\") * 60;\r\nvar cycle = parseInt(params.Cycle.AlarmCycle) * 60;\r\nvar DPVal = (('00000000' + cycle.toString(16)).slice(-8)); // Parameter value\r\nvar DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = sequenceNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 2 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nAddValue('payload', payload);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2322,"Name":"Smoke Threshold","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"80\"; // Code type (1 byte) = 80 = 128 = Smoke_Threshold\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"05\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar commandNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nvar DPVal = params.SmokeThreshold.SmokeThreshold.toString(16) // Parameter value\r\n// var DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = commandNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValue('payload', payload);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2323,"Name":"Smoke Battery Percentage","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var msg = [];\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\nvar configs = []; // Configs from the UI\r\nvar version = '01'; // version number\r\nvar type = 'F2'; // Message Type\r\nvar DCType = \"83\"; // Code type (1 byte) = 83 = 131 = RH\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"08\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar DPVal = params.SmokeBatteryPercentage.SmokeBatteryPercentage.toString(16) // Parameter value\r\nvar commandNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n// var DCType = (('0000' + DCType).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar DInner = commandNumber + DCType + DCLength + DPType + DPLength + DPVal //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log(checksum);\r\npayload += checksum;\r\npayload = payload.toUpperCase();\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValue('payload', payload);\r\n\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //console.log('funcioan checksum? ' + (sum % 256))\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase()\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode,\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2324,"Name":"Server Config","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\r\nvar version = '01';\r\nvar type = 'F2';\r\nvar statusCode = '69';\r\nvar mediaType = '01';\r\n// var data = 'C90004320001'\r\nvar DCType = \"C9\"; // Code type (1 byte) = 81 = 129 = Temp_Threshold\r\nvar DCLength = \"0004\"; // Code length (2 bytes)\r\nvar DPType = \"32\"; // Parameter type (1 byte) 7 = RH Threshold\r\nvar DPLength = \"0001\"; // Parameter length (2 bytes)\r\nvar DPVal = params.ServerConfig.Server;\r\n//console.log(data)\r\nvar sequenceNumber = (+new Date()).toString(16).slice(-4).toUpperCase();\r\n//console.log('mid: ' + mid)\r\n// var lengthCommand = 2 + (data.length / 2)\r\n// lengthCommand = (('0000' + lengthCommand).slice(-4))\r\n//console.log(lengthCommand)\r\n//console.log(lengthCommand)\r\nvar DInner = sequenceNumber + DCType + DCLength + DPType + DPLength + DPVal; //Creates Data message\r\nvar lengthCommand = 1 + (DInner.length / 2); // Calculates the length of byte\r\nlengthCommand = lengthCommand.toString(16); // converts to hex\r\nlengthCommand = (('0000' + lengthCommand).slice(-4)); // puts any value of a 2 value into a 0000 byte length\r\nvar payload = version + type + lengthCommand + DInner;\r\nvar checksum = csum(payload);\r\nchecksum = (('00' + checksum).slice(-2));\r\n//console.log('checksum: ' + checksum)\r\npayload += checksum;\r\n// AddValue(\"sequenceNumber\", sequenceNumber);\r\n// AddValue('payload', payload);\r\nfunction csum(hexstring) {\r\n //console.log('hexstring: ' + hexstring)\r\n //hexstring = ascii_to_hexa(hexstring)\r\n //console.log('hexstring.length: ' + hexstring.length)\r\n var checksum, index, sum;\r\n try {\r\n sum = 0;\r\n for (var n = 0; n < hexstring.length / 2; n += 1) {\r\n index = (n * 2);\r\n //console.log(\"index: \" + index)\r\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\r\n //console.log('sum: ' + sum)\r\n }\r\n //Ascii or decimal?\r\n //checksum = ascii_to_hexa((sum % 256)).lstrip(\"0x\").zfill(2).upper();\r\n checksum = ((sum % 256).toString(16)).toUpperCase();\r\n //console.log('checksumHex: ' + checksum)\r\n return checksum;\r\n } catch (e) {\r\n if ((e instanceof TypeError)) {\r\n checksum = \"\";\r\n return checksum;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n}\r\nvar commandData = {\r\n 'payload': payload,\r\n 'statusCode': statusCode, // what is returned to the device\r\n 'mediaType': mediaType,\r\n 'sequenceNumber': sequenceNumber\r\n};\r\nAddValue(\"commandData\", JSON.stringify(commandData));\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":3,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]}],"Operations":[{"Id":161,"Name":"Heiman","Operation":"var datat; // data triplet type\nvar datal; // data triplet length\nvar datav; // data triplet value\nvar codeType = []; // array of device code types \nvar datatType = []; // array of device data conversion types \nvar alarmType = []; // array of device alarm types \nvar j; // counter\nvar k; // counter\nvar l; // counter\nvar imei; // device imei\nvar imsi;\nvar dstring;\nvar dvalue;\nvar parameterValue;\nvar timeNow = moment.utc().unix();\n// define data variables for smoke detector\nvar smokeCodeType = [\"Smoke\", \"Smoke Concentration\", \"Temperature\", \"relativeHumidity\", \"deviceBattery\", \"Smoke Concentration Threshold\", // 0-5\n \"Temperature Threshold\", \"Relative Humidity Threshold\", \"Smoke Battery power Threshold\", \"NB module Battery power\", \"Mute\", // 6-10\n \"Self Test\", \"Restart\", \"Longitude\", \"Latitude\", \"Alarm Status\", // 11-15\n \"Ordinary Reporting Cycle\", \"Emergency Reporting cycle\", \"ICCID\", \"Smoke chamber pollution\", \"MCU version number\", // 16-20\n \"Smoke detector version number\", \"NB module version number\", \"Reference signal power\", \"Received signal quality\", \"Signal to noise ratio\"\n]; // 21-25\nvar smokeDatatType = [\"unused\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"val\", \"hexDec\", \"hexDec\", \"latlong\", \"latlong\", \"alarmStatus\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\"];\nvar smokeAlarmType = [\"none\", \"ALSM:1\", \"ALSM-S:1\", \"ALTEMP:2\", \"none\", \"BATL:4\", \"BATL-S:4\", \"NB-BATL:9\", \"NB-BATL-S:9\", \"ALSM-FAIL\", \"ALSM-FAIL-S\", \"TEMPANDHUM-FAIL\", \"TEMPANDHUM-FAIL-S\", \"SELFTEST\", \"SELFTEST-COMPLETED\", \"ALTAM\", \"TAMPER-S\", \"DISCONNECTED\", \"RECONNECTED\", \"none\", \"none\"];\n// define data variables for carbon monoxide detector\nvar coCodeType = [\"Carbon Monoxide\", \"CO Concentration\", \"Temperature\", \"Alarm Status\", \"NB Battery Threshold\", \"CO Battery Threshold\", // 0-5\n \"Normal report period\", \"Alarm report period\", \"CO MCU firmware version\", \"NB MCU firmware version\", \"NB model firmware version\", // 6-10\n \"PCB hardware version\", \"unused\", \"Mute\", \"unused\", \"unused\", // 11-15\n \"unused\", \"unused\", \"Self-test\", \"Restart\", \"unused\", \"unused\", \"unused\", \"RSRP\", \"RSRQ\", \"SNR\", \"ECL\", \"Cell-ID\"\n]; // 16-27\nvar coDatatType = [\"unused\", \"hexDec\", \"hexDec\", \"alarmStatus\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"val\", \"hexDec\", \"hexDec\", \"latlong\", \"latlong\", \"alarmStatus\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\"];\nvar coAlarmType = [\"none\", \"ALCO\", \"ALCO-S\", \"unused\", \"unused\", \"BATL\", \"BATL-S\", \"NB-BATL\", \"NB-BATL-S\", \"ALCO-FAIL\", \"ALCO-FAIL-S\", \"unused\", \"unused\", \"SELFTEST\", \"SELFTEST-COMPLETED\", \"ALTAM\", \"TAMPER-S\", \"DISCONNECTED\", \"RECONNECTED\", \"preheat\", \"preheat-OK\", \"EOL\"];\n// define data variables for gas detector\nvar gasCodeType = [\"Gas\", \"Gas Concentration\", \"Device status\", \"Alarm types\", \"Language\", \"Manipulator status\", \"Volume\", \"Self-test\", \"Mute\", \"Remote restart\", \"PCL\", // 0-10\n \"Cell-ID\", \"RSRP\", \"SNR\", \"ECL\", \"Alarm threshold\", \"Report period\", \"unused\", \"unused\", \"unused\", \"Software version\", // 11-20\n \"unused\", \"unused\", \"unused\", \"unused\", \"unused\"\n]; // 21-25\nvar gasDatatType = [\"unused\", \"hexDec\", \"alarmStatus\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexDec\", \"val\", \"hexDec\", \"hexDec\", \"latlong\", \"latlong\", \"alarmStatus\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\", \"hexAscii\", \"hexDec\", \"hexDec\", \"hexDec\"];\nvar gasAlarmType = [\"none\", \"ALSM\", \"ALSM-S\", \"ALTEMP\", \"none\", \"BATL\", \"BATL-S\", \"NB-BATL\", \"NB-BATL-S\", \"ALSM-FAIL\", \"ALSM-FAIL-S\", \"TEMPANDHUM-FAIL\", \"TEMPANDHUM-FAIL-S\", \"SELFTEST\", \"SELFTEST-COMPLETED\", \"ALTAM\", \"TAMPER-S\", \"DISCONNECTED\", \"RECONNECTED\", \"none\", \"none\"];\nif (typeof localTesting === \"undefined\") {\n var localTesting = \"False\";\n}\nif (globalTemplate == \"True\") { // encooded data from device\n if (params.method == \"post\") { // device sending in data\n var alldata = [];\n if (checkPayloadIsCorrect(params.data) == \"True\") { // payload is valid\n var data = params.data.toUpperCase();\n var message_type = data.slice(2, 4); // type f0: device sending event, f3: command ack\n if (message_type == \"F0\") { // event from sensor\n var dtag = data.slice(8, 12);\n var NB_battery = data.slice(12, 14);\n NB_battery = parseInt(NB_battery, 16);\n var signal = data.slice(14, 22);\n imei = hex_to_ascii(data.slice(22, 52));\n imsi = hex_to_ascii(data.slice(52, 82));\n var tstamp = data.slice(82, 98);\n var time_in_s = (Number.parseInt(tstamp, 16) / 1000);\n var ctype = data.slice(98, 100);\n var clen = Number.parseInt(data.slice(100, 104), 16);\n var temperature;\n var relativeHumidity;\n var battery = \"\";\n var getCommandEvent = \"HEIMAN-getCommandNumber\" + ',' + imei + ',' + time_in_s + \";\";\n // write event to system to obtain the number of commands waiting. \n if (localTesting === \"True\") {\n debug('local testing - sending to acceptance server to get the number of commands waiting ');\n debug(getCommandEvent);\n var server = '52.174.17.77';\n } else {\n var 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(`${getCommandEvent}`);\n // asyncronous listen for a response of command amount to send ack to device\n c.on('data', function(commandResponse) {\n var msgLocal = [];\n var commandAmount = (('00' + parseInt(commandResponse.toString(), 10)).slice(-2));\n var payload = '01' + 'F1' + '0006' + '00' + dtag + ctype + commandAmount;\n var checksum = csum(payload);\n checksum = (('00' + checksum).slice(-2));\n payload += checksum;\n var statusCode = '65';\n var ackArr = {\n 'payload': payload,\n 'statusCode': statusCode\n };\n AddValue(msgLocal, 'ack', JSON.stringify(ackArr));\n AddValue(msgLocal, 'imei', imei);\n console.log(msgLocal);\n c.end();\n });\n // loop though all data to check the device type. ( 0=smoke, 1=CO, 2=CH4 ) \n j = 104;\n k = j + clen * 2;\n var heimanDetectorType = 0; // set default type to smoke\n while (j < k) {\n l = 2;\n datat = hexToDecimal(data.substring(j, j + l));\n j = j + l;\n l = 4;\n datal = hexToDecimal(data.substring(j, j + l)) * 2;\n j = j + l;\n l = datal;\n datav = data.substring(j, j + l);\n j = j + l;\n if (datat === 51) {\n heimanDetectorType = hexToDecimal(datav);\n }\n }\n // set variables for correct data type\n switch (heimanDetectorType) {\n case 0:\n codeType = smokeCodeType;\n datatType = smokeDatatType;\n alarmType = smokeAlarmType;\n break;\n case 1:\n codeType = coCodeType;\n datatType = coDatatType;\n alarmType = coAlarmType;\n break;\n case 2:\n codeType = gasCodeType;\n datatType = gasDatatType;\n alarmType = gasAlarmType;\n break;\n }\n AddValue(alldata, \"SensorType\", codeType[0]);\n // reset counters, Decode data from hex string\n j = 104;\n k = j + clen * 2;\n while (j < k) {\n l = 2;\n datat = hexToDecimal(data.substring(j, j + l));\n j = j + l;\n l = 4;\n datal = hexToDecimal(data.substring(j, j + l)) * 2;\n j = j + l;\n l = datal;\n datav = data.substring(j, j + l);\n j = j + l;\n // obtain dvalue from datav \n switch (datatType[datat]) {\n case \"hexDec\":\n dstring = codeType[datat];\n dvalue = hexToDecimal(datav);\n break;\n case \"alarmStatus\":\n dstring = codeType[datat];\n dvalue = alarmType[hexToDecimal(datav)];\n break;\n case \"latlong\":\n dstring = codeType[datat];\n dvalue = (hexToDecimal(datav) / 10000000.0).toFixed(6);\n if (dvalue > 180.0) {\n dvalue = (dvalue - 360.0).toFixed(6);\n }\n break;\n case \"hexAscii\":\n dstring = codeType[datat];\n dvalue = hex_to_ascii(datav);\n break;\n default:\n dstring = codeType[datat];\n dvalue = datav;\n break;\n }\n if (dstring === \"Temperature\") {\n temperature = dvalue;\n }\n if (dstring === \"relativeHumidity\") {\n relativeHumidity = dvalue;\n }\n if (dstring === \"deviceBattery\") {\n battery = dvalue;\n }\n //debug(\"datat = \" + datat + \" datav = \" + datav)\n //debug(dstring + \" = \"+ dvalue);\n AddValue(alldata, dstring, dvalue);\n }\n //debug(alldata);\n // set default to no alarm and get alarm status\n alarmEventCode = \"none\";\n var alarmIndex = alldata.findIndex(item => item.code === \"Alarm Status\");\n if (alarmIndex !== -1) {\n var alarmEventCode = alldata[alarmIndex].value.split(\":\")[0];\n var dataValueNeeded = smokeCodeType[alldata[alarmIndex].value.split(\":\")[1]];\n if (dataValueNeeded !== undefined) {\n var alarmEventValue = alldata[alldata.findIndex(item => item.code === dataValueNeeded)].value;\n } else {\n var alarmEventValue = \"\";\n }\n if (alarmEventCode !== \"none\") { // if alarm send in alarm event\n sendMessageToLocalhostNoWait(\"HEIMAN-\" + alarmEventCode + ',' + imei + ',' + time_in_s + ',' + alarmEventValue + \";\");\n }\n }\n if (temperature !== undefined) { // send in temperature event if temperature defined \n sendMessageToLocalhostNoWait(\"HEIMAN-Temp,\" + imei + \",\" + time_in_s + \",\" + temperature + \",\" + battery + \";\");\n }\n if (relativeHumidity !== undefined) { // send in RH event if RH defined \n sendMessageToLocalhostNoWait(\"HEIMAN-RH,\" + imei + \",\" + time_in_s + \",\" + relativeHumidity + \",\" + battery + \";\");\n }\n // send in cycle event (as none alarm info event) \n sendMessageToLocalhostNoWait(\"HEIMAN-INFO\" + '!' + imei + '!' + time_in_s + '!' + JSON.stringify(alldata) + '!');\n } else if (message_type === \"F3\") { // acknowledgement of command\n // var message_len = data.slice(4, 8);\n var sequenceNumber = data.slice(8, 12);\n var ackType = data.slice(12, 14);\n // var codeTypeLength = data.slice(14, 18);\n // var executionResultType = data.slice(18, 20);\n // var executionResultTypeLength = data.slice(20, 24);\n // var executionResult = data.slice(24, 26);\n // var parameterType = data.slice(26, 28);\n // var parameterTypeLength = data.slice(28, 32);\n var parameterValue = data.slice(32, 34);\n //var checkCode = data.slice(34, 36);\n imei = params.query_params[0].value;\n // send event into server\n sendMessageToLocalhostNoWait(`HEIMAN-ACK,${imei},${ackType},${parameterValue},${sequenceNumber}`);\n var payload = \"\";\n var statusCode = '65'; // give Created response\n var ackArr = {\n 'payload': payload,\n 'statusCode': statusCode\n };\n AddValue(msg, \"imei\", imei);\n AddValue(msg, 'ack', JSON.stringify(ackArr));\n }\n } else { // checksum was invalid\n var payload = \"\";\n var statusCode = '128'; // give bad request error\n var ackArr = {\n 'payload': payload,\n 'statusCode': statusCode\n };\n AddValue(msg, \"imei\", imei);\n AddValue(msg, \"error\", \"checksum failed for message\");\n }\n } else if (params.method == \"get\") { // device getting commands\n imei = params.query_params[0].value; // add imei so server knows which device commands to provide.\n AddValue(msg, \"imei\", imei);\n }\n} else if (oystaTemplate == \"True\") { // decoded event from receiver\n if (raw.startsWith('HEIMAN-getCommandNumber')) { //getCommandNumber request\n if (commandsWaiting == 'True') {\n var commandAmount = JSON.parse(commandsToExecute).length;\n if (commandAmount === null || commandAmount === false) {\n commandAmount = '00';\n }\n } else {\n commandAmount = '00';\n }\n var commandAmountAsString = (('00' + (commandAmount).toString(16)).slice(-2));\n AddValue(msg, \"ack\", commandAmountAsString);\n } else if (messageTypeLocalCode.startsWith('ACK')) { // Ack events\n AddValue(msg, \"fix_state\", 0);\n } else if (messageTypeLocalCode == 'ALSM') { // To display the value of the event in intellicare\n AddValue(msg, \"single_column_value\", params.smokeConcentration);\n } else if (messageTypeLocalCode == 'RH') { // To display the value of the event in intellicare\n AddValue(msg, \"single_column_value\", params.R_Humidity);\n } else if (messageTypeLocalCode.includes('TEMP')) { // To display the value of the event in intellicare\n AddValue(msg, \"single_column_value\", params.temperature);\n } else if (messageTypeLocalCode.includes('BATL')) { // To display the value of the event in intellicare\n AddValue(msg, \"single_column_value\", params.battery_percentage);\n } else if (messageTypeLocalCode == 'HEIMAN-CYC') { // To display the value of the event in intellicare\n AddValue(msg, \"single_column_value\", params.generalEventStatus);\n }\n if (params.backup_battery) {\n var labels = [params.backup_battery];\n AddValue(msg, 'oysta_labels', JSON.stringify(labels));\n }\n if (params.event_time === undefined) { // if params.event_time undefined - set it to now. \n AddValue(msg, \"event_time\", timeNow);\n }\n}\n// end of main operation\n// define functions used in operation\nfunction AddValue(msgArray, p1, p2) { // push code value pair into array\n var cvpair = {\n code: p1,\n value: p2\n };\n msgArray.push(cvpair);\n}\n/* function ascii_to_hexa(str) { // convert ascii string 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 checkPayloadIsCorrect(payloadData) { // check if payload checksum is valid\n if (payloadData != null) {\n var localChecksum = payloadData.slice(-2).toUpperCase;\n var hexString = payloadData.slice(0, -2);\n var generatedChecksum = csum(hexString).toUpperCase;\n if (localChecksum == generatedChecksum) {\n return 'True';\n } else {\n return 'False';\n }\n } else {\n return 'False';\n }\n}\n\nfunction csum(hexstring) { // calculate checksum\n var checksum, index, sum;\n try {\n sum = 0;\n for (var n = 0; n < hexstring.length / 2; n += 1) {\n index = (n * 2);\n sum = (sum + parseInt(hexstring.slice(index, (index + 2)), 16));\n }\n checksum = ((sum % 256).toString(16)).toUpperCase();\n return checksum;\n } catch (e) {\n if ((e instanceof TypeError)) {\n checksum = \"\";\n return checksum;\n } else {\n throw e;\n }\n }\n}\n\nfunction debug(str) { // print out debug info if flag set for local use \n if (localTesting === \"True\") {\n console.log(str);\n }\n}\n\nfunction hex_to_ascii(str1) { // convert 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 hexToDecimal(x) { // convert hex to decimal\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":[]}],"Groups":[{"Id":4133,"Parent":null,"Name":"Features","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4134,"Parent":null,"Name":"Admin Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4135,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","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\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4136,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Smoke Threshold","Json":"{ \"description\": \"\", \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4137,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Temperature Threshold","Json":"{ \"description\": null, \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4138,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Mute","Json":"{ \"description\": null, \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4139,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Relative Humidity","Json":"{ \"description\": \"\", \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4140,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Smoke Battery Percentage","Json":"{ \"description\": \"\", \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4141,"Parent":{"Id":4134,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4141,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Server Config","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4142,"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle","Json":"{ \"description\": \"\", \"columns\": 1, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":5740,"Group":{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set No Activity Alerts in minutes. If the device does not report in the time frame it triggers a No Activity alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5739,"Group":{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"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\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5736,"Group":{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Smoke Threshold","Json":"{ \"name\": \"Smoke Threshold\", \"default\": \"\", \"description\": \"Smoke Threshold\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": 0, \"max\": 100, \"futureOnly\": null, \"integerOnly\": true, \"minLength\": null, \"maxLength\": null, \"helpText\": \"db/m\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5735,"Group":{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Temperature Threshold","Json":"{ \"name\": \"Temperature Threshold\", \"default\": \"\", \"description\": \"Temperature Threshold\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": -40, \"max\": 100, \"futureOnly\": null, \"integerOnly\": true, \"minLength\": null, \"maxLength\": null, \"helpText\": \"In Degrees\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5734,"Group":{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Mute","Json":"{\"name\":\"Mute\",\"default\":\"\",\"description\":\"Mute\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"True or False\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5733,"Group":{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Relative Humidity","Json":"{ \"name\": \"Relative Humidity\", \"default\": \"\", \"description\": \"Relative Humidity Threshold\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": 0, \"max\": 100, \"futureOnly\": null, \"integerOnly\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Range 0 - 100\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5732,"Group":{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Smoke Battery Percentage","Json":"{ \"name\": \"Smoke Battery Percentage\", \"default\": \"\", \"description\": \"Smoke Battery Percentage\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": 0, \"max\": 100, \"futureOnly\": null, \"integerOnly\": true, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Range: 0 - 100\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5731,"Group":{"Id":4141,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4134,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"01\",\"label\":\"Test Server\"},{\"value\":\"02\",\"label\":\"Acceptance\"},{\"value\":\"03\",\"label\":\"Production\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5738,"Group":{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Alarm Cycle","Json":"{ \"name\": \"Alarm Cycle\", \"default\": \"\", \"description\": \"Alarm Cycle\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": 0, \"max\": 71582788, \"futureOnly\": null, \"integerOnly\": true, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Minutes\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ], \"order\": 1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5737,"Group":{"Id":4142,"Name":"Cycle","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4133,"Name":"Features","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4135,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4136,"Name":"Smoke Threshold","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4137,"Name":"Temperature Threshold","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4138,"Name":"Mute","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4139,"Name":"Relative Humidity","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4140,"Name":"Smoke Battery Percentage","Json":{"description":"","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle","Json":"{ \"name\": \"Cycle\", \"default\": \"\", \"description\": \"Cycle Interval\", \"type\": \"number\", \"suffix\": null, \"prefix\": null, \"min\": 2600, \"max\": 86400, \"futureOnly\": null, \"integerOnly\": true, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Minutes\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]}],"ProtocolChanges":[],"ProtocolActionObjects":[],"Tags":[]} \ No newline at end of file