From 9938c25bb75dbc2677c5e28e87eff2d258aec68d Mon Sep 17 00:00:00 2001 From: oysta_intellicare Date: Tue, 4 Jul 2023 06:22:18 +0000 Subject: [PATCH] (Update) (COMM) Parsing more info from coap template --- sensecare | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensecare b/sensecare index 5c2b4d7..cbdda9b 100644 --- a/sensecare +++ b/sensecare @@ -1 +1 @@ -{"Id":161,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":3817,"Code":"ALPIR","Name":"PIR Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALPIR;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALPIR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3790,"Code":"ALRH","Name":"Humidity Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALHumidity;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALHumidity;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3821,"Code":"ALCO2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALGas;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALGas;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3820,"Code":"PIR","Name":"PIR","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;PIR;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;PIR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3819,"Code":"RH","Name":"Humidity","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Humidity;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Humidity;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3818,"Code":"BATR","Name":"Battery","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Battery;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Battery;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3814,"Code":"ANSWDR","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;15;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;15;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3813,"Code":"ALBAT","Name":"Battery Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALBattery;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBattery;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3812,"Code":"ENTER","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;13;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;13;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3811,"Code":"EXIT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;7;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;7;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3810,"Code":"CO2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Gas;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Gas;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3809,"Code":"LUX","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Lux;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Lux;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3808,"Code":"LEAK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALLEAK;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALLEAK;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3807,"Code":"BEDOUT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALBED;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBED;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3806,"Code":"ALTemp","Name":"Temperature Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALTemp;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALTemp;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3805,"Code":"DRCL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Ext1;<>;<>;<>;<>;<>;<>;<>;<>;2;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Ext1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;2;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3804,"Code":"LEAK-OFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALLEAK;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALLEAK;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3803,"Code":"EXTNOC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Ext1;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Ext1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3802,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"coap-<>-ubi-<>-<>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^coap-[^-]*-ubi-[^--]*-[^-]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3801,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3800,"Code":"DRO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;3;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;3;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3799,"Code":"VISDEP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;3;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;3;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3798,"Code":"VISARR","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;2;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;2;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3797,"Code":"NACT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"+RESP:NACT,<>,<>$","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3796,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;<>;<>;<>;<>;<>;<>;<>;[[<>;<>;<>;<>;]]","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;([^;;]*;[^;;]*;[^;;]*;[^;;]*;)+","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3795,"Code":"SYS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;SYS;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;SYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3794,"Code":"ALDO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3793,"Code":"BEDIN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALBED;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBED;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3792,"Code":"ALDC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3791,"Code":"CYC","Name":"cycle","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;<>;<>;<>;<>;<>;<>;[[<>;<>;<>;<>;]]","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"8677<>,<> ","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;([^;;]*;[^;;]*;[^;;]*;[^;;]*;)+","RegExGlobal":"^8677[^ ]*,[^ ,]* ","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3789,"Code":"Temp","Name":"Temperature","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Temp;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Temp;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[],"Operations":[{"Id":165,"Name":"Operation","Operation":"if (typeof localTesting === \"undefined\") {\n var localTesting = \"False\";\n}\nvar dataToReceiver = [];\nvar codeValues = [];\nvar timeNow = moment.utc().unix();\nAddValue(codeValues, 'protocol_template', 'SafeHome');\nAddValue(codeValues, 'product', serverParams.ProductName);\nif (globalTemplate == \"True\") { // encooded data from device\n if (params.method == \"post\") { // device sending in data\n var DeviceID = [\"SYS\", \"Ext1\", \"Temp\", \"Battery\", \"Humidity\", \"Temp\", \"Acceleration\", \"Mag\", \"PIR\", \"Lux\", \"Gas\", \"Sound\", \"Smoke\", \"Particle\", \"IR TEMP\", \"GPS\"];\n var DataType = [\"CUR\", \"SEC\", \"TRD\", \"MIN\", \"MAX\", \"AVG\", \"EVT\"];\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\n var ack = \"\";\n var chunk;\n var datasetStr = '';\n var dataset = {};\n var eventString;\n var message_time = moment.utc().unix();\n var dataArray = [];\n var dsIdx, valIdx;\n var pos = params.data.indexOf(\" \"); // the header is up to the value of \"20\" (space character)\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\n var header = params.data.slice(0, pos);\n // to process the header we slit it into an array. Values are separated by comma \n var headerArray = header.split(',');\n var uID = headerArray[0];\n var imei = headerArray[1];\n var index = headerArray[2];\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\n var imsi = headerArray[4];\n var rssi = headerArray[5];\n var interval = headerArray[6];\n debug('params.data =' + params.data);\n debug('header =' + header);\n debug('uID =' + uID);\n debug('imei =' + imei);\n debug('index =' + index);\n debug('flags =' + flags);\n debug('imsi =' + imsi);\n debug('rssi =' + rssi);\n debug('interval =' + interval);\n var eventP1 = \"UBIQ;\";\n var eventP2 = '';\n var eventP3 = \";\" + imei + \";\" + index + \";\" + flags + \";\" + imsi + \";\" + rssi + \";\" + interval + \";\";\n var data = params.data.slice(pos + 1); // skip the first 00\n debug('data =' + data);\n dataArray = data.split(\",\");\n datapointCount = [];\n datasetCount = 0;\n dsIdx = 0;\n while (dsIdx < dataArray.length) {\n datapointCount[dsIdx] = 0;\n datasetStr = dataArray[dsIdx];\n debug('datasetStr =' + datasetStr);\n if (datasetStr.length >= 8) {\n valIdx = 2;\n while (valIdx < datasetStr.length) {\n chunk = datasetStr.substr(valIdx, 6);\n debug('chunk = ' + chunk)\n if (chunk.length === 6) {\n dataset = ParseValue(chunk);\n if (dataset.Alarm === 1) {\n eventP2 = \"AL\";\n } else {\n eventP2 = '';\n }\n eventP2 = eventP2 + dataset.ID;\n event_time = message_time - (interval * 3600 * datasetCount);\n eventString = eventP1 + eventP2 + eventP3 + event_time + \";\" + dataset.DT + \";\" + dataset.Value + \";\" + dataset.Value + \";\";\n sendMessageToLocalhostNoWait(eventString);\n }\n valIdx += 6;\n }\n datasetCount++;\n }\n dsIdx++;\n }\n var payload = '31';\n var statusCode = '65';\n var ackArr = {\n 'payload': payload,\n 'statusCode': statusCode\n };\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\n AddValue(codeValues, 'imei', imei);\n debug(\"finished global\");\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(codeValues, \"imei\", imei);\n }\n} else if (oystaTemplate == \"True\") { // decoded event from receiver\n}\nvar dataToReceiver = {\n 'values': codeValues\n};\nconsole.log(dataToReceiver);\ndebug(\"end of operation\");\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\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 ParseHeader(strValue) {\n var i = 0;\n var res = \"\";\n while (i < strValue.length) {\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\n i += 2;\n }\n return res;\n}\n\nfunction pad(num, size) {\n num = num.toString();\n while (num.length < size) num = \"0\" + num;\n return num;\n}\n\nfunction ParseValue(strValue) {\n var result = {};\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\n result.Value = (val & 0xFFF); // this is the value mantissa\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\n var exp = ExpArray[(val >> 13) & 0x07];\n result.Value = result.Value * exp;\n result.Value = Math.round(result.Value * 100000) / 100000;\n // Replacing Device ID if an External Component is connected\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\n if (configs.Sensors.ExternalSensorType) {\n if ((result.ID === \"Ext1\") || (result.ID === \"Ext2\")) {\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\n result.ID = externalSensor; // replace ID with the Sensor label\n }\n }\n }\n return result;\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":[{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"Door\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687170366},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687172423},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n month = month - 1; // remove one month to try and correct error\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687337124},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687361580},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Ext1\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"PIR\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687449017},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Ext1\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Humidity\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"PIR\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687638530}]}],"Groups":[{"Id":4210,"Parent":null,"Name":"Feature Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4211,"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4212,"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Sensors","Json":"{\"description\":\"External Sensor\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":5807,"Group":{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set No Activity Alerts in minutes. If the device does not report in the time frame it triggers a No Activity alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[{"Id":1532,"Name":"noActivityInterval","BackendAction":"ActivateNoActivity","Value":""}]},{"Id":5806,"Group":{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5808,"Group":{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"ExternalSensorType","Json":"{\"name\":\"ExternalSensorType\",\"default\":\"\",\"description\":null,\"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\":\"BED\",\"label\":\"Bed Sensor\"},{\"value\":\"DOOR\",\"label\":\"Door Sensor\"},{\"value\":\"ALLEAK\",\"label\":\"Leak Sensor\"},{\"label\":\"No External Sensor\",\"value\":\"Ext1\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) updating event time","Timestamp":1687170366},{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) make DOOR capital in operation","Timestamp":1687172423},{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Protocol","Name":null,"Message":"Packing event time correction and door events","Timestamp":1687328727},{"Version":"0.3","UserName":"Andy-Superadmin","Resource":"Protocol","Name":null,"Message":"pack - no change, just increasing version number as test","Timestamp":1687328942},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) Remove 1 from month ( to reduce possible bug) ","Timestamp":1687337124},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) remove month fix as fixed in firmware","Timestamp":1687361580},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) update Bed to Ext1","Timestamp":1687449017},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) Correct Hum to Humidity","Timestamp":1687638530}],"ProtocolActionObjects":[],"Tags":[]} \ No newline at end of file +{"Id":161,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":3817,"Code":"ALPIR","Name":"PIR Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALPIR;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALPIR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3790,"Code":"ALRH","Name":"Humidity Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALHumidity;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALHumidity;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3821,"Code":"ALCO2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALGas;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALGas;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3820,"Code":"PIR","Name":"PIR","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;PIR;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;PIR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3819,"Code":"RH","Name":"Humidity","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Humidity;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Humidity;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3818,"Code":"BATR","Name":"Battery","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Battery;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Battery;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3814,"Code":"ANSWDR","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;15;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;15;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3813,"Code":"ALBAT","Name":"Battery Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALBattery;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBattery;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3812,"Code":"ENTER","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;13;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;13;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3811,"Code":"EXIT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALDOOR;<>;<>;<>;<>;<>;<>;<>;<>;7;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALDOOR;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;7;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3810,"Code":"CO2","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Gas;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Gas;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3809,"Code":"LUX","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Lux;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Lux;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3808,"Code":"LEAK","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALLEAK;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALLEAK;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3807,"Code":"BEDOUT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALBED;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBED;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3806,"Code":"ALTemp","Name":"Temperature Alarm","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALTemp;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALTemp;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3805,"Code":"DRCL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Ext1;<>;<>;<>;<>;<>;<>;<>;<>;2;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Ext1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;2;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3804,"Code":"LEAK-OFF","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALLEAK;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALLEAK;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3803,"Code":"EXTNOC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Ext1;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Ext1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3802,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"coap-<>-ubi-<>-<>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^coap-[^-]*-ubi-[^--]*-[^-]*","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":3802,\"Code\":\"COMM\",\"Name\":null,\"MessageCode\":\"COMM\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"\",\"HasTemplateGlobal\":true,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":\"coap-<>-ubi-<>-<>,<>,<>,<>,<>,<>,<> <>\",\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"\",\"RegExGlobal\":\"^coap-[^-]*-ubi-[^--]*-[^,-]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^ ,]* [^ ]*\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1688451738}],"Tags":[]},{"Id":3801,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3800,"Code":"DRO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;3;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;3;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3799,"Code":"VISDEP","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;3;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;3;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3798,"Code":"VISARR","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALSYS;<>;<>;<>;<>;<>;<>;<>;<>;2;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALSYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;2;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3797,"Code":"NACT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"+RESP:NACT,<>,<>$","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3796,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;<>;<>;<>;<>;<>;<>;<>;[[<>;<>;<>;<>;]]","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;([^;;]*;[^;;]*;[^;;]*;[^;;]*;)+","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3795,"Code":"SYS","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;SYS;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;SYS;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3794,"Code":"ALDO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3793,"Code":"BEDIN","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;ALBED;<>;<>;<>;<>;<>;<>;<>;<>;1;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALBED;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;1;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3792,"Code":"ALDC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"UBIQ;ALExt1;<>;<>;<>;<>;<>;<>;<>;<>;0;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;ALExt1;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;0;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3791,"Code":"CYC","Name":"cycle","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;<>;<>;<>;<>;<>;<>;[[<>;<>;<>;<>;]]","HasTemplateGlobal":true,"ResponseTemplate":"<>","TemplateGlobal":"8677<>,<> ","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;([^;;]*;[^;;]*;[^;;]*;[^;;]*;)+","RegExGlobal":"^8677[^ ]*,[^ ,]* ","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3789,"Code":"Temp","Name":"Temperature","MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"UBIQ;Temp;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^UBIQ;Temp;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[],"Operations":[{"Id":165,"Name":"Operation","Operation":"if (typeof localTesting === \"undefined\") {\n var localTesting = \"False\";\n}\nvar dataToReceiver = [];\nvar codeValues = [];\nvar timeNow = moment.utc().unix();\nAddValue(codeValues, 'protocol_template', 'SafeHome');\nAddValue(codeValues, 'product', serverParams.ProductName);\nif (globalTemplate == \"True\") { // encooded data from device\n if (params.method == \"post\") { // device sending in data\n var DeviceID = [\"SYS\", \"Ext1\", \"Temp\", \"Battery\", \"Humidity\", \"Temp\", \"Acceleration\", \"Mag\", \"PIR\", \"Lux\", \"Gas\", \"Sound\", \"Smoke\", \"Particle\", \"IR TEMP\", \"GPS\"];\n var DataType = [\"CUR\", \"SEC\", \"TRD\", \"MIN\", \"MAX\", \"AVG\", \"EVT\"];\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\n var ack = \"\";\n var chunk;\n var datasetStr = '';\n var dataset = {};\n var eventString;\n var message_time = moment.utc().unix();\n var dataArray = [];\n var dsIdx, valIdx;\n var pos = params.data.indexOf(\" \"); // the header is up to the value of \"20\" (space character)\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\n var header = params.data.slice(0, pos);\n // to process the header we slit it into an array. Values are separated by comma \n var headerArray = header.split(',');\n var uID = headerArray[0];\n var imei = headerArray[1];\n var index = headerArray[2];\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\n var imsi = headerArray[4];\n var rssi = headerArray[5];\n var interval = headerArray[6];\n debug('params.data =' + params.data);\n debug('header =' + header);\n debug('uID =' + uID);\n debug('imei =' + imei);\n debug('index =' + index);\n debug('flags =' + flags);\n debug('imsi =' + imsi);\n debug('rssi =' + rssi);\n debug('interval =' + interval);\n var eventP1 = \"UBIQ;\";\n var eventP2 = '';\n var eventP3 = \";\" + imei + \";\" + index + \";\" + flags + \";\" + imsi + \";\" + rssi + \";\" + interval + \";\";\n var data = params.data.slice(pos + 1); // skip the first 00\n debug('data =' + data);\n dataArray = data.split(\",\");\n datapointCount = [];\n datasetCount = 0;\n dsIdx = 0;\n while (dsIdx < dataArray.length) {\n datapointCount[dsIdx] = 0;\n datasetStr = dataArray[dsIdx];\n debug('datasetStr =' + datasetStr);\n if (datasetStr.length >= 8) {\n valIdx = 2;\n while (valIdx < datasetStr.length) {\n chunk = datasetStr.substr(valIdx, 6);\n debug('chunk = ' + chunk)\n if (chunk.length === 6) {\n dataset = ParseValue(chunk);\n if (dataset.Alarm === 1) {\n eventP2 = \"AL\";\n } else {\n eventP2 = '';\n }\n eventP2 = eventP2 + dataset.ID;\n event_time = message_time - (interval * 3600 * datasetCount);\n eventString = eventP1 + eventP2 + eventP3 + event_time + \";\" + dataset.DT + \";\" + dataset.Value + \";\" + dataset.Value + \";\";\n sendMessageToLocalhostNoWait(eventString);\n }\n valIdx += 6;\n }\n datasetCount++;\n }\n dsIdx++;\n }\n var payload = '31';\n var statusCode = '65';\n var ackArr = {\n 'payload': payload,\n 'statusCode': statusCode\n };\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\n AddValue(codeValues, 'imei', imei);\n debug(\"finished global\");\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(codeValues, \"imei\", imei);\n }\n} else if (oystaTemplate == \"True\") { // decoded event from receiver\n}\nvar dataToReceiver = {\n 'values': codeValues\n};\nconsole.log(dataToReceiver);\ndebug(\"end of operation\");\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\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 ParseHeader(strValue) {\n var i = 0;\n var res = \"\";\n while (i < strValue.length) {\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\n i += 2;\n }\n return res;\n}\n\nfunction pad(num, size) {\n num = num.toString();\n while (num.length < size) num = \"0\" + num;\n return num;\n}\n\nfunction ParseValue(strValue) {\n var result = {};\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\n result.Value = (val & 0xFFF); // this is the value mantissa\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\n var exp = ExpArray[(val >> 13) & 0x07];\n result.Value = result.Value * exp;\n result.Value = Math.round(result.Value * 100000) / 100000;\n // Replacing Device ID if an External Component is connected\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\n if (configs.Sensors.ExternalSensorType) {\n if ((result.ID === \"Ext1\") || (result.ID === \"Ext2\")) {\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\n result.ID = externalSensor; // replace ID with the Sensor label\n }\n }\n }\n return result;\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":[{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"Door\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687170366},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687172423},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n month = month - 1; // remove one month to try and correct error\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687337124},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Bed\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"movement\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687361580},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Ext1\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Hum\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"PIR\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687449017},{"Type":1,"NewValue":"{\"Id\":165,\"Name\":\"Operation\",\"Operation\":\"if (typeof localTesting === \\\"undefined\\\") {\\n var localTesting = \\\"False\\\";\\n}\\nvar dataToReceiver = [];\\nvar codeValues = [];\\nvar timeNow = moment.utc().unix();\\nAddValue(codeValues, 'protocol_template', 'SafeHome');\\nAddValue(codeValues, 'product', serverParams.ProductName);\\nif (globalTemplate == \\\"True\\\") { // encooded data from device\\n if (params.method == \\\"post\\\") { // device sending in data\\n var DeviceID = [\\\"SYS\\\", \\\"Ext1\\\", \\\"DOOR\\\", \\\"Battery\\\", \\\"Humidity\\\", \\\"Temp\\\", \\\"Acceleration\\\", \\\"Lux\\\", \\\"PIR\\\", \\\"CO2\\\", \\\"magentometer\\\", \\\"Sound\\\", \\\"Smoke\\\", \\\"Particle\\\", \\\"IR_Temp\\\", \\\"GPS\\\"];\\n var DataType = [\\\"CUR\\\", \\\"SEC\\\", \\\"TRD\\\", \\\"AVG\\\", \\\"MIN\\\", \\\"MAX\\\", \\\"EVT\\\"];\\n var ExpArray = [1000, 100, 10, 1, 0.1, 0.01, 0.001, 0.0001];\\n var ack = \\\"\\\";\\n var chunk;\\n var datasetStr = '';\\n var dataset = {};\\n var eventString;\\n var message_time = moment.utc().unix();\\n var dataArray = [];\\n var dsIdx, valIdx;\\n var pos = params.data.indexOf(\\\" \\\"); // the header is up to the value of \\\"20\\\" (space character)\\n // var header = ParseHeader(rawFromBytes.slice(0, pos));\\n var header = params.data.slice(0, pos);\\n // to process the header we slit it into an array. Values are separated by comma \\n var headerArray = header.split(',');\\n var uID = headerArray[0];\\n var imei = headerArray[1];\\n var index = headerArray[2];\\n var flags = headerArray[3]; // A value of 1 indicates that the device will accept responses\\n var imsi = headerArray[4];\\n var rssi = headerArray[5];\\n var interval = headerArray[6];\\n debug('params.data =' + params.data);\\n debug('header =' + header);\\n debug('uID =' + uID);\\n debug('imei =' + imei);\\n debug('index =' + index);\\n debug('flags =' + flags);\\n debug('imsi =' + imsi);\\n debug('rssi =' + rssi);\\n debug('interval =' + interval);\\n var eventP1 = \\\"UBIQ;\\\";\\n var eventP2 = '';\\n var eventP3 = \\\";\\\" + imei + \\\";\\\" + index + \\\";\\\" + flags + \\\";\\\" + imsi + \\\";\\\" + rssi + \\\";\\\" + interval + \\\";\\\";\\n var data = params.data.slice(pos + 1); // skip the first 00\\n debug('data =' + data);\\n dataArray = data.split(\\\",\\\");\\n datapointCount = [];\\n datasetCount = 0;\\n dsIdx = 0;\\n while (dsIdx < dataArray.length) {\\n datapointCount[dsIdx] = 0;\\n datasetStr = dataArray[dsIdx];\\n debug('datasetStr = ' + datasetStr);\\n var timeStr = (datasetStr.substr(0, 8));\\n debug('timeStr = ' + timeStr);\\n event_time = GetTimeStampInInUTC(timeStr)\\n debug('event_time = ' + event_time);\\n if (datasetStr.length >= 8) {\\n valIdx = 8;\\n while (valIdx < datasetStr.length) {\\n chunk = datasetStr.substr(valIdx, 6);\\n debug('chunk = ' + chunk)\\n if (chunk.length === 6) {\\n dataset = ParseValue(chunk);\\n if (dataset.Alarm === 1) {\\n eventP2 = \\\"AL\\\";\\n } else {\\n eventP2 = '';\\n }\\n eventP2 = eventP2 + dataset.ID;\\n //event_time = message_time - (interval * 3600 * datasetCount);\\n eventString = eventP1 + eventP2 + eventP3 + event_time + \\\";\\\" + dataset.DT + \\\";\\\" + dataset.Value + \\\";\\\" + dataset.Value + \\\";\\\";\\n sendMessageToLocalhostNoWait(eventString);\\n }\\n valIdx += 6;\\n }\\n datasetCount++;\\n }\\n dsIdx++;\\n }\\n var payload = '31';\\n var statusCode = '65';\\n var ackArr = {\\n 'payload': payload,\\n 'statusCode': statusCode\\n };\\n AddValue(codeValues, 'ack', JSON.stringify(ackArr));\\n AddValue(codeValues, 'imei', imei);\\n debug(\\\"finished global\\\");\\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(codeValues, \\\"imei\\\", imei);\\n }\\n} else if (oystaTemplate == \\\"True\\\") { // decoded event from receiver\\n}\\nvar dataToReceiver = {\\n 'values': codeValues\\n};\\nconsole.log(dataToReceiver);\\ndebug(\\\"end of operation\\\");\\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\\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 ParseHeader(strValue) {\\n var i = 0;\\n var res = \\\"\\\";\\n while (i < strValue.length) {\\n res += String.fromCharCode(parseInt(strValue.substr(i, 2), 16));\\n i += 2;\\n }\\n return res;\\n}\\n\\nfunction pad(num, size) {\\n num = num.toString();\\n while (num.length < size) num = \\\"0\\\" + num;\\n return num;\\n}\\n\\nfunction ParseValue(strValue) {\\n var result = {};\\n var val = parseInt(strValue, 16); // convert the chunk into an unsigned integer\\n result.Alarm = (val >> 23) & 0x01; // this is a flag (0 or 1) to indicate that the value is in alarmed state\\n result.DT = DataType[(val >> 20) & 0x07]; // this defines the value type (current, min, max, average, etc)\\n result.ID = DeviceID[(val >> 16) & 0x0F]; // this is the measurement type (Battery, Temp, RH, Vibration, etc)\\n result.Value = (val & 0xFFF); // this is the value mantissa\\n if (((val >> 12) & 0x01) > 0) result.Value = -result.Value;\\n var exp = ExpArray[(val >> 13) & 0x07];\\n result.Value = result.Value * exp;\\n result.Value = Math.round(result.Value * 100000) / 100000;\\n // Replacing Device ID if an External Component is connected\\n if (serverParams.IsInit === true) { //if device has configs ie External Component is connected\\n if (configs.Sensors.ExternalSensorType) {\\n if ((result.ID === \\\"Ext1\\\") || (result.ID === \\\"Ext2\\\")) {\\n var externalSensor = configs.Sensors.ExternalSensorType; // pulling value of sensor label from intellicare\\n result.ID = externalSensor; // replace ID with the Sensor label\\n }\\n }\\n }\\n return result;\\n}\\n\\nfunction GetTimeStampInInUTC(strValue) {\\n var ts = parseInt(strValue, 16);\\n var seconds = ts & 0x3F;\\n ts >>= 6;\\n var minutes = ts & 0x3F;\\n ts >>= 6;\\n var hours = ts & 0x1F;\\n ts >>= 5;\\n var day = ts & 0x1F;\\n ts >>= 5;\\n var month = ts & 0x0F; // month is 0 based (Jan = 0)\\n ts >>= 4;\\n var year = ts + 2000;\\n return Date.UTC(year, month, day, hours, minutes, seconds, 0) / 1000;\\n}\\n\\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\\n var server;\\n if (localTesting === \\\"True\\\") {\\n console.log('local testing - sending to acceptance server the message ... ');\\n console.log(str);\\n server = '52.174.17.77';\\n } else {\\n server = '127.0.0.1';\\n }\\n var c = net.createConnection(5678, server);\\n c.on('error', function(error) {\\n c = net.createConnection(5678, server);\\n });\\n c.write(`${str}`);\\n c.end();\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1687638530}]}],"Groups":[{"Id":4210,"Parent":null,"Name":"Feature Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4211,"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4212,"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Sensors","Json":"{\"description\":\"External Sensor\",\"columns\":1,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":5807,"Group":{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set No Activity Alerts in minutes. If the device does not report in the time frame it triggers a No Activity alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[{"Id":1532,"Name":"noActivityInterval","BackendAction":"ActivateNoActivity","Value":""}]},{"Id":5806,"Group":{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5808,"Group":{"Id":4212,"Name":"Sensors","Json":{"description":"External Sensor","columns":1,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4210,"Name":"Feature Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":4211,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"ExternalSensorType","Json":"{\"name\":\"ExternalSensorType\",\"default\":\"\",\"description\":null,\"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\":\"BED\",\"label\":\"Bed Sensor\"},{\"value\":\"DOOR\",\"label\":\"Door Sensor\"},{\"value\":\"ALLEAK\",\"label\":\"Leak Sensor\"},{\"label\":\"No External Sensor\",\"value\":\"Ext1\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) updating event time","Timestamp":1687170366},{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) make DOOR capital in operation","Timestamp":1687172423},{"Version":"0.2","UserName":"Andy-Superadmin","Resource":"Protocol","Name":null,"Message":"Packing event time correction and door events","Timestamp":1687328727},{"Version":"0.3","UserName":"Andy-Superadmin","Resource":"Protocol","Name":null,"Message":"pack - no change, just increasing version number as test","Timestamp":1687328942},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) Remove 1 from month ( to reduce possible bug) ","Timestamp":1687337124},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) remove month fix as fixed in firmware","Timestamp":1687361580},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) update Bed to Ext1","Timestamp":1687449017},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"Operation","Name":"Operation","Message":"(Update) (Operation) Correct Hum to Humidity","Timestamp":1687638530},{"Version":"0.4","UserName":"Andy-Superadmin","Resource":"MessageType","Name":"COMM","Message":"(Update) (COMM) Parsing more info from coap template","Timestamp":1688451738}],"ProtocolActionObjects":[],"Tags":[]} \ No newline at end of file