diff --git a/vgv b/vgv index 52e2afc..6461414 100644 --- a/vgv +++ b/vgv @@ -1 +1 @@ -{"Id":205,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":5989,"Code":"NOPROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOPROX;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOPROX;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5990,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5991,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5992,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5993,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALSOS;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALSOS;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5994,"Code":"completed","Name":"ACK command","MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;OK;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624938},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625487},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625835},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707224},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":true,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ok\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718875625},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ok\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718876306}],"Tags":[]},{"Id":5995,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5996,"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":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5997,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5998,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5999,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6000,"Code":"PROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;PROX=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PROX=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6001,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6002,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":"<<->>VGV-001-Invent<<->>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6003,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5982,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5983,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653303},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624176},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":true,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625507},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718626131},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707263}],"Tags":[]},{"Id":5984,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt()-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719306762},{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt()-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719307635},{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt(System.String, System.String, System.String)-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":\"salt,Password,Password\",\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719310876}],"Tags":[]},{"Id":5985,"Code":"received","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;RCVD;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5985,\"Code\":\"received\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;RCVD;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;RCVD;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624912},{"Type":1,"NewValue":"{\"Id\":5985,\"Code\":\"received\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;RCVD;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;RCVD;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707234}],"Tags":[]},{"Id":5986,"Code":"error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;ERR;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5987,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5988,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGV-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGV-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6004,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177889},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653474},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718627036},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707248}],"Tags":[]}],"Commands":[{"Id":4096,"Name":"NonMovement","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.NonMovement.EnableDisableNonMovement == \"true\") {\n var state = 1;\n} else {\n var state = \"0\";\n}\nvar command = \"ALNM=\" + state + \",\" + params.NonMovement.period;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856700},{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862387}],"Tags":[]},{"Id":4095,"Name":"Set Scanning Enable","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let doScan = params.Scanning.EnableScanning == \"true\" ? 1 : 0;\nlet aggs = \",\" + params.Scanning.MacIDs;\nvar aggids = params.Scanning.EnableScanning == \"true\" ? aggs : '';\nlet command = \"SCANAGG=\" + doScan + aggids;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856904},{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862564}],"Tags":[]},{"Id":4094,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkown Failure.\";\nif (params.DeviceConfig.IVActivated == \"true\") {\n command = \"ACTIVATED_OK\";\n} else {\n command = \"ACTIVATED_FAIL=\" + params.DeviceConfig.IVActivatedFailMessage;\n}\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856680},{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862369}],"Tags":[]},{"Id":4093,"Name":"SendMACs","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"AGGIDS=\" + params.Scanning.MacIDs;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856815},{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862480}],"Tags":[]},{"Id":4092,"Name":"Set Config Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.ConfigMode == \"true\") {\n enableConfig = \"1\";\n} else {\n enableConfig = \"0\";\n}\nvar command = \"CONFIG=\" + enableConfig;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856835},{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862498},{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"const _crypto = require('crypto');\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716286535}],"Tags":[]},{"Id":4091,"Name":"Battery Critical Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAC=\" + endis + \",\" + params.Batteryalerts.BatteryCriticalThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856589},{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862278}],"Tags":[]},{"Id":4090,"Name":"Battery Low Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.Batteryalerts.EnableBatteryLowAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAL=\" + endis + \",\" + params.Batteryalerts.BatteryLowThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856616},{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862300}],"Tags":[]},{"Id":4089,"Name":"SOS Number","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"SOSN=\" + params.MakeCall.SOSNumber.replace(\"(\", \"\").replace(\")\", \"\");\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":8,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715855955},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856353},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862067}],"Tags":[]},{"Id":4088,"Name":"Send Notification","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"NOTE=\" + params.Note.Message;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856789},{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862461}],"Tags":[]},{"Id":4087,"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856558},{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862254}],"Tags":[]},{"Id":4086,"Name":"SOS Options","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = []; // for sms template\r\nvar SOSOptions;\r\nvar Handsfree, Makecall;\r\n//var command = \"SOSO=\" + JSON.stringify(params.SOSOptions.HandsFree);\r\nif (params.MakeCall.EnableDisableMakeCall == \"true\") {\r\n Makecall = 1;\r\n if (params.MakeCall.HandsFree === \"true\") {\r\n Handsfree = \"1\";\r\n } else {\r\n Handsfree = \"0\";\r\n }\r\n} else {\r\n Makecall = \"0\";\r\n Handsfree = \"0\";\r\n}\r\nvar command = \"SOSO=\" + params.MakeCall.Timeout + \",\" + Makecall + \",\" + Handsfree;\r\nvar sequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValueSMS(\"part1\", part1); //for sms template\r\nAddValueSMS(\"part2\", part2); // for sms template\r\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS //for sms template\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction AddValueSMS(p1, p2) { //function for sms template\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856960},{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862617}],"Tags":[]},{"Id":4085,"Name":"Real Time Locate","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"POSN\";\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"request=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856719},{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862400}],"Tags":[]},{"Id":4084,"Name":"Set Server","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\r\nsequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nvar command = \"IP=\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856937},{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862579}],"Tags":[]},{"Id":4083,"Name":"Reset Device","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"RESET\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856772},{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862447}],"Tags":[]},{"Id":4082,"Name":"Cycle Interval","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"CYCCONFIG=\" + params.CycleInterval.CycleInterval;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856657},{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862349}],"Tags":[]},{"Id":4081,"Name":"Set Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"PW=\" + params.Password.Password;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n // var password = params.Password.Password;\n // use old password if it has been changed to send password update\n let new_password = params.Password.Password;\n let old_password = params.Password.PasswordOld;\n if (new_password === old_password) {\n var password = new_password;\n } else {\n var password = old_password;\n }\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n}\\n//if (params.Password.encryption === \\\"true\\\") {\\n// var part2 = encrypt(command, part1, password);\\n//} else {\\nvar part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715687167},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715860808},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862530}],"Tags":[]},{"Id":4097,"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":false,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177961},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713428245},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856637},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862327}],"Tags":[]},{"Id":4098,"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178028},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856734},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862415}],"Tags":[]},{"Id":4099,"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178130},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttime + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440200},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar someDate = new Date(starttime);\\nstarttimeInt = someDate.getTime() / 1000;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441651},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441974},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNan(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNan(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563558},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563687},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856754},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862433}],"Tags":[]},{"Id":4100,"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178198},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856881},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862546}],"Tags":[]}],"Operations":[{"Id":278,"Name":"VGV","Operation":"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\n // Define array to push device data into. This will be put into the msg array at the end.\n var deviceParams = [];\n var configsToSend = [];\n var tasks = [];\n const _crypto = require('crypto');\n // handle ACK\n if (messageTypeCode == \"ACK\") {\n return \"\";\n }\n if (params.encrypted_data) { // encrypted data so needs decrypting\n var password;\n if (params.imei == \"null\") {\n return msg;\n }\n password = params.imei;\n if (configs.Password.Password === \"\") {\n // use imei as default password when not specified\n } else {\n // use the password\n password = configs.Password.Password\n }\n // handle encrypted messages arriving via SMS\n // if (raw.startsWith('esendex')) {\n // raw = raw.split('esendex')[2];\n // encimei = raw.split(';')[1];\n // imei = parseInt(raw.split(';')[1], 36).toString();\n // AddValue('imei', imei);\n // raw = raw.replace(encimei, imei);\n // password = imei;\n // }\n let message = decrypt(raw, password);\n //ToDo: handle errors messages arriving\n // if (message.startsWith(\"error\")) {\n // ack = \"ERR;\" + params.count_number + \";\";\n // msg.push({\n // 'code': 'ack',\n // 'value': ack\n // });\n // console.log(msg);\n // } \n if (message) {\n // send message internally\n sendMessageToLocalhost(message);\n let ack = \"ACK-MSG;\" + params.count_number + \";OK;\\n\"\n AddValue(\"ack\", ack);\n } else {\n ack = \"unknown message\" + \" - \" + serverParams.imei + \" --- \" + raw;\n AddValue(\"ack\", ack);\n }\n } else { // General Oysta Template\n if (messageTypeLocalCode == \"COMM\") { // a message from Invent!\n const details = JSON.parse(raw);\n // AddValue('imei', details.AppId);\n AddValue('json_in', JSON.stringify(details));\n switch (details.Command) {\n case \"ACTIVATE_OK\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n break;\n case \"ACTIVATE_FAILS\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\n break;\n case \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"SETSOS\":\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\n break;\n case \"APPSET\":\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\n AddConfig(configIds.Password.Password, details.Data.Password);\n break;\n case \"AGGMACS\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n break;\n case \"BLESCANON\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n AddConfig(configIds.Scanning.EnableScanning, 'true')\n break;\n case \"BLESCANOFF\":\n AddConfig(configIds.Scanning.EnableScanning, 'false')\n break;\n case \"NOTE\":\n let type = details.Data.Type !== undefined ? details.Data.Type : \"TYPE MISSING\";\n let text = details.Data.Text !== undefined ? details.Data.Text : \"Text Missing\";\n text = text.split(\",\").join(\" \"); // remove commas\n let id = details.Data.Id !== undefined ? details.Data.Id : \"Id Missing\";\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\n let value = time + \",\" + type + \",\" + id + \",\" + text;\n AddConfig(configIds.Note.Message, value)\n break;\n }\n } else if (messageTypeLocalCode == \"REGISTER\") { // Register message\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n // write values to readonly settings\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\n // remove this to disable auto-config\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n // will automtaically send notification template with all details.\n } else if (messageTypeLocalCode == \"CREATE\") { // Create message\n // temp fix to filter old messages\n const cutoff = 1707523200000; //10.2.2024\n let message_id_time = parseInt(params.count_number, 36);\n if (message_id_time > cutoff) {\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n let new_imei = params.new_imei;\n let message = \"VGV-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + ble_mac + \",\" + iccid + \";\";\n // sendMessageToLocalhost(message); \n tasks = [{\n \"name\": \"VGV\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGV\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGV\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": message\n }),\n \"order\": 2\n }]\n }\n } else {\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n if (!params.raw_accuracy) {\n AddValue('location_accuracy', 9000);\n } else {\n AddValue('location_accuracy', params.raw_accuracy);\n }\n // generate timestamps if they don't exist\n if (!params.event_time) {\n AddValue('event_time', moment.utc().unix());\n }\n if (!params.location_time) {\n AddValue('event_time', moment.utc().unix());\n }\n //if no lat and long are given, set them to 0, 0\n if (!params.latitude_raw) {\n AddValue('latitude', 0);\n } else {\n AddValue('latitude', params.latitude_raw);\n }\n if (!params.longitude_raw) {\n AddValue('longitude', 0);\n } else {\n AddValue('longitude', params.longitude_raw);\n }\n }\n // add messagetTypeLocal to output for templates\n AddValue('local_message_type', messageTypeLocalCode);\n }\n var msg = {\n 'values': deviceParams,\n };\n if (configsToSend.length > 0) {\n msg.configsToSend = configsToSend\n };\n if (tasks.length > 0) {\n msg.tasks = tasks\n };\n // commit values to receiver processor\n console.log(msg);\n\n function sendMessageToLocalhost(str) {\n if (localTesting) {\n console.log(\"Sending message to local host: \" + str);\n } else {\n var server = 'receiver-tcp';\n var c = createConnection(5678, server);\n c.write(`${str}`);\n c.end();\n }\n AddValue(\"ToLocalhost\", str);\n }\n\n function createConnection(port, server) {\n c = net.createConnection(port, server);\n c.on('error', function(error) {\n c = createConnection(port, server);\n });\n return c;\n }\n\n function decrypt(encdata, password) {\n var decrypted;\n var dataarray = encdata.split(\";\");\n if (dataarray.length > 5) {\n return \"\";\n }\n var i;\n var part1 = \"\"; // part1 will hold the type, IMEI and message ID\n if (encdata.startsWith(\"ACK\")) {\n return encdata;\n }\n for (i = 0; i < 3; i++) {\n part1 = part1 + dataarray[i] + \";\";\n }\n var mid = dataarray[2]; // use the message ID to create the salt\n var enctext = dataarray[3].split(\"=\")[1]; // the encypted data\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n // base64 decoding and extract the iv and encrypted data\n const bData = Buffer.from(enctext, 'base64');\n const iv = bData.slice(0, 16); // initial 16 chars\n const text = bData.slice(16); // all the encrypted data\n // derive key using; 32 byte key length (from salted password and mid)\n // decrypt the data in part2 and add to part1\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\n try {\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\n } catch (err) {\n decrypted = undefined;\n }\n return decrypted;\n }\n\n function encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n }\n\n function AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n deviceParams.push(cvpair);\n }\n\n function AddConfig(configName, newvalue) {\n if (newvalue !== undefined) { // don't add if newvalue is undefined\n var cvpair = {\n 'code': configName,\n 'value': newvalue, // ? newvalue : \"Not Defined\" \n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n // modify to return the object that contains your data\n return msg;\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\n // define global returns\n msg = return_values;\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1710245093},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n if (serverParams.EnvName) {\\n AddValue(\\\"EnvVar\\\", serverParams.EnvName);\\n }\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711033993},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711035615},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1714652453},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1715246932},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, all_data.mtbr);\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716292219},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, new Date(all_data.mtbr * 1000).toISOString().substring(11, 19));\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716543468},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1), // remove trailing \\\",\\\"\\n false);\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1), // remove trailing \\\",\\\"\\n false);\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742830902},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"const ops_wrapper = require(\\\"./VGV_ops_wrapper\\\")\\nconst messages = require(\\\"./messages\\\");\\nconst test_helper = require(\\\"../_helpers/test_helper\\\")\\n// select message\\nlet message = messages.device2server.MSG_AGGMACS; //MSG_Create;// ACK_Command_OK; //MSG_CyclicUpdate; MSG_Register\\n// map input\\nlet input = ops_wrapper.inputs[message.input];\\ninput = {\\n ...input,\\n ...message.vars\\n} // merge message vars onto input template\\n// execute ops through wrapper\\nlet return_values = ops_wrapper.call_op(input);\\n// map return values\\nvar output = return_values;\\n// print values to console\\nconsole.log('-------MSG-------');\\n//console.log(JSON.stringify(output, null,4));\\nlet s = \\\"\\\";\\nfor (cv in output.values) {\\n s += '{\\\"code\\\":\\\"' + output.values[cv].code + '\\\", \\\"value\\\": \\\"' + output.values[cv].value + '\\\"},\\\\n';\\n}\\nconsole.log(s)\\nif (\\\"configsToUpdate\\\" in output) {\\n console.log(JSON.stringify(output.configsToUpdate))\\n console.log(test_helper.configs_to_update_match(message, input, output.configsToUpdate));\\n}\\nif (\\\"configsToSend\\\" in output) {\\n console.log(JSON.stringify(output.configsToSend))\\n console.log(test_helper.configs_to_update_match(message, input, output.configsToSend, \\\"configsToSend\\\"));\\n}\\nif (\\\"tasks\\\" in output) {\\n console.log(JSON.stringify(output.tasks))\\n //console.log(test_helper.configs_to_update_match(message, input, output.tasks, \\\"tasks\\\"));\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742832846},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742832867},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n // Define array to push device data into. This will be put into the msg array at the end.\\r\\n var deviceParams = [];\\r\\n var configsToSend = [];\\r\\n var configsToUpdate = [];\\r\\n var tasks = [];\\r\\n const _crypto = require('crypto');\\r\\n // handle ACK\\r\\n if (messageTypeCode == \\\"ACK\\\") {\\r\\n return \\\"\\\";\\r\\n }\\r\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\r\\n var password;\\r\\n if (params.imei == \\\"null\\\") {\\r\\n return msg;\\r\\n }\\r\\n password = params.imei;\\r\\n if (configs.Password.Password === \\\"\\\") {\\r\\n // use imei as default password when not specified\\r\\n } else {\\r\\n // use the password\\r\\n password = configs.Password.Password\\r\\n }\\r\\n // handle encrypted messages arriving via SMS\\r\\n // if (raw.startsWith('esendex')) {\\r\\n // raw = raw.split('esendex')[2];\\r\\n // encimei = raw.split(';')[1];\\r\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\r\\n // AddValue('imei', imei);\\r\\n // raw = raw.replace(encimei, imei);\\r\\n // password = imei;\\r\\n // }\\r\\n let message = decrypt(raw, password);\\r\\n //ToDo: handle errors messages arriving\\r\\n // if (message.startsWith(\\\"error\\\")) {\\r\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\r\\n // msg.push({\\r\\n // 'code': 'ack',\\r\\n // 'value': ack\\r\\n // });\\r\\n // console.log(msg);\\r\\n // } \\r\\n if (message) {\\r\\n // send message internally\\r\\n sendMessageToLocalhost(message);\\r\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\r\\n AddValue(\\\"ack\\\", ack);\\r\\n } else {\\r\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\r\\n AddValue(\\\"ack\\\", ack);\\r\\n }\\r\\n } else { // General Oysta Template\\r\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\r\\n const details = JSON.parse(raw);\\r\\n // AddValue('imei', details.AppId);\\r\\n AddValue('json_in', JSON.stringify(details));\\r\\n switch (details.Command) {\\r\\n case \\\"ACTIVATE_OK\\\":\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\r\\n break;\\r\\n case \\\"ACTIVATE_FAILS\\\":\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\r\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\r\\n break;\\r\\n case \\\"CONFIG\\\":\\r\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\r\\n break;\\r\\n case \\\"SETSOS\\\":\\r\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\r\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\r\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\r\\n break;\\r\\n case \\\"APPSET\\\":\\r\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\r\\n AddConfig(configIds.Password.Password, details.Data.Password);\\r\\n break;\\r\\n case \\\"AGGMACS\\\":\\r\\n if (\\\"Macs\\\" in details.Data) {\\r\\n let mac_string = '';\\r\\n for (mac of details.Data.Macs) {\\r\\n mac_string = mac_string + mac + \\\",\\\";\\r\\n }\\r\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\r\\n );\\r\\n };\\r\\n break;\\r\\n case \\\"BLESCANON\\\":\\r\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\r\\n if (\\\"Macs\\\" in details.Data) {\\r\\n let mac_string = '';\\r\\n for (mac of details.Data.Macs) {\\r\\n mac_string = mac_string + mac + \\\",\\\";\\r\\n }\\r\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\r\\n );\\r\\n };\\r\\n break;\\r\\n case \\\"BLESCANOFF\\\":\\r\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\r\\n break;\\r\\n case \\\"NOTE\\\":\\r\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\r\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\r\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\r\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\r\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\r\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\r\\n AddConfig(configIds.Note.Message, value)\\r\\n break;\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\r\\n let ble_mac = params.ble_mac;\\r\\n let iccid = params.iccid;\\r\\n // write values to readonly settings\\r\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\r\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\r\\n // will automtaically Activate on Acceptance\\r\\n if (serverParams.EnvName) {\\r\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\r\\n }\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\r\\n // temp fix to filter old messages\\r\\n const cutoff = 1707523200000; //10.2.2024\\r\\n let message_id_time = parseInt(params.count_number, 36);\\r\\n if (message_id_time > cutoff) {\\r\\n let ble_mac = params.ble_mac;\\r\\n let iccid = params.iccid;\\r\\n let new_imei = params.new_imei;\\r\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\r\\n // sendMessageToLocalhost(message); \\r\\n tasks = [{\\r\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\r\\n \\\"option\\\": \\\"sync\\\",\\r\\n \\\"type\\\": \\\"createDevice\\\",\\r\\n \\\"payload\\\": JSON.stringify({\\r\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\r\\n \\\"imei\\\": new_imei,\\r\\n \\\"abortOnError\\\": false,\\r\\n \\\"init\\\": true\\r\\n }),\\r\\n \\\"order\\\": 1\\r\\n }, {\\r\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\r\\n \\\"option\\\": \\\"async\\\",\\r\\n \\\"type\\\": \\\"sendMessage\\\",\\r\\n \\\"payload\\\": JSON.stringify({\\r\\n \\\"message\\\": message\\r\\n }),\\r\\n \\\"order\\\": 2\\r\\n }]\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\r\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\r\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\r\\n let all_data = JSON.parse(json_str);\\r\\n if (\\\"version\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\r\\n }\\r\\n if (\\\"backgroundLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\r\\n };\\r\\n if (\\\"coarseLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\r\\n };\\r\\n if (\\\"fineLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\r\\n };\\r\\n } else {\\r\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\r\\n if (!params.raw_accuracy) {\\r\\n AddValue('location_accuracy', 9000);\\r\\n } else {\\r\\n AddValue('location_accuracy', params.raw_accuracy);\\r\\n }\\r\\n // generate timestamps if they don't exist\\r\\n if (!params.event_time) {\\r\\n AddValue('event_time', moment.utc().unix());\\r\\n }\\r\\n if (!params.location_time) {\\r\\n AddValue('event_time', moment.utc().unix());\\r\\n }\\r\\n //if no lat and long are given, set them to 0, 0\\r\\n if (!params.latitude_raw) {\\r\\n AddValue('latitude', 0);\\r\\n } else {\\r\\n AddValue('latitude', params.latitude_raw);\\r\\n }\\r\\n if (!params.longitude_raw) {\\r\\n AddValue('longitude', 0);\\r\\n } else {\\r\\n AddValue('longitude', params.longitude_raw);\\r\\n }\\r\\n }\\r\\n // add messagetTypeLocal to output for templates\\r\\n AddValue('local_message_type', messageTypeLocalCode);\\r\\n }\\r\\n var msg = {\\r\\n 'values': deviceParams,\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n msg.configsToSend = configsToSend\\r\\n };\\r\\n if (tasks.length > 0) {\\r\\n msg.tasks = tasks\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n msg.configsToUpdate = configsToUpdate\\r\\n };\\r\\n // commit values to receiver processor\\r\\n console.log(msg);\\r\\n\\r\\n function sendMessageToLocalhost(str) {\\r\\n if (localTesting) {\\r\\n console.log(\\\"Sending message to local host: \\\" + str);\\r\\n } else {\\r\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\r\\n var c = createConnection(5678, server);\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n AddValue(\\\"ToLocalhost\\\", str);\\r\\n }\\r\\n\\r\\n function createConnection(port, server) {\\r\\n c = net.createConnection(port, server);\\r\\n c.on('error', function(error) {\\r\\n c = createConnection(port, server);\\r\\n });\\r\\n return c;\\r\\n }\\r\\n\\r\\n function decrypt(encdata, password) {\\r\\n var decrypted;\\r\\n var dataarray = encdata.split(\\\";\\\");\\r\\n if (dataarray.length > 5) {\\r\\n return \\\"\\\";\\r\\n }\\r\\n var i;\\r\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\r\\n if (encdata.startsWith(\\\"ACK\\\")) {\\r\\n return encdata;\\r\\n }\\r\\n for (i = 0; i < 3; i++) {\\r\\n part1 = part1 + dataarray[i] + \\\";\\\";\\r\\n }\\r\\n var mid = dataarray[2]; // use the message ID to create the salt\\r\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n // base64 decoding and extract the iv and encrypted data\\r\\n const bData = Buffer.from(enctext, 'base64');\\r\\n const iv = bData.slice(0, 16); // initial 16 chars\\r\\n const text = bData.slice(16); // all the encrypted data\\r\\n // derive key using; 32 byte key length (from salted password and mid)\\r\\n // decrypt the data in part2 and add to part1\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\r\\n try {\\r\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\r\\n } catch (err) {\\r\\n decrypted = undefined;\\r\\n }\\r\\n return decrypted;\\r\\n }\\r\\n\\r\\n function encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n }\\r\\n\\r\\n function AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n deviceParams.push(cvpair);\\r\\n }\\r\\n\\r\\n function AddConfig(configName, newvalue, force = true) {\\r\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\r\\n var cvpair = {\\r\\n 'code': configName,\\r\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\r\\n 'forced': force\\r\\n };\\r\\n configsToSend.push(cvpair);\\r\\n };\\r\\n }\\r\\n\\r\\n function UpdateConfig(configName, newvalue) {\\r\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\r\\n var cvpair = {\\r\\n 'code': configName,\\r\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\r\\n };\\r\\n configsToUpdate.push(cvpair);\\r\\n };\\r\\n }\\r\\n\\r\\n function changeSingleQuoteToDouble(jsonStr) {\\r\\n if (jsonStr === undefined) {\\r\\n return undefined;\\r\\n }\\r\\n let outStr = \\\"\\\";\\r\\n for (let c of jsonStr) {\\r\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\r\\n outStr = outStr + String.fromCharCode(34);\\r\\n } else {\\r\\n outStr += c;\\r\\n }\\r\\n };\\r\\n return outStr;\\r\\n }\\r\\n\\r\\n function isASCII(str) {\\r\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return msg;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1751384442},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"backgroundLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\n };\\n if (\\\"coarseLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\n };\\n if (\\\"fineLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\n };\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, all_data.mtbr);\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1764581714},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"backgroundLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\n };\\n if (\\\"coarseLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\n };\\n if (\\\"fineLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\n };\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, moment(all_data.mtbr).format(\\\"hh:mm:ss\\\"));\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1764582618}]}],"Groups":[{"Id":5606,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5607,"Parent":null,"Name":"Emergency Options","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5608,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5609,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5610,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5611,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5612,"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Make Call","Json":"{\"description\":\"Emergency phone number for the device\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5613,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{ \"description\": \"Define the period for which the device should send regular location updates, and how frequent those updates are.\", \"columns\": 1, \"order\": 2, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5614,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Battery alerts","Json":"{ \"description\": \"Battery alerts\", \"columns\": 1, \"order\": 5, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5615,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Scanning","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5616,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DeviceConfig","Json":"{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5616,\"Parent\":{\"Id\":5610,\"Name\":\"Admin config\",\"Json\":{\"description\":\"Admin config\",\"columns\":2,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"DeviceConfig\",\"Json\":\"{\\\"description\\\":\\\"Device configuration values.\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1714564811}]},{"Id":5617,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5618,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5619,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5620,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5621,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5622,"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Note","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9658,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"HandsFree","Json":"{\"name\":\"HandsFree\",\"default\":\"\",\"description\":\"HandsFree\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"SOS number is called with handsfree\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9631,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":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 Make Call","Json":"{\"name\":\"Enable Disable Make Call\",\"default\":\"\",\"description\":\"Make Call\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9656,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Timeout","Json":"{\"name\":\"Timeout\",\"default\":\"\",\"description\":\"Timeout before sending the Alert.\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9657,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"SOS Number","Json":"{ \"name\": \"SOS Number\", \"default\": \"\", \"description\": \"Number which will be called in the event the SOS button is pressed\", \"type\": \"phone\", \"order\": 1, \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Number which will be called if the SOS button is pressed ..\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9655,"Group":{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Frequency of location events, in seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9652,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Charging Alerts","Json":"{\"name\":\"Enable Battery Charging Alerts\",\"default\":\"true\",\"description\":\"Enable Alerts when charging.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Alerts will be sent when the users connects or disconnects the device to the charging station.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9651,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Critical Alert","Json":"{\"name\":\"Enable Battery Critical Alert\",\"default\":\"true\",\"description\":\"Enable Battery Critical Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends an Alert when the battery is critically low.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9650,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Critical Threshold","Json":"{\"name\":\"Battery Critical Threshold\",\"default\":\"\",\"description\":\"Battery Critical Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a critical battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9654,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Low Threshold","Json":"{\"name\":\"Battery Low Threshold\",\"default\":\"100\",\"description\":\"Battery Low Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a low battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"100","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9653,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Low Alert","Json":"{\"name\":\"Enable Battery Low Alert\",\"default\":\"true\",\"description\":\"Enable Battery Low Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9649,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"MacIDs","Json":"{\"name\":\"MacIDs\",\"default\":\"\",\"description\":\"List of MAC addresses\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Comma separated list of MAC addresses used in the scanning process.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9648,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"EnableScanning","Json":"{\"name\":\"EnableScanning\",\"default\":\"false\",\"description\":\"Enable Scanning\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When enabled will scan for MAC IDs and send a PROX alert if found.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9640,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV ActivatedFailMessage","Json":"{\"name\":\"IV ActivatedFailMessage\",\"default\":\"\",\"description\":\"Reason for Activation Failure\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440665},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440730},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537925},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537925},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978229},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978548}],"LanguageId":null,"Tags":[]},{"Id":9647,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440673},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440682},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440737},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564715},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537929},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537933},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978164},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978231},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978550}],"LanguageId":null,"Tags":[]},{"Id":9646,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BLE MAC","Json":"{\"name\":\"BLE MAC\",\"default\":\"\",\"description\":\"Bluetooth MAC address\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bluetooth MAC address of the phone. No sepearator characters.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9646,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BLE MAC\",\"Json\":\"{\\\"name\\\":\\\"BLE MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Bluetooth MAC address\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bluetooth MAC address of the phone. No sepearator characters.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440632}],"LanguageId":null,"Tags":[]},{"Id":9645,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"ICCID","Json":"{\"name\":\"ICCID\",\"default\":\"\",\"description\":\"SIM ICCID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The ICCID of the SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440657},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440722},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537918},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978224},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978544}],"LanguageId":null,"Tags":[]},{"Id":9644,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BTN MAC","Json":"{\"name\":\"BTN MAC\",\"default\":\"\",\"description\":\"Button MAC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The MAC address of the Flic button paired with the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440635},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564464},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564708}],"LanguageId":null,"Tags":[]},{"Id":9643,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV Activated","Json":"{\"name\":\"IV Activated\",\"default\":\"false\",\"description\":\"Invent Activated Ok\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Flag to store if Invent has successfully activated this device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440660},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440726},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537922},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978227},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978546}],"LanguageId":null,"Tags":[]},{"Id":9642,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Test Bounce Back","Json":"{\"name\":\"Test Bounce Back\",\"default\":\"false\",\"description\":\"Test Bounce Back\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bounce incoming messages back as notifications.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440685},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440694},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564300},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564731},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564750},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453295},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453321},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542275},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542293},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537945},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537949},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978241},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978570}],"LanguageId":null,"Tags":[]},{"Id":9641,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Config Mode","Json":"{\"name\":\"Config Mode\",\"default\":\"false\",\"description\":\"Config Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables Config mode on in the app to show additional actions and buttons.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440644},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537907},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537909},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978539}],"LanguageId":null,"Tags":[]},{"Id":9638,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Password used to encrypt communication between Device and platform. Uses Imei if empty.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9639,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"encryption","Json":"{\"name\":\"encryption\",\"default\":\"true\",\"description\":\"enable encryption for commands\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9639,\"Group\":{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"encryption\",\"Json\":\"{\\\"name\\\":\\\"encryption\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"enable encryption for commands\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856989}],"LanguageId":null,"Tags":[]},{"Id":9637,"Group":{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Real Time Locate","Json":"{\"name\":\"Real Time Locate\",\"default\":\"\",\"description\":\"Position Request\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9635,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"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\":true,\"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":[],"LanguageId":null,"Tags":[]},{"Id":9636,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9633,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Secondary Server","Json":"{\"name\":\"Set Secondary Server\",\"default\":\"\",\"description\":\"Select Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Secondary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Secondary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9634,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Primary Server","Json":"{\"name\":\"Set Primary Server\",\"default\":\"\",\"description\":\"Set Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Primary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Primary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9632,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable NonMovement","Json":"{\"name\":\"Enable Disable NonMovement\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9659,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"period ","Json":"{\"name\":\"period \",\"default\":\"600\",\"description\":\"Period in seconds which defines \\\"non-movement\\\"\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":7200,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9660,"Group":{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Message","Json":"{\"name\":\"Message\",\"default\":\"\",\"description\":\"Message\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Note as Comma sepearted values with Time(s from epoch), Type (INFO|WARNING|...), ID, Text.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9660,\"Group\":{\"Id\":5622,\"Name\":\"Note\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Message\",\"Json\":\"{\\\"name\\\":\\\"Message\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Message\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Note as Comma sepearted values with Time(s from epoch), Type (BATTERY|REDALERT|...), ID, Text.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564690}],"LanguageId":null,"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178254},{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4097,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.2\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":false,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178259},{"Type":1,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440640}],"LanguageId":null,"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4097,"Protocol":{"Id":205,"Code":"VGV","Version":"0.2","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":false,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178764},{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":4100,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178770},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440649},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564447},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564711},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537910},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537914},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978542}],"LanguageId":null,"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":4100,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178822},{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4099,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178827},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440653},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440741},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564419},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564717},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537935},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537937},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978166},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978233},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978552}],"LanguageId":null,"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4099,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178894},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178899},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4098,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178902},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440669},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440678},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440733},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162948},{"Type":2,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.7\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162955},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564727},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564753},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453299},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453325},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542279},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542296},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537953},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978243},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978572}],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4087,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4098,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9665,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Version","Json":"{\"name\":\"Version\",\"default\":\"\",\"description\":\"Current Version of the App.\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use Button Request Data to update the field.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178950},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440688},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440698},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453305},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453328},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542282},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542300},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537956},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978176},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978247},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978576}],"LanguageId":null,"Tags":[]},{"Id":11088,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"StartTimeLog","Json":"{\"name\":\"StartTimeLog\",\"default\":\"\",\"description\":\"StartTime for Logs request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439790},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440677},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440686},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564721},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537938},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537941},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978168},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978235},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978554}],"LanguageId":null,"Tags":[]},{"Id":11089,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"EndTimeLog","Json":"{\"name\":\"EndTimeLog\",\"default\":\"\",\"description\":\"Endtime for log request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439985},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440690},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564724},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537941},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537944},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978170},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978237},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978556}],"LanguageId":null,"Tags":[]},{"Id":11236,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Restarts","Json":"{\"name\":\"Restarts\",\"default\":\"\",\"description\":\"Number of Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716291772},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453311},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453333},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542285},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542304},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537961},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751553092},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978174},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978245},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978574}],"LanguageId":null,"Tags":[]},{"Id":11237,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"MTBR","Json":"{\"name\":\"MTBR\",\"default\":\"\",\"description\":\"Mean Time Between Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716291813},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453291},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453337},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542248},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542271},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542308},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716544012},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716544055},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":19}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537964},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751553120},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978172},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978239},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978568}],"LanguageId":null,"Tags":[]},{"Id":12377,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BackgroundLocation","Json":"{\"name\":\"BackgroundLocation\",\"default\":\"\",\"description\":\"BackgroundLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"BackgroundLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381437},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537929},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537949},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":19}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978178}],"LanguageId":null,"Tags":[]},{"Id":12378,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"FineLocation","Json":"{\"name\":\"FineLocation\",\"default\":\"\",\"description\":\"FineLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"FineLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381505},{"Type":1,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978250},{"Type":1,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978578}],"LanguageId":null,"Tags":[]},{"Id":12379,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"CoarseLocation","Json":"{\"name\":\"CoarseLocation\",\"default\":\"\",\"description\":\"CoarseLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"CoarseLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381545},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537902},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978559},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978580}],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) Created ALLDATA","Timestamp":1710177889},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) added Clear buffer command","Timestamp":1710177961},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) REQDATA command","Timestamp":1710178028},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) REQLOG command","Timestamp":1710178130},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) RTLOG command","Timestamp":1710178198},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) ClearBuffer Button","Timestamp":1710178254},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710178259},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"added ALLDATA and new commands","Timestamp":1710178496},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) RTLOG enable","Timestamp":1710178764},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710178770},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) Request Logs button","Timestamp":1710178822},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710178827},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) REQDATA button","Timestamp":1710178894},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command Battery Charging Alert","Timestamp":1710178899},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710178902},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) Version text field","Timestamp":1710178950},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Remaining properties for logs and version","Timestamp":1710178977},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) updated operations with ALLDATA processing","Timestamp":1710245093},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"fix for getting version","Timestamp":1710245132},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) EnvVar test","Timestamp":1711033993},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) proper implementation for autoactivate on acceptance","Timestamp":1711035615},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-register on Acceptance","Timestamp":1711037706},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) fix for location accuracy in CYC messages","Timestamp":1712653303},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) fix accuracy in ALLDATA event","Timestamp":1712653474},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for location precision on CYC","Timestamp":1712655385},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) enabling ACk for Clearbuffer","Timestamp":1713428245},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) add starttime for logs\n","Timestamp":1713439790},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Added Endtime for log requests","Timestamp":1713439985},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1713440200},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BLE MAC","Message":"(Update) (BLE MAC) Reorder Group Params","Timestamp":1713440632},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1713440635},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1713440640},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1713440644},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1713440649},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440653},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440657},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440660},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440665},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440669},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440673},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440677},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440678},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440682},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440685},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440686},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440688},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1713440690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440694},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440698},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440722},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440726},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440730},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440733},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440737},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440741},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parse startime to epoch","Timestamp":1713441651},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parsing endtime to epoch","Timestamp":1713441974},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) was requesting. battery alerts wrongly ","Timestamp":1714162948},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"Dissociate groupParam Request Data from command Battery Charging Alert","Timestamp":1714162955},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) REQLOG fix NaN values","Timestamp":1714563558},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) fix isNaN","Timestamp":1714563687},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Params tidy up","Timestamp":1714564300},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) update Get Log labels","Timestamp":1714564419},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Hide realtime logging","Timestamp":1714564447},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Not in use","Timestamp":1714564464},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Message","Message":"(Update) (Message) updated label","Timestamp":1714564690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1714564708},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714564711},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714564715},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714564717},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714564721},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714564724},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564727},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564731},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564750},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564753},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Group","Name":"DeviceConfig","Message":"(Update) (DeviceConfig) updated label","Timestamp":1714564811},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) ICCID check","Timestamp":1714652453},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) moved ICCID chech to CREATE message","Timestamp":1715246932},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"ICCID check, timerange for logs, hide unused controls","Timestamp":1715256211},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) changing password command encryption to plain text for now","Timestamp":1715687167},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) remove encrypt checkbox logic","Timestamp":1715855955},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) fix bug","Timestamp":1715856353},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) remove encrypt checkbox logic","Timestamp":1715856558},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) remove encrypt checkbox logic","Timestamp":1715856589},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) remove encrypt checkbox logic","Timestamp":1715856616},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) remove encrypt checkbox logic","Timestamp":1715856637},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) remove encrypt checkbox logic","Timestamp":1715856657},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) remove encrypt checkbox logic","Timestamp":1715856680},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) remove encrypt checkbox logic","Timestamp":1715856700},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) remove encrypt checkbox logic","Timestamp":1715856719},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) remove encrypt checkbox logic","Timestamp":1715856734},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) remove encrypt checkbox logic","Timestamp":1715856754},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) remove encrypt checkbox logic","Timestamp":1715856772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) remove encrypt checkbox logic","Timestamp":1715856789},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) remove encrypt checkbox logic","Timestamp":1715856815},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) remove encrypt checkbox logic","Timestamp":1715856835},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) remove encrypt checkbox logic","Timestamp":1715856881},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) remove encrypt checkbox logic","Timestamp":1715856904},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) remove encrypt checkbox logic","Timestamp":1715856937},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) remove encrypt checkbox logic","Timestamp":1715856960},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"encryption","Message":"(Update) (encryption) checkbox not used any more","Timestamp":1715856989},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) Encrypt PW with IMEI","Timestamp":1715860808},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) Prepending encrypted commands with \"enc=\"","Timestamp":1715862067},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) prepending encrypted commands with \"enc=\"","Timestamp":1715862254},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862278},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) prepending encrypted commands with \"enc=\"","Timestamp":1715862327},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) prepending encrypted commands with \"enc=\"","Timestamp":1715862349},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) prepending encrypted commands with \"enc=\"","Timestamp":1715862369},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) prepending encrypted commands with \"enc=\"","Timestamp":1715862387},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) prepending encrypted commands with \"enc=\"","Timestamp":1715862400},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) prepending encrypted commands with \"enc=\"","Timestamp":1715862415},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) prepending encrypted commands with \"enc=\"","Timestamp":1715862433},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) prepending encrypted commands with \"enc=\"","Timestamp":1715862447},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) prepending encrypted commands with \"enc=\"","Timestamp":1715862461},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) prepending encrypted commands with \"enc=\"","Timestamp":1715862480},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862498},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) prepending encrypted commands with \"enc=\"","Timestamp":1715862530},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862546},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862564},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) prepending encrypted commands with \"enc=\"","Timestamp":1715862579},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) prepending encrypted commands with \"enc=\"","Timestamp":1715862617},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) add missing crypto reference","Timestamp":1716286535},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Create) (Restarts) Adding restart param","Timestamp":1716291772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Create) (MTBR) Added MBTR param","Timestamp":1716291813},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) Restarts and MTBR json parsing added","Timestamp":1716292219},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716453291},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716453295},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716453299},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716453305},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716453311},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716453321},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716453325},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716453328},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716453333},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716453337},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) changing mtbr to time","Timestamp":1716542248},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716542271},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716542275},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716542279},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716542282},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716542285},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716542293},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716542296},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716542300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716542304},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716542308},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) checning mtbr to time","Timestamp":1716543468},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) update label","Timestamp":1716544012},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716544055},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"encryption, restarts and MTBR, more tidy up","Timestamp":1716972265},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) testing long connection","Timestamp":1718624176},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"received","Message":"(Update) (received) testing long connection","Timestamp":1718624912},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) testing long connection\n","Timestamp":1718624938},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) disable long connection for acks","Timestamp":1718625487},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) enabling ack first","Timestamp":1718625507},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) enabling \"long connection\" on ack again","Timestamp":1718625835},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) remove ack first","Timestamp":1718626131},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) change to long connection","Timestamp":1718627036},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) reverting long connection","Timestamp":1718707224},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"received","Message":"(Update) (received) reverting long connection","Timestamp":1718707234},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) reverting long connection","Timestamp":1718707248},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) reverting long connection","Timestamp":1718707263},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) sending ack to ack","Timestamp":1718875625},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) removing acking the ack","Timestamp":1718876306},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) testing decrypt processor","Timestamp":1719306762},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) enabling no operation for encrypted message","Timestamp":1719307635},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) updated decryption","Timestamp":1719310876},{"Version":"0.9","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Bump version for protocol-dev","Timestamp":1737376393},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) make AGGMACS not force update - only on change","Timestamp":1742830902},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) change to configsToUpdate for Agg Macs","Timestamp":1742832846},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) wrong paste","Timestamp":1742832867},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for AGGMAcs - only update DB, not trigger command","Timestamp":1742980519},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Create) (BackgroundLocation) 1705861-add-backgroundlocation-device-config-vgv","Timestamp":1751381437},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Create) (FineLocation) 1705861-add-finelocation-device-config-vgv","Timestamp":1751381505},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Create) (CoarseLocation) 1705861-add-coarselocation-device-config-vgv","Timestamp":1751381545},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) 1705861-update-op-script-vgv","Timestamp":1751384442},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751537902},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751537907},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751537909},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751537910},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751537914},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751537918},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751537922},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751537925},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751537925},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751537929},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751537929},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751537933},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751537935},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751537937},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751537938},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751537941},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751537941},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751537944},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751537945},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751537949},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751537949},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751537953},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751537956},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751537961},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751537964},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) 1740967-alldata-make-restarts-readonly-vgv","Timestamp":1751553092},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) 1740967-alldata-make-mtbr-readonly-vgv","Timestamp":1751553120},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"Protocol","Name":null,"Message":"1740967 - pack for acceptance","Timestamp":1751641953},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978164},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978166},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978168},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978170},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978172},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978174},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978176},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751978178},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751978224},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751978227},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751978229},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978231},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978233},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978235},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978237},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978239},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751978241},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751978243},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978245},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978247},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Update) (FineLocation) Reorder Group Params","Timestamp":1751978250},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751978539},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751978542},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751978544},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751978546},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751978548},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978550},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978552},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978554},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978556},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751978559},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978568},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751978570},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751978572},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978574},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978576},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Update) (FineLocation) Reorder Group Params","Timestamp":1751978578},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751978580},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"Protocol","Name":null,"Message":"update device config order","Timestamp":1751984687},{"Version":"1.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) fixing alldata mtbr and restarts","Timestamp":1764581714},{"Version":"1.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) fix mtbr","Timestamp":1764582618}],"ProtocolActionObjects":[],"Tags":[{"Id":2054,"Name":"AllowDuplicates","BackendAction":"PermitReceiverDublicates","Value":"True"},{"Id":1956,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"True"}],"MessageCodes":[{"Name":"Alarm - Movement","Description":"At alert on movement ( not fall)","Code":"ALMOV","CanLiveInsights":false},{"Name":"Alarm-Welfare Check","Description":"Welfare check alarm","Code":"ALW","CanLiveInsights":false},{"Name":"Cycle","Description":"Regular, cyclic, events from a device","Code":"CYC","CanLiveInsights":false},{"Name":"Location - other","Description":"Location - other","Code":"LOCN","CanLiveInsights":false},{"Name":"Acknowledge","Description":"Acknowledgment of a command sent to the device","Code":"ACK","CanLiveInsights":false},{"Name":"Battery Charging - On","Description":"Battery Charging - On","Code":"BATCN","CanLiveInsights":false},{"Name":"Check / keep alive / Heartbeat","Description":"Keep alive / heartbeat signal to maintain a connection ","Code":"CHK","CanLiveInsights":false},{"Name":"Alarm - Amber Alert","Description":"Alarm - Amber Alert","Code":"ALA","CanLiveInsights":false},{"Name":"Alarm – Fall","Description":"Alarm – Fall","Code":"ALF","CanLiveInsights":false},{"Name":"Alarm – Non movement","Description":"Alarm – Non movement","Code":"ALNM","CanLiveInsights":false},{"Name":"Alarm - Smoke","Description":"Alarm - Smoke","Code":"ALSM","CanLiveInsights":false},{"Name":"Alarm - Speed","Description":"Alarm - Speed","Code":"ALSP","CanLiveInsights":false},{"Name":"Alarm – Emergency Cancelled","Description":"Alarm – Emergency Cancelled by the user","Code":"ALSOS-C","CanLiveInsights":false},{"Name":"Battery Charging - off","Description":"Battery Charging - off","Code":"BATCF","CanLiveInsights":false},{"Name":"Battery empty","Description":"Battery empty","Code":"BATE","CanLiveInsights":false},{"Name":"Battery full","Description":"Battery full","Code":"BATF","CanLiveInsights":false},{"Name":"Battery low","Description":"Battery low","Code":"BATL","CanLiveInsights":false},{"Name":"Button Press","Description":"Button Press","Code":"BPRS","CanLiveInsights":false},{"Name":"Ebeacon zone in","Description":"Ebeacon zone in","Code":"EBZI","CanLiveInsights":false},{"Name":"Ebeacon zone out","Description":"Ebeacon zone out","Code":"EBZO","CanLiveInsights":false},{"Name":"Location check in","Description":"Location check in","Code":"LCI","CanLiveInsights":false},{"Name":"Location check out","Description":"Location check out","Code":"LCO","CanLiveInsights":false},{"Name":"Reminder not ok","Description":"Reminder not ok","Code":"MRME","CanLiveInsights":false},{"Name":"No Activity","Description":"No Activity","Code":"NACT","CanLiveInsights":false},{"Name":"Power Off","Description":"Power Off","Code":"PWRF","CanLiveInsights":false},{"Name":"Power On","Description":"Power On","Code":"PWRN","CanLiveInsights":false},{"Name":"Vehicle - Driving hours excess","Description":"Vehicle - Driving hours excess","Code":"VDE","CanLiveInsights":false},{"Name":"Vehicle – Fuel cap","Description":"Vehicle – Fuel cap","Code":"VFC","CanLiveInsights":false},{"Name":"Vehicle - Fuel level","Description":"Vehicle - Fuel level","Code":"VFL","CanLiveInsights":false},{"Name":"Vehicle – Harsh braking","Description":"Vehicle – Harsh braking","Code":"VHB","CanLiveInsights":false},{"Name":"Vehicle – Ignition off","Description":"Vehicle – Ignition off","Code":"VIGF","CanLiveInsights":false},{"Name":"Vehicle – Driver not authorized","Description":"Vehicle – Driver not authorized","Code":"VNA","CanLiveInsights":false},{"Name":"Vehicle – Night driving","Description":"Vehicle – Night driving","Code":"VND","CanLiveInsights":false},{"Name":"Vehicle – Ignition on","Description":"Vehicle – Ignition on","Code":"VIGN","CanLiveInsights":false},{"Name":"Vehicle – Seat belt","Description":"Vehicle – Seat belt","Code":"VSB","CanLiveInsights":false},{"Name":"Zone in","Description":"Zone in","Code":"ZNI","CanLiveInsights":false},{"Name":"Zone out","Description":"Zone out","Code":"ZNO","CanLiveInsights":false},{"Name":"Device Status","Description":"Device Status","Code":"STATUS","CanLiveInsights":false},{"Name":"Real time location ","Description":"Real time location ","Code":"RTL","CanLiveInsights":false},{"Name":"Encoded communication","Description":"Encoded communication","Code":"ENC","CanLiveInsights":false},{"Name":"Proximity","Description":"Proximity alert ","Code":"PROX","CanLiveInsights":false},{"Name":"Dummy - do NOT use ","Description":"Dummy template - should not be used","Code":"DUMMY","CanLiveInsights":false},{"Name":"Battery High","Description":"Battery High","Code":"BATH","CanLiveInsights":false},{"Name":"Location - Set Available","Description":"Location - Set Available","Code":"LSA","CanLiveInsights":false},{"Name":"Location - Set Busy","Description":"Location - Set Busy","Code":"LSB","CanLiveInsights":false},{"Name":"Device information","Description":"General Device Information from the device","Code":"INFO","CanLiveInsights":false},{"Name":"Alarm - Tamper","Description":"Alarm - Device Tamper","Code":"ALTAM","CanLiveInsights":false},{"Name":"Communication ","Description":"General communication, initialisation etc.","Code":"COMM","CanLiveInsights":false},{"Name":"Humidity","Description":"Relative humidity","Code":"RH","CanLiveInsights":false},{"Name":"Temperature","Description":"Temperature","Code":"TEMP","CanLiveInsights":false},{"Name":"Alarm - Temperature","Description":"Alarm - Temperature","Code":"ALTEMP","CanLiveInsights":false},{"Name":"Alarm - Humidity","Description":"Alarm - Relative Humidity","Code":"ALRH","CanLiveInsights":false},{"Name":"Proximity End","Description":"Proximity End","Code":"PROX-E","CanLiveInsights":false},{"Name":"Alarm - PIR","Description":"Alarm - PIR","Code":"ALPIR","CanLiveInsights":false},{"Name":"PIR - Movements","Description":"Number of PIR movements detected in reporting period","Code":"PIRM","CanLiveInsights":false},{"Name":"Battery Report","Description":"Battery Voltage Report","Code":"BATR","CanLiveInsights":false},{"Name":"Alarm - Sim Swap","Description":"Alarm - Sim Swap","Code":"ALSS","CanLiveInsights":false},{"Name":"Mileage","Description":"Mileage","Code":"MIL","CanLiveInsights":false},{"Name":"Intrusion","Description":"Intrusion","Code":"INT","CanLiveInsights":false},{"Name":"No Fix Report","Description":"No fix report","Code":"NFR","CanLiveInsights":false},{"Name":"Switched Off Report","Description":"Switched off report","Code":"SOR","CanLiveInsights":false},{"Name":"End - Shift","Description":"End - Shift","Code":"ENDSH","CanLiveInsights":false},{"Name":"Sleep Mode","Description":"Device comes to sleep mode","Code":"SPM","CanLiveInsights":false},{"Name":"Wake Up Device","Description":"Device Wake Up from SleepMode","Code":"WUD","CanLiveInsights":false},{"Name":"Door Closed","Description":"Door Closed","Code":"DRCL","CanLiveInsights":false},{"Name":"Door Open","Description":"Door Open","Code":"DRO","CanLiveInsights":false},{"Name":"Alarm Door Closed","Description":"Alarm Door Closed","Code":"ALDC","CanLiveInsights":false},{"Name":"Alarm Door Open","Description":"Alarm Door Open","Code":"ALDO","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Snooze","Description":"Amber Alert Alarm - snoozed by user","Code":"ALA-S","CanLiveInsights":false},{"Name":"Amber Alert - On","Description":"Amber Alert Alarm created by User","Code":"ALA-O","CanLiveInsights":false},{"Name":"Reminder OK","Description":"Reminder OK","Code":"MRMK","CanLiveInsights":false},{"Name":"Message - text","Description":"Message- text","Code":"MSG","CanLiveInsights":false},{"Name":"Start - Shift","Description":"Start- Shift","Code":"STSH","CanLiveInsights":false},{"Name":"Beacon","Description":"Beacon","Code":"BT","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Cancel","Description":"Amber alert alarm, cancelled by user","Code":"ALA-C","CanLiveInsights":false},{"Name":"Alarm-Impact","Description":"Alarm-Impact","Code":"ALI","CanLiveInsights":false},{"Name":"Reminder Snooze ","Description":"Reminder - snooze","Code":"MRM-S","CanLiveInsights":false},{"Name":"Blood Pressure","Description":"Blood Pressure","Code":"HBP","CanLiveInsights":false},{"Name":"Heart Rate","Description":"Heart Rate","Code":"HRT","CanLiveInsights":false},{"Name":"SELFTEST","Description":"Used for Testing Purposes","Code":"TEST","CanLiveInsights":false},{"Name":"Alarm - Fall Cancelled","Description":"Alarm - Fall Cancelled","Code":"ALF-C","CanLiveInsights":false},{"Name":"Alarm – Non Movement Cancelled","Description":"Alarm – Non movement Cancelled by the user","Code":"ALNM-C","CanLiveInsights":false},{"Name":"Insight","Description":"Insight","Code":"INSIGHT","CanLiveInsights":false},{"Name":"Quantity Drunk","Description":"Quantity of liquid drunk ","Code":"QDRNK","CanLiveInsights":false},{"Name":"Bed - in","Description":"Bed or seat sensor ","Code":"BEDIN","CanLiveInsights":false},{"Name":"Bed - Out","Description":"Bed / seat sensor","Code":"BEDOUT","CanLiveInsights":false},{"Name":"Leak sensor","Description":"Leak detected ","Code":"LEAK","CanLiveInsights":false},{"Name":"Light - Lux","Description":"Light levels - LUX ","Code":"LUX","CanLiveInsights":false},{"Name":"Exited","Description":"Exited","Code":"EXIT","CanLiveInsights":false},{"Name":"Entered","Description":"Entered","Code":"ENTER","CanLiveInsights":false},{"Name":"Answered Door","Description":"Answered Door","Code":"ANSWDR","CanLiveInsights":false},{"Name":"Alarm – Emergency","Description":"Alarm – Emergency","Code":"ALSOS","CanLiveInsights":true},{"Name":"Alarm – Gas","Description":"Alarm – Gas ( carbon monixide, carbon dioxide, propane, butane ) ","Code":"ALG","CanLiveInsights":false},{"Name":"Leak Off","Description":"Leak detection has stopped alerting","Code":"LEAK-OFF","CanLiveInsights":false},{"Name":"Question-Answer","Description":"Question - Answer response","Code":"Q-A","CanLiveInsights":false},{"Name":"Visitor Arrived","Description":"Visitor Arrived","Code":"VISARR","CanLiveInsights":true},{"Name":"Visitor Departed","Description":"Visitor Departed","Code":"VISDEP","CanLiveInsights":true},{"Name":"Docked","Description":"Device placed in docking station","Code":"DOCK-IN","CanLiveInsights":false},{"Name":"Undocked","Description":"Device removed from docking station","Code":"DOCK-OUT","CanLiveInsights":false},{"Name":"Gas concentrarion","Description":"Gas concentrarion (ppm)","Code":"GAS","CanLiveInsights":false},{"Name":"Distance ","Description":"Distance measurement, could be level, proximity etc ","Code":"DIST","CanLiveInsights":false},{"Name":"Alarm Distance","Description":"Alarm on distance measurement, could be level, proximity etc ","Code":"ALDIST","CanLiveInsights":false},{"Name":"Welfare OK","Description":"Welfare check has returned OK","Code":"WELFOK","CanLiveInsights":false},{"Name":"Steps","Description":"Step counter","Code":"STEPS","CanLiveInsights":true},{"Name":"Connection","Description":"Connection","Code":"CON","CanLiveInsights":false},{"Name":"Disconnection","Description":"Disconnect","Code":"DISCON","CanLiveInsights":false},{"Name":"Position By Button","Description":"Position By Button","Code":"PBB","CanLiveInsights":false},{"Name":"Alarm Welfare","Description":"Alert welfare not confirmed","Code":"ALA-W","CanLiveInsights":false},{"Name":"Welfare Timer Starts","Description":"Welfare Check in","Code":"WTS","CanLiveInsights":false},{"Name":"Welfare Stops","Description":"Welfare Check out","Code":"WSTP","CanLiveInsights":false},{"Name":"Alarm Ended","Description":"Alarm finished","Code":"ALA-F","CanLiveInsights":false},{"Name":"BRTH - Breath Rate","Description":"Rate of Breathing per minute","Code":"BRTH","CanLiveInsights":false},{"Name":"Sleep State","Description":"Sleep state ","Code":"SLPSTATE","CanLiveInsights":false},{"Name":"Alarm - Tilt","Description":"Alarm - Tilt Alert","Code":"ALTLT","CanLiveInsights":false},{"Name":"Alert – Fall Suspected","Description":"Alert – Fall Suspected","Code":"ALFS","CanLiveInsights":false}]} \ No newline at end of file +{"Id":205,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":5989,"Code":"NOPROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOPROX;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOPROX;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5990,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5991,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5992,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5993,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALSOS;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALSOS;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5994,"Code":"completed","Name":"ACK command","MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;OK;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624938},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625487},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625835},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707224},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":true,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ok\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718875625},{"Type":1,"NewValue":"{\"Id\":5994,\"Code\":\"completed\",\"Name\":\"ACK command\",\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;OK;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ok\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;OK;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718876306}],"Tags":[]},{"Id":5995,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5996,"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":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5997,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5998,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5999,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6000,"Code":"PROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;PROX=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PROX=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6001,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6002,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":"<<->>VGV-001-Invent<<->>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6003,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5982,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5983,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653303},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624176},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":true,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718625507},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718626131},{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707263}],"Tags":[]},{"Id":5984,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt()-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719306762},{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt()-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":null,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719307635},{"Type":1,"NewValue":"{\"Id\":5984,\"Code\":\"ENC\",\"Name\":\"Encrypted\",\"MessageCode\":\"ENC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;enc=<>;$$\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"<>\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"ProtocolsLibraryMethod\":\"IEncryptionService:System.String BasicDecrypt(System.String, System.String, System.String)-BasicDecrypt\",\"ProtocolsLibraryMethodArgs\":\"salt,Password,Password\",\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1719310876}],"Tags":[]},{"Id":5985,"Code":"received","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;RCVD;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5985,\"Code\":\"received\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;RCVD;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;RCVD;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718624912},{"Type":1,"NewValue":"{\"Id\":5985,\"Code\":\"received\",\"Name\":null,\"MessageCode\":\"ACK\",\"NeedAck\":false,\"IsAck\":true,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"ACK-CMD;<>;<>;RCVD;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":null,\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^ACK-CMD;[^;]*;[^;;]*;RCVD;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707234}],"Tags":[]},{"Id":5986,"Code":"error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;ERR;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5987,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5988,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGV-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGV-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6004,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177889},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653474},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":true,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718627036},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1718707248}],"Tags":[]}],"Commands":[{"Id":4096,"Name":"NonMovement","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.NonMovement.EnableDisableNonMovement == \"true\") {\n var state = 1;\n} else {\n var state = \"0\";\n}\nvar command = \"ALNM=\" + state + \",\" + params.NonMovement.period;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856700},{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862387}],"Tags":[]},{"Id":4095,"Name":"Set Scanning Enable","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let doScan = params.Scanning.EnableScanning == \"true\" ? 1 : 0;\nlet aggs = \",\" + params.Scanning.MacIDs;\nvar aggids = params.Scanning.EnableScanning == \"true\" ? aggs : '';\nlet command = \"SCANAGG=\" + doScan + aggids;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856904},{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862564}],"Tags":[]},{"Id":4094,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkown Failure.\";\nif (params.DeviceConfig.IVActivated == \"true\") {\n command = \"ACTIVATED_OK\";\n} else {\n command = \"ACTIVATED_FAIL=\" + params.DeviceConfig.IVActivatedFailMessage;\n}\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856680},{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862369}],"Tags":[]},{"Id":4093,"Name":"SendMACs","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"AGGIDS=\" + params.Scanning.MacIDs;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856815},{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862480}],"Tags":[]},{"Id":4092,"Name":"Set Config Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.ConfigMode == \"true\") {\n enableConfig = \"1\";\n} else {\n enableConfig = \"0\";\n}\nvar command = \"CONFIG=\" + enableConfig;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856835},{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862498},{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"const _crypto = require('crypto');\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716286535}],"Tags":[]},{"Id":4091,"Name":"Battery Critical Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAC=\" + endis + \",\" + params.Batteryalerts.BatteryCriticalThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856589},{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862278}],"Tags":[]},{"Id":4090,"Name":"Battery Low Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.Batteryalerts.EnableBatteryLowAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAL=\" + endis + \",\" + params.Batteryalerts.BatteryLowThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856616},{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862300}],"Tags":[]},{"Id":4089,"Name":"SOS Number","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"SOSN=\" + params.MakeCall.SOSNumber.replace(\"(\", \"\").replace(\")\", \"\");\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":8,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715855955},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856353},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862067}],"Tags":[]},{"Id":4088,"Name":"Send Notification","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"NOTE=\" + params.Note.Message;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856789},{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862461}],"Tags":[]},{"Id":4087,"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856558},{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862254}],"Tags":[]},{"Id":4086,"Name":"SOS Options","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = []; // for sms template\r\nvar SOSOptions;\r\nvar Handsfree, Makecall;\r\n//var command = \"SOSO=\" + JSON.stringify(params.SOSOptions.HandsFree);\r\nif (params.MakeCall.EnableDisableMakeCall == \"true\") {\r\n Makecall = 1;\r\n if (params.MakeCall.HandsFree === \"true\") {\r\n Handsfree = \"1\";\r\n } else {\r\n Handsfree = \"0\";\r\n }\r\n} else {\r\n Makecall = \"0\";\r\n Handsfree = \"0\";\r\n}\r\nvar command = \"SOSO=\" + params.MakeCall.Timeout + \",\" + Makecall + \",\" + Handsfree;\r\nvar sequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValueSMS(\"part1\", part1); //for sms template\r\nAddValueSMS(\"part2\", part2); // for sms template\r\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS //for sms template\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction AddValueSMS(p1, p2) { //function for sms template\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856960},{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862617}],"Tags":[]},{"Id":4085,"Name":"Real Time Locate","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"POSN\";\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"request=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856719},{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862400}],"Tags":[]},{"Id":4084,"Name":"Set Server","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\r\nsequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nvar command = \"IP=\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856937},{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862579}],"Tags":[]},{"Id":4083,"Name":"Reset Device","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"RESET\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856772},{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862447}],"Tags":[]},{"Id":4082,"Name":"Cycle Interval","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"CYCCONFIG=\" + params.CycleInterval.CycleInterval;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856657},{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862349}],"Tags":[]},{"Id":4081,"Name":"Set Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"PW=\" + params.Password.Password;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n // var password = params.Password.Password;\n // use old password if it has been changed to send password update\n let new_password = params.Password.Password;\n let old_password = params.Password.PasswordOld;\n if (new_password === old_password) {\n var password = new_password;\n } else {\n var password = old_password;\n }\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n}\\n//if (params.Password.encryption === \\\"true\\\") {\\n// var part2 = encrypt(command, part1, password);\\n//} else {\\nvar part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715687167},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715860808},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862530}],"Tags":[]},{"Id":4097,"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":false,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177961},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713428245},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856637},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862327}],"Tags":[]},{"Id":4098,"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178028},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856734},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862415}],"Tags":[]},{"Id":4099,"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178130},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttime + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440200},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar someDate = new Date(starttime);\\nstarttimeInt = someDate.getTime() / 1000;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441651},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441974},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNan(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNan(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563558},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563687},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856754},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862433}],"Tags":[]},{"Id":4100,"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178198},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856881},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862546}],"Tags":[]}],"Operations":[{"Id":278,"Name":"VGV","Operation":"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\n // Define array to push device data into. This will be put into the msg array at the end.\n var deviceParams = [];\n var configsToSend = [];\n var tasks = [];\n const _crypto = require('crypto');\n // handle ACK\n if (messageTypeCode == \"ACK\") {\n return \"\";\n }\n if (params.encrypted_data) { // encrypted data so needs decrypting\n var password;\n if (params.imei == \"null\") {\n return msg;\n }\n password = params.imei;\n if (configs.Password.Password === \"\") {\n // use imei as default password when not specified\n } else {\n // use the password\n password = configs.Password.Password\n }\n // handle encrypted messages arriving via SMS\n // if (raw.startsWith('esendex')) {\n // raw = raw.split('esendex')[2];\n // encimei = raw.split(';')[1];\n // imei = parseInt(raw.split(';')[1], 36).toString();\n // AddValue('imei', imei);\n // raw = raw.replace(encimei, imei);\n // password = imei;\n // }\n let message = decrypt(raw, password);\n //ToDo: handle errors messages arriving\n // if (message.startsWith(\"error\")) {\n // ack = \"ERR;\" + params.count_number + \";\";\n // msg.push({\n // 'code': 'ack',\n // 'value': ack\n // });\n // console.log(msg);\n // } \n if (message) {\n // send message internally\n sendMessageToLocalhost(message);\n let ack = \"ACK-MSG;\" + params.count_number + \";OK;\\n\"\n AddValue(\"ack\", ack);\n } else {\n ack = \"unknown message\" + \" - \" + serverParams.imei + \" --- \" + raw;\n AddValue(\"ack\", ack);\n }\n } else { // General Oysta Template\n if (messageTypeLocalCode == \"COMM\") { // a message from Invent!\n const details = JSON.parse(raw);\n // AddValue('imei', details.AppId);\n AddValue('json_in', JSON.stringify(details));\n switch (details.Command) {\n case \"ACTIVATE_OK\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n break;\n case \"ACTIVATE_FAILS\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\n break;\n case \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"SETSOS\":\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\n break;\n case \"APPSET\":\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\n AddConfig(configIds.Password.Password, details.Data.Password);\n break;\n case \"AGGMACS\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n break;\n case \"BLESCANON\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n AddConfig(configIds.Scanning.EnableScanning, 'true')\n break;\n case \"BLESCANOFF\":\n AddConfig(configIds.Scanning.EnableScanning, 'false')\n break;\n case \"NOTE\":\n let type = details.Data.Type !== undefined ? details.Data.Type : \"TYPE MISSING\";\n let text = details.Data.Text !== undefined ? details.Data.Text : \"Text Missing\";\n text = text.split(\",\").join(\" \"); // remove commas\n let id = details.Data.Id !== undefined ? details.Data.Id : \"Id Missing\";\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\n let value = time + \",\" + type + \",\" + id + \",\" + text;\n AddConfig(configIds.Note.Message, value)\n break;\n }\n } else if (messageTypeLocalCode == \"REGISTER\") { // Register message\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n // write values to readonly settings\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\n // remove this to disable auto-config\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n // will automtaically send notification template with all details.\n } else if (messageTypeLocalCode == \"CREATE\") { // Create message\n // temp fix to filter old messages\n const cutoff = 1707523200000; //10.2.2024\n let message_id_time = parseInt(params.count_number, 36);\n if (message_id_time > cutoff) {\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n let new_imei = params.new_imei;\n let message = \"VGV-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + ble_mac + \",\" + iccid + \";\";\n // sendMessageToLocalhost(message); \n tasks = [{\n \"name\": \"VGV\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGV\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGV\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": message\n }),\n \"order\": 2\n }]\n }\n } else {\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n if (!params.raw_accuracy) {\n AddValue('location_accuracy', 9000);\n } else {\n AddValue('location_accuracy', params.raw_accuracy);\n }\n // generate timestamps if they don't exist\n if (!params.event_time) {\n AddValue('event_time', moment.utc().unix());\n }\n if (!params.location_time) {\n AddValue('event_time', moment.utc().unix());\n }\n //if no lat and long are given, set them to 0, 0\n if (!params.latitude_raw) {\n AddValue('latitude', 0);\n } else {\n AddValue('latitude', params.latitude_raw);\n }\n if (!params.longitude_raw) {\n AddValue('longitude', 0);\n } else {\n AddValue('longitude', params.longitude_raw);\n }\n }\n // add messagetTypeLocal to output for templates\n AddValue('local_message_type', messageTypeLocalCode);\n }\n var msg = {\n 'values': deviceParams,\n };\n if (configsToSend.length > 0) {\n msg.configsToSend = configsToSend\n };\n if (tasks.length > 0) {\n msg.tasks = tasks\n };\n // commit values to receiver processor\n console.log(msg);\n\n function sendMessageToLocalhost(str) {\n if (localTesting) {\n console.log(\"Sending message to local host: \" + str);\n } else {\n var server = 'receiver-tcp';\n var c = createConnection(5678, server);\n c.write(`${str}`);\n c.end();\n }\n AddValue(\"ToLocalhost\", str);\n }\n\n function createConnection(port, server) {\n c = net.createConnection(port, server);\n c.on('error', function(error) {\n c = createConnection(port, server);\n });\n return c;\n }\n\n function decrypt(encdata, password) {\n var decrypted;\n var dataarray = encdata.split(\";\");\n if (dataarray.length > 5) {\n return \"\";\n }\n var i;\n var part1 = \"\"; // part1 will hold the type, IMEI and message ID\n if (encdata.startsWith(\"ACK\")) {\n return encdata;\n }\n for (i = 0; i < 3; i++) {\n part1 = part1 + dataarray[i] + \";\";\n }\n var mid = dataarray[2]; // use the message ID to create the salt\n var enctext = dataarray[3].split(\"=\")[1]; // the encypted data\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n // base64 decoding and extract the iv and encrypted data\n const bData = Buffer.from(enctext, 'base64');\n const iv = bData.slice(0, 16); // initial 16 chars\n const text = bData.slice(16); // all the encrypted data\n // derive key using; 32 byte key length (from salted password and mid)\n // decrypt the data in part2 and add to part1\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\n try {\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\n } catch (err) {\n decrypted = undefined;\n }\n return decrypted;\n }\n\n function encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n }\n\n function AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n deviceParams.push(cvpair);\n }\n\n function AddConfig(configName, newvalue) {\n if (newvalue !== undefined) { // don't add if newvalue is undefined\n var cvpair = {\n 'code': configName,\n 'value': newvalue, // ? newvalue : \"Not Defined\" \n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n // modify to return the object that contains your data\n return msg;\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\n // define global returns\n msg = return_values;\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1710245093},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n if (serverParams.EnvName) {\\n AddValue(\\\"EnvVar\\\", serverParams.EnvName);\\n }\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711033993},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711035615},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1714652453},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1715246932},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, all_data.mtbr);\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716292219},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, new Date(all_data.mtbr * 1000).toISOString().substring(11, 19));\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1716543468},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1), // remove trailing \\\",\\\"\\n false);\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1), // remove trailing \\\",\\\"\\n false);\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742830902},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"const ops_wrapper = require(\\\"./VGV_ops_wrapper\\\")\\nconst messages = require(\\\"./messages\\\");\\nconst test_helper = require(\\\"../_helpers/test_helper\\\")\\n// select message\\nlet message = messages.device2server.MSG_AGGMACS; //MSG_Create;// ACK_Command_OK; //MSG_CyclicUpdate; MSG_Register\\n// map input\\nlet input = ops_wrapper.inputs[message.input];\\ninput = {\\n ...input,\\n ...message.vars\\n} // merge message vars onto input template\\n// execute ops through wrapper\\nlet return_values = ops_wrapper.call_op(input);\\n// map return values\\nvar output = return_values;\\n// print values to console\\nconsole.log('-------MSG-------');\\n//console.log(JSON.stringify(output, null,4));\\nlet s = \\\"\\\";\\nfor (cv in output.values) {\\n s += '{\\\"code\\\":\\\"' + output.values[cv].code + '\\\", \\\"value\\\": \\\"' + output.values[cv].value + '\\\"},\\\\n';\\n}\\nconsole.log(s)\\nif (\\\"configsToUpdate\\\" in output) {\\n console.log(JSON.stringify(output.configsToUpdate))\\n console.log(test_helper.configs_to_update_match(message, input, output.configsToUpdate));\\n}\\nif (\\\"configsToSend\\\" in output) {\\n console.log(JSON.stringify(output.configsToSend))\\n console.log(test_helper.configs_to_update_match(message, input, output.configsToSend, \\\"configsToSend\\\"));\\n}\\nif (\\\"tasks\\\" in output) {\\n console.log(JSON.stringify(output.tasks))\\n //console.log(test_helper.configs_to_update_match(message, input, output.tasks, \\\"tasks\\\"));\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742832846},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1742832867},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\r\\n // Define array to push device data into. This will be put into the msg array at the end.\\r\\n var deviceParams = [];\\r\\n var configsToSend = [];\\r\\n var configsToUpdate = [];\\r\\n var tasks = [];\\r\\n const _crypto = require('crypto');\\r\\n // handle ACK\\r\\n if (messageTypeCode == \\\"ACK\\\") {\\r\\n return \\\"\\\";\\r\\n }\\r\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\r\\n var password;\\r\\n if (params.imei == \\\"null\\\") {\\r\\n return msg;\\r\\n }\\r\\n password = params.imei;\\r\\n if (configs.Password.Password === \\\"\\\") {\\r\\n // use imei as default password when not specified\\r\\n } else {\\r\\n // use the password\\r\\n password = configs.Password.Password\\r\\n }\\r\\n // handle encrypted messages arriving via SMS\\r\\n // if (raw.startsWith('esendex')) {\\r\\n // raw = raw.split('esendex')[2];\\r\\n // encimei = raw.split(';')[1];\\r\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\r\\n // AddValue('imei', imei);\\r\\n // raw = raw.replace(encimei, imei);\\r\\n // password = imei;\\r\\n // }\\r\\n let message = decrypt(raw, password);\\r\\n //ToDo: handle errors messages arriving\\r\\n // if (message.startsWith(\\\"error\\\")) {\\r\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\r\\n // msg.push({\\r\\n // 'code': 'ack',\\r\\n // 'value': ack\\r\\n // });\\r\\n // console.log(msg);\\r\\n // } \\r\\n if (message) {\\r\\n // send message internally\\r\\n sendMessageToLocalhost(message);\\r\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\r\\n AddValue(\\\"ack\\\", ack);\\r\\n } else {\\r\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\r\\n AddValue(\\\"ack\\\", ack);\\r\\n }\\r\\n } else { // General Oysta Template\\r\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\r\\n const details = JSON.parse(raw);\\r\\n // AddValue('imei', details.AppId);\\r\\n AddValue('json_in', JSON.stringify(details));\\r\\n switch (details.Command) {\\r\\n case \\\"ACTIVATE_OK\\\":\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\r\\n break;\\r\\n case \\\"ACTIVATE_FAILS\\\":\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\r\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\r\\n break;\\r\\n case \\\"CONFIG\\\":\\r\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\r\\n break;\\r\\n case \\\"SETSOS\\\":\\r\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\r\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\r\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\r\\n break;\\r\\n case \\\"APPSET\\\":\\r\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\r\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\r\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\r\\n AddConfig(configIds.Password.Password, details.Data.Password);\\r\\n break;\\r\\n case \\\"AGGMACS\\\":\\r\\n if (\\\"Macs\\\" in details.Data) {\\r\\n let mac_string = '';\\r\\n for (mac of details.Data.Macs) {\\r\\n mac_string = mac_string + mac + \\\",\\\";\\r\\n }\\r\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\r\\n );\\r\\n };\\r\\n break;\\r\\n case \\\"BLESCANON\\\":\\r\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\r\\n if (\\\"Macs\\\" in details.Data) {\\r\\n let mac_string = '';\\r\\n for (mac of details.Data.Macs) {\\r\\n mac_string = mac_string + mac + \\\",\\\";\\r\\n }\\r\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\r\\n );\\r\\n };\\r\\n break;\\r\\n case \\\"BLESCANOFF\\\":\\r\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\r\\n break;\\r\\n case \\\"NOTE\\\":\\r\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\r\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\r\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\r\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\r\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\r\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\r\\n AddConfig(configIds.Note.Message, value)\\r\\n break;\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\r\\n let ble_mac = params.ble_mac;\\r\\n let iccid = params.iccid;\\r\\n // write values to readonly settings\\r\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\r\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\r\\n // will automtaically Activate on Acceptance\\r\\n if (serverParams.EnvName) {\\r\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\r\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\r\\n }\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\r\\n // temp fix to filter old messages\\r\\n const cutoff = 1707523200000; //10.2.2024\\r\\n let message_id_time = parseInt(params.count_number, 36);\\r\\n if (message_id_time > cutoff) {\\r\\n let ble_mac = params.ble_mac;\\r\\n let iccid = params.iccid;\\r\\n let new_imei = params.new_imei;\\r\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\r\\n // sendMessageToLocalhost(message); \\r\\n tasks = [{\\r\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\r\\n \\\"option\\\": \\\"sync\\\",\\r\\n \\\"type\\\": \\\"createDevice\\\",\\r\\n \\\"payload\\\": JSON.stringify({\\r\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\r\\n \\\"imei\\\": new_imei,\\r\\n \\\"abortOnError\\\": false,\\r\\n \\\"init\\\": true\\r\\n }),\\r\\n \\\"order\\\": 1\\r\\n }, {\\r\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\r\\n \\\"option\\\": \\\"async\\\",\\r\\n \\\"type\\\": \\\"sendMessage\\\",\\r\\n \\\"payload\\\": JSON.stringify({\\r\\n \\\"message\\\": message\\r\\n }),\\r\\n \\\"order\\\": 2\\r\\n }]\\r\\n }\\r\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\r\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\r\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\r\\n let all_data = JSON.parse(json_str);\\r\\n if (\\\"version\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\r\\n }\\r\\n if (\\\"backgroundLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\r\\n };\\r\\n if (\\\"coarseLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\r\\n };\\r\\n if (\\\"fineLocation\\\" in all_data) {\\r\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\r\\n };\\r\\n } else {\\r\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\r\\n if (!params.raw_accuracy) {\\r\\n AddValue('location_accuracy', 9000);\\r\\n } else {\\r\\n AddValue('location_accuracy', params.raw_accuracy);\\r\\n }\\r\\n // generate timestamps if they don't exist\\r\\n if (!params.event_time) {\\r\\n AddValue('event_time', moment.utc().unix());\\r\\n }\\r\\n if (!params.location_time) {\\r\\n AddValue('event_time', moment.utc().unix());\\r\\n }\\r\\n //if no lat and long are given, set them to 0, 0\\r\\n if (!params.latitude_raw) {\\r\\n AddValue('latitude', 0);\\r\\n } else {\\r\\n AddValue('latitude', params.latitude_raw);\\r\\n }\\r\\n if (!params.longitude_raw) {\\r\\n AddValue('longitude', 0);\\r\\n } else {\\r\\n AddValue('longitude', params.longitude_raw);\\r\\n }\\r\\n }\\r\\n // add messagetTypeLocal to output for templates\\r\\n AddValue('local_message_type', messageTypeLocalCode);\\r\\n }\\r\\n var msg = {\\r\\n 'values': deviceParams,\\r\\n };\\r\\n if (configsToSend.length > 0) {\\r\\n msg.configsToSend = configsToSend\\r\\n };\\r\\n if (tasks.length > 0) {\\r\\n msg.tasks = tasks\\r\\n };\\r\\n if (configsToUpdate.length > 0) {\\r\\n msg.configsToUpdate = configsToUpdate\\r\\n };\\r\\n // commit values to receiver processor\\r\\n console.log(msg);\\r\\n\\r\\n function sendMessageToLocalhost(str) {\\r\\n if (localTesting) {\\r\\n console.log(\\\"Sending message to local host: \\\" + str);\\r\\n } else {\\r\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\r\\n var c = createConnection(5678, server);\\r\\n c.write(`${str}`);\\r\\n c.end();\\r\\n }\\r\\n AddValue(\\\"ToLocalhost\\\", str);\\r\\n }\\r\\n\\r\\n function createConnection(port, server) {\\r\\n c = net.createConnection(port, server);\\r\\n c.on('error', function(error) {\\r\\n c = createConnection(port, server);\\r\\n });\\r\\n return c;\\r\\n }\\r\\n\\r\\n function decrypt(encdata, password) {\\r\\n var decrypted;\\r\\n var dataarray = encdata.split(\\\";\\\");\\r\\n if (dataarray.length > 5) {\\r\\n return \\\"\\\";\\r\\n }\\r\\n var i;\\r\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\r\\n if (encdata.startsWith(\\\"ACK\\\")) {\\r\\n return encdata;\\r\\n }\\r\\n for (i = 0; i < 3; i++) {\\r\\n part1 = part1 + dataarray[i] + \\\";\\\";\\r\\n }\\r\\n var mid = dataarray[2]; // use the message ID to create the salt\\r\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n // base64 decoding and extract the iv and encrypted data\\r\\n const bData = Buffer.from(enctext, 'base64');\\r\\n const iv = bData.slice(0, 16); // initial 16 chars\\r\\n const text = bData.slice(16); // all the encrypted data\\r\\n // derive key using; 32 byte key length (from salted password and mid)\\r\\n // decrypt the data in part2 and add to part1\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\r\\n try {\\r\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\r\\n } catch (err) {\\r\\n decrypted = undefined;\\r\\n }\\r\\n return decrypted;\\r\\n }\\r\\n\\r\\n function encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n }\\r\\n\\r\\n function AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n deviceParams.push(cvpair);\\r\\n }\\r\\n\\r\\n function AddConfig(configName, newvalue, force = true) {\\r\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\r\\n var cvpair = {\\r\\n 'code': configName,\\r\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\r\\n 'forced': force\\r\\n };\\r\\n configsToSend.push(cvpair);\\r\\n };\\r\\n }\\r\\n\\r\\n function UpdateConfig(configName, newvalue) {\\r\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\r\\n var cvpair = {\\r\\n 'code': configName,\\r\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\r\\n };\\r\\n configsToUpdate.push(cvpair);\\r\\n };\\r\\n }\\r\\n\\r\\n function changeSingleQuoteToDouble(jsonStr) {\\r\\n if (jsonStr === undefined) {\\r\\n return undefined;\\r\\n }\\r\\n let outStr = \\\"\\\";\\r\\n for (let c of jsonStr) {\\r\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\r\\n outStr = outStr + String.fromCharCode(34);\\r\\n } else {\\r\\n outStr += c;\\r\\n }\\r\\n };\\r\\n return outStr;\\r\\n }\\r\\n\\r\\n function isASCII(str) {\\r\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\r\\n }\\r\\n // modify to return the object that contains your data\\r\\n return msg;\\r\\n}\\r\\n// params is not defined locally -> export as module\\r\\nif (typeof(params) === 'undefined') {\\r\\n module.exports = {\\r\\n execute_ops\\r\\n }\\r\\n} else { // on server use local defined vars\\r\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\r\\n // define global returns\\r\\n msg = return_values;\\r\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1751384442},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"backgroundLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\n };\\n if (\\\"coarseLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\n };\\n if (\\\"fineLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\n };\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, all_data.mtbr);\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1764581714},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"backgroundLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\n };\\n if (\\\"coarseLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\n };\\n if (\\\"fineLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\n };\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, moment(all_data.mtbr).format(\\\"hh:mm:ss\\\"));\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1764582618},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var configsToUpdate = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n UpdateConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n if (\\\"backgroundLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.BackgroundLocation, all_data.backgroundLocation);\\n };\\n if (\\\"coarseLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.CoarseLocation, all_data.coarseLocation);\\n };\\n if (\\\"fineLocation\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.FineLocation, all_data.fineLocation);\\n };\\n if (\\\"restarts\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Restarts, all_data.restarts);\\n };\\n if (\\\"mtbr\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.MTBR, moment.unix(all_data.mtbr).utc().format(\\\"HH:mm:ss\\\"));\\n };\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n if (configsToUpdate.length > 0) {\\n msg.configsToUpdate = configsToUpdate\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue, force = true) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': force\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function UpdateConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue // ? newvalue : \\\"Not Defined\\\" \\n };\\n configsToUpdate.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1764583552}]}],"Groups":[{"Id":5606,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5607,"Parent":null,"Name":"Emergency Options","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5608,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5609,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5610,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5611,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5612,"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Make Call","Json":"{\"description\":\"Emergency phone number for the device\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5613,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{ \"description\": \"Define the period for which the device should send regular location updates, and how frequent those updates are.\", \"columns\": 1, \"order\": 2, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5614,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Battery alerts","Json":"{ \"description\": \"Battery alerts\", \"columns\": 1, \"order\": 5, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5615,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Scanning","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5616,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DeviceConfig","Json":"{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5616,\"Parent\":{\"Id\":5610,\"Name\":\"Admin config\",\"Json\":{\"description\":\"Admin config\",\"columns\":2,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"DeviceConfig\",\"Json\":\"{\\\"description\\\":\\\"Device configuration values.\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1714564811}]},{"Id":5617,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5618,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5619,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5620,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5621,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]},{"Id":5622,"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Note","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"LanguageId":null,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9658,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"HandsFree","Json":"{\"name\":\"HandsFree\",\"default\":\"\",\"description\":\"HandsFree\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"SOS number is called with handsfree\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9631,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":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 Make Call","Json":"{\"name\":\"Enable Disable Make Call\",\"default\":\"\",\"description\":\"Make Call\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9656,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Timeout","Json":"{\"name\":\"Timeout\",\"default\":\"\",\"description\":\"Timeout before sending the Alert.\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9657,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"SOS Number","Json":"{ \"name\": \"SOS Number\", \"default\": \"\", \"description\": \"Number which will be called in the event the SOS button is pressed\", \"type\": \"phone\", \"order\": 1, \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Number which will be called if the SOS button is pressed ..\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9655,"Group":{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Frequency of location events, in seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9652,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Charging Alerts","Json":"{\"name\":\"Enable Battery Charging Alerts\",\"default\":\"true\",\"description\":\"Enable Alerts when charging.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Alerts will be sent when the users connects or disconnects the device to the charging station.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9651,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Critical Alert","Json":"{\"name\":\"Enable Battery Critical Alert\",\"default\":\"true\",\"description\":\"Enable Battery Critical Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends an Alert when the battery is critically low.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9650,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Critical Threshold","Json":"{\"name\":\"Battery Critical Threshold\",\"default\":\"\",\"description\":\"Battery Critical Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a critical battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9654,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Low Threshold","Json":"{\"name\":\"Battery Low Threshold\",\"default\":\"100\",\"description\":\"Battery Low Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a low battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"100","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9653,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Low Alert","Json":"{\"name\":\"Enable Battery Low Alert\",\"default\":\"true\",\"description\":\"Enable Battery Low Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9649,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"MacIDs","Json":"{\"name\":\"MacIDs\",\"default\":\"\",\"description\":\"List of MAC addresses\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Comma separated list of MAC addresses used in the scanning process.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9648,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"EnableScanning","Json":"{\"name\":\"EnableScanning\",\"default\":\"false\",\"description\":\"Enable Scanning\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When enabled will scan for MAC IDs and send a PROX alert if found.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9640,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV ActivatedFailMessage","Json":"{\"name\":\"IV ActivatedFailMessage\",\"default\":\"\",\"description\":\"Reason for Activation Failure\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440665},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440730},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537925},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537925},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978229},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978548}],"LanguageId":null,"Tags":[]},{"Id":9647,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440673},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440682},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440737},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564715},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537929},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537933},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978164},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978231},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978550}],"LanguageId":null,"Tags":[]},{"Id":9646,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BLE MAC","Json":"{\"name\":\"BLE MAC\",\"default\":\"\",\"description\":\"Bluetooth MAC address\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bluetooth MAC address of the phone. No sepearator characters.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9646,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BLE MAC\",\"Json\":\"{\\\"name\\\":\\\"BLE MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Bluetooth MAC address\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bluetooth MAC address of the phone. No sepearator characters.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440632}],"LanguageId":null,"Tags":[]},{"Id":9645,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"ICCID","Json":"{\"name\":\"ICCID\",\"default\":\"\",\"description\":\"SIM ICCID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The ICCID of the SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440657},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440722},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537918},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978224},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978544}],"LanguageId":null,"Tags":[]},{"Id":9644,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BTN MAC","Json":"{\"name\":\"BTN MAC\",\"default\":\"\",\"description\":\"Button MAC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The MAC address of the Flic button paired with the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440635},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564464},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564708}],"LanguageId":null,"Tags":[]},{"Id":9643,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV Activated","Json":"{\"name\":\"IV Activated\",\"default\":\"false\",\"description\":\"Invent Activated Ok\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Flag to store if Invent has successfully activated this device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440660},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440726},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537922},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978227},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978546}],"LanguageId":null,"Tags":[]},{"Id":9642,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Test Bounce Back","Json":"{\"name\":\"Test Bounce Back\",\"default\":\"false\",\"description\":\"Test Bounce Back\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bounce incoming messages back as notifications.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440685},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440694},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564300},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564731},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564750},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453295},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453321},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542275},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542293},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537945},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537949},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978241},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978570}],"LanguageId":null,"Tags":[]},{"Id":9641,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Config Mode","Json":"{\"name\":\"Config Mode\",\"default\":\"false\",\"description\":\"Config Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables Config mode on in the app to show additional actions and buttons.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440644},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537907},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537909},{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978539}],"LanguageId":null,"Tags":[]},{"Id":9638,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Password used to encrypt communication between Device and platform. Uses Imei if empty.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9639,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"encryption","Json":"{\"name\":\"encryption\",\"default\":\"true\",\"description\":\"enable encryption for commands\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9639,\"Group\":{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"encryption\",\"Json\":\"{\\\"name\\\":\\\"encryption\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"enable encryption for commands\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856989}],"LanguageId":null,"Tags":[]},{"Id":9637,"Group":{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Real Time Locate","Json":"{\"name\":\"Real Time Locate\",\"default\":\"\",\"description\":\"Position Request\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9635,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"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\":true,\"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":[],"LanguageId":null,"Tags":[]},{"Id":9636,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9633,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Secondary Server","Json":"{\"name\":\"Set Secondary Server\",\"default\":\"\",\"description\":\"Select Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Secondary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Secondary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9634,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Primary Server","Json":"{\"name\":\"Set Primary Server\",\"default\":\"\",\"description\":\"Set Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Primary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Primary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9632,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable NonMovement","Json":"{\"name\":\"Enable Disable NonMovement\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9659,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"period ","Json":"{\"name\":\"period \",\"default\":\"600\",\"description\":\"Period in seconds which defines \\\"non-movement\\\"\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":7200,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9660,"Group":{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Message","Json":"{\"name\":\"Message\",\"default\":\"\",\"description\":\"Message\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Note as Comma sepearted values with Time(s from epoch), Type (INFO|WARNING|...), ID, Text.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9660,\"Group\":{\"Id\":5622,\"Name\":\"Note\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Message\",\"Json\":\"{\\\"name\\\":\\\"Message\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Message\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Note as Comma sepearted values with Time(s from epoch), Type (BATTERY|REDALERT|...), ID, Text.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564690}],"LanguageId":null,"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178254},{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4097,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.2\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":false,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178259},{"Type":1,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440640}],"LanguageId":null,"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4097,"Protocol":{"Id":205,"Code":"VGV","Version":"0.2","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":false,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178764},{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":4100,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178770},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440649},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564447},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564711},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537910},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537914},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978542}],"LanguageId":null,"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":4100,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178822},{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4099,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178827},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440653},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440741},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564419},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564717},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537935},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537937},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978166},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978233},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978552}],"LanguageId":null,"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4099,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178894},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178899},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4098,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178902},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440669},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440678},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440733},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162948},{"Type":2,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.7\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162955},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564727},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564753},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453299},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453325},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542279},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542296},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537953},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978243},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978572}],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4087,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4098,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"LanguageId":null,"Tags":[]},{"Id":9665,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Version","Json":"{\"name\":\"Version\",\"default\":\"\",\"description\":\"Current Version of the App.\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use Button Request Data to update the field.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178950},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440688},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440698},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453305},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453328},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542282},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542300},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537956},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978176},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978247},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978576}],"LanguageId":null,"Tags":[]},{"Id":11088,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"StartTimeLog","Json":"{\"name\":\"StartTimeLog\",\"default\":\"\",\"description\":\"StartTime for Logs request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439790},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440677},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440686},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564721},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537938},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537941},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978168},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978235},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978554}],"LanguageId":null,"Tags":[]},{"Id":11089,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"EndTimeLog","Json":"{\"name\":\"EndTimeLog\",\"default\":\"\",\"description\":\"Endtime for log request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439985},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440690},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564724},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537941},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537944},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978170},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978237},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978556}],"LanguageId":null,"Tags":[]},{"Id":11236,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Restarts","Json":"{\"name\":\"Restarts\",\"default\":\"\",\"description\":\"Number of Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716291772},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453311},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453333},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542285},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542304},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537961},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751553092},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978174},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978245},{"Type":1,"NewValue":"{\"Id\":11236,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Restarts\",\"Json\":\"{\\\"name\\\":\\\"Restarts\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Number of Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"When a BLE lockup is detected the app will restart itself to re-enable BLE.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978574}],"LanguageId":null,"Tags":[]},{"Id":11237,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"MTBR","Json":"{\"name\":\"MTBR\",\"default\":\"\",\"description\":\"Mean Time Between Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716291813},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453291},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716453337},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542248},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542271},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716542308},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716544012},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716544055},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":19}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537964},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751553120},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978172},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978239},{"Type":1,"NewValue":"{\"Id\":11237,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts (hh:mm:ss)\\\",\\\"type\\\":\\\"time\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":true,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Average time between restarts to fix the BLE issue. Bugger numbers are better.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978568}],"LanguageId":null,"Tags":[]},{"Id":12377,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BackgroundLocation","Json":"{\"name\":\"BackgroundLocation\",\"default\":\"\",\"description\":\"BackgroundLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"BackgroundLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381437},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537929},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537949},{"Type":1,"NewValue":"{\"Id\":12377,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BackgroundLocation\",\"Json\":\"{\\\"name\\\":\\\"BackgroundLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"BackgroundLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"BackgroundLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":19}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978178}],"LanguageId":null,"Tags":[]},{"Id":12378,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"FineLocation","Json":"{\"name\":\"FineLocation\",\"default\":\"\",\"description\":\"FineLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"FineLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381505},{"Type":1,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978250},{"Type":1,"NewValue":"{\"Id\":12378,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"FineLocation\",\"Json\":\"{\\\"name\\\":\\\"FineLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"FineLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"FineLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978578}],"LanguageId":null,"Tags":[]},{"Id":12379,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Device configuration values.","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"CoarseLocation","Json":"{\"name\":\"CoarseLocation\",\"default\":\"\",\"description\":\"CoarseLocation\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"CoarseLocation\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751381545},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751537902},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978559},{"Type":1,"NewValue":"{\"Id\":12379,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"CoarseLocation\",\"Json\":\"{\\\"name\\\":\\\"CoarseLocation\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"CoarseLocation\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"CoarseLocation\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":18}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"LanguageId\":null,\"Tags\":[]}","Timestamp":1751978580}],"LanguageId":null,"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) Created ALLDATA","Timestamp":1710177889},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) added Clear buffer command","Timestamp":1710177961},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) REQDATA command","Timestamp":1710178028},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) REQLOG command","Timestamp":1710178130},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) RTLOG command","Timestamp":1710178198},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) ClearBuffer Button","Timestamp":1710178254},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710178259},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"added ALLDATA and new commands","Timestamp":1710178496},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) RTLOG enable","Timestamp":1710178764},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710178770},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) Request Logs button","Timestamp":1710178822},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710178827},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) REQDATA button","Timestamp":1710178894},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command Battery Charging Alert","Timestamp":1710178899},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710178902},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) Version text field","Timestamp":1710178950},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Remaining properties for logs and version","Timestamp":1710178977},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) updated operations with ALLDATA processing","Timestamp":1710245093},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"fix for getting version","Timestamp":1710245132},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) EnvVar test","Timestamp":1711033993},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) proper implementation for autoactivate on acceptance","Timestamp":1711035615},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-register on Acceptance","Timestamp":1711037706},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) fix for location accuracy in CYC messages","Timestamp":1712653303},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) fix accuracy in ALLDATA event","Timestamp":1712653474},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for location precision on CYC","Timestamp":1712655385},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) enabling ACk for Clearbuffer","Timestamp":1713428245},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) add starttime for logs\n","Timestamp":1713439790},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Added Endtime for log requests","Timestamp":1713439985},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1713440200},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BLE MAC","Message":"(Update) (BLE MAC) Reorder Group Params","Timestamp":1713440632},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1713440635},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1713440640},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1713440644},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1713440649},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440653},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440657},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440660},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440665},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440669},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440673},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440677},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440678},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440682},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440685},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440686},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440688},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1713440690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440694},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440698},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440722},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440726},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440730},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440733},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440737},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440741},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parse startime to epoch","Timestamp":1713441651},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parsing endtime to epoch","Timestamp":1713441974},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) was requesting. battery alerts wrongly ","Timestamp":1714162948},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"Dissociate groupParam Request Data from command Battery Charging Alert","Timestamp":1714162955},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) REQLOG fix NaN values","Timestamp":1714563558},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) fix isNaN","Timestamp":1714563687},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Params tidy up","Timestamp":1714564300},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) update Get Log labels","Timestamp":1714564419},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Hide realtime logging","Timestamp":1714564447},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Not in use","Timestamp":1714564464},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Message","Message":"(Update) (Message) updated label","Timestamp":1714564690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1714564708},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714564711},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714564715},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714564717},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714564721},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714564724},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564727},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564731},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564750},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564753},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Group","Name":"DeviceConfig","Message":"(Update) (DeviceConfig) updated label","Timestamp":1714564811},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) ICCID check","Timestamp":1714652453},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) moved ICCID chech to CREATE message","Timestamp":1715246932},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"ICCID check, timerange for logs, hide unused controls","Timestamp":1715256211},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) changing password command encryption to plain text for now","Timestamp":1715687167},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) remove encrypt checkbox logic","Timestamp":1715855955},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) fix bug","Timestamp":1715856353},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) remove encrypt checkbox logic","Timestamp":1715856558},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) remove encrypt checkbox logic","Timestamp":1715856589},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) remove encrypt checkbox logic","Timestamp":1715856616},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) remove encrypt checkbox logic","Timestamp":1715856637},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) remove encrypt checkbox logic","Timestamp":1715856657},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) remove encrypt checkbox logic","Timestamp":1715856680},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) remove encrypt checkbox logic","Timestamp":1715856700},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) remove encrypt checkbox logic","Timestamp":1715856719},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) remove encrypt checkbox logic","Timestamp":1715856734},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) remove encrypt checkbox logic","Timestamp":1715856754},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) remove encrypt checkbox logic","Timestamp":1715856772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) remove encrypt checkbox logic","Timestamp":1715856789},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) remove encrypt checkbox logic","Timestamp":1715856815},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) remove encrypt checkbox logic","Timestamp":1715856835},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) remove encrypt checkbox logic","Timestamp":1715856881},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) remove encrypt checkbox logic","Timestamp":1715856904},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) remove encrypt checkbox logic","Timestamp":1715856937},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) remove encrypt checkbox logic","Timestamp":1715856960},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"encryption","Message":"(Update) (encryption) checkbox not used any more","Timestamp":1715856989},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) Encrypt PW with IMEI","Timestamp":1715860808},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) Prepending encrypted commands with \"enc=\"","Timestamp":1715862067},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) prepending encrypted commands with \"enc=\"","Timestamp":1715862254},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862278},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) prepending encrypted commands with \"enc=\"","Timestamp":1715862327},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) prepending encrypted commands with \"enc=\"","Timestamp":1715862349},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) prepending encrypted commands with \"enc=\"","Timestamp":1715862369},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) prepending encrypted commands with \"enc=\"","Timestamp":1715862387},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) prepending encrypted commands with \"enc=\"","Timestamp":1715862400},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) prepending encrypted commands with \"enc=\"","Timestamp":1715862415},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) prepending encrypted commands with \"enc=\"","Timestamp":1715862433},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) prepending encrypted commands with \"enc=\"","Timestamp":1715862447},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) prepending encrypted commands with \"enc=\"","Timestamp":1715862461},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) prepending encrypted commands with \"enc=\"","Timestamp":1715862480},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862498},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) prepending encrypted commands with \"enc=\"","Timestamp":1715862530},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862546},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) prepending encrypted commands with \"enc=\"","Timestamp":1715862564},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) prepending encrypted commands with \"enc=\"","Timestamp":1715862579},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) prepending encrypted commands with \"enc=\"","Timestamp":1715862617},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) add missing crypto reference","Timestamp":1716286535},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Create) (Restarts) Adding restart param","Timestamp":1716291772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Create) (MTBR) Added MBTR param","Timestamp":1716291813},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) Restarts and MTBR json parsing added","Timestamp":1716292219},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716453291},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716453295},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716453299},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716453305},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716453311},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716453321},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716453325},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716453328},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716453333},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716453337},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) changing mtbr to time","Timestamp":1716542248},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716542271},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716542275},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716542279},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716542282},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716542285},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1716542293},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716542296},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716542300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716542304},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716542308},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) checning mtbr to time","Timestamp":1716543468},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) update label","Timestamp":1716544012},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716544055},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"encryption, restarts and MTBR, more tidy up","Timestamp":1716972265},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) testing long connection","Timestamp":1718624176},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"received","Message":"(Update) (received) testing long connection","Timestamp":1718624912},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) testing long connection\n","Timestamp":1718624938},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) disable long connection for acks","Timestamp":1718625487},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) enabling ack first","Timestamp":1718625507},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) enabling \"long connection\" on ack again","Timestamp":1718625835},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) remove ack first","Timestamp":1718626131},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) change to long connection","Timestamp":1718627036},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) reverting long connection","Timestamp":1718707224},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"received","Message":"(Update) (received) reverting long connection","Timestamp":1718707234},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) reverting long connection","Timestamp":1718707248},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) reverting long connection","Timestamp":1718707263},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) sending ack to ack","Timestamp":1718875625},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"completed","Message":"(Update) (completed) removing acking the ack","Timestamp":1718876306},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) testing decrypt processor","Timestamp":1719306762},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) enabling no operation for encrypted message","Timestamp":1719307635},{"Version":"0.9","UserName":"Sean-Admin","Resource":"MessageType","Name":"ENC","Message":"(Update) (ENC) updated decryption","Timestamp":1719310876},{"Version":"0.9","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Bump version for protocol-dev","Timestamp":1737376393},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) make AGGMACS not force update - only on change","Timestamp":1742830902},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) change to configsToUpdate for Agg Macs","Timestamp":1742832846},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) wrong paste","Timestamp":1742832867},{"Version":"1.0","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for AGGMAcs - only update DB, not trigger command","Timestamp":1742980519},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Create) (BackgroundLocation) 1705861-add-backgroundlocation-device-config-vgv","Timestamp":1751381437},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Create) (FineLocation) 1705861-add-finelocation-device-config-vgv","Timestamp":1751381505},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Create) (CoarseLocation) 1705861-add-coarselocation-device-config-vgv","Timestamp":1751381545},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) 1705861-update-op-script-vgv","Timestamp":1751384442},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751537902},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751537907},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751537909},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751537910},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751537914},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751537918},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751537922},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751537925},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751537925},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751537929},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751537929},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751537933},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751537935},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751537937},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751537938},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751537941},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751537941},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751537944},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751537945},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751537949},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751537949},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751537953},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751537956},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751537961},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751537964},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) 1740967-alldata-make-restarts-readonly-vgv","Timestamp":1751553092},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) 1740967-alldata-make-mtbr-readonly-vgv","Timestamp":1751553120},{"Version":"1.1","UserName":"alex.marsden@theaccessgroup.com","Resource":"Protocol","Name":null,"Message":"1740967 - pack for acceptance","Timestamp":1751641953},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978164},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978166},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978168},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978170},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978172},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978174},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978176},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"BackgroundLocation","Message":"(Update) (BackgroundLocation) Reorder Group Params","Timestamp":1751978178},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751978224},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751978227},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751978229},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978231},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978233},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978235},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978237},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978239},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751978241},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751978243},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978245},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978247},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Update) (FineLocation) Reorder Group Params","Timestamp":1751978250},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1751978539},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1751978542},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1751978544},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1751978546},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1751978548},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1751978550},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1751978552},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1751978554},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1751978556},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751978559},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1751978568},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1751978570},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1751978572},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1751978574},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1751978576},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"FineLocation","Message":"(Update) (FineLocation) Reorder Group Params","Timestamp":1751978578},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"GroupParam","Name":"CoarseLocation","Message":"(Update) (CoarseLocation) Reorder Group Params","Timestamp":1751978580},{"Version":"1.2","UserName":"alex.marsden@theaccessgroup.com","Resource":"Protocol","Name":null,"Message":"update device config order","Timestamp":1751984687},{"Version":"1.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) fixing alldata mtbr and restarts","Timestamp":1764581714},{"Version":"1.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) fix mtbr","Timestamp":1764582618},{"Version":"1.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) mtbr time formatting fix","Timestamp":1764583552}],"ProtocolActionObjects":[],"Tags":[{"Id":2054,"Name":"AllowDuplicates","BackendAction":"PermitReceiverDublicates","Value":"True"},{"Id":1956,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"True"}],"MessageCodes":[{"Name":"Alarm - Movement","Description":"At alert on movement ( not fall)","Code":"ALMOV","CanLiveInsights":false},{"Name":"Alarm-Welfare Check","Description":"Welfare check alarm","Code":"ALW","CanLiveInsights":false},{"Name":"Cycle","Description":"Regular, cyclic, events from a device","Code":"CYC","CanLiveInsights":false},{"Name":"Location - other","Description":"Location - other","Code":"LOCN","CanLiveInsights":false},{"Name":"Acknowledge","Description":"Acknowledgment of a command sent to the device","Code":"ACK","CanLiveInsights":false},{"Name":"Battery Charging - On","Description":"Battery Charging - On","Code":"BATCN","CanLiveInsights":false},{"Name":"Check / keep alive / Heartbeat","Description":"Keep alive / heartbeat signal to maintain a connection ","Code":"CHK","CanLiveInsights":false},{"Name":"Alarm - Amber Alert","Description":"Alarm - Amber Alert","Code":"ALA","CanLiveInsights":false},{"Name":"Alarm – Fall","Description":"Alarm – Fall","Code":"ALF","CanLiveInsights":false},{"Name":"Alarm – Non movement","Description":"Alarm – Non movement","Code":"ALNM","CanLiveInsights":false},{"Name":"Alarm - Smoke","Description":"Alarm - Smoke","Code":"ALSM","CanLiveInsights":false},{"Name":"Alarm - Speed","Description":"Alarm - Speed","Code":"ALSP","CanLiveInsights":false},{"Name":"Alarm – Emergency Cancelled","Description":"Alarm – Emergency Cancelled by the user","Code":"ALSOS-C","CanLiveInsights":false},{"Name":"Battery Charging - off","Description":"Battery Charging - off","Code":"BATCF","CanLiveInsights":false},{"Name":"Battery empty","Description":"Battery empty","Code":"BATE","CanLiveInsights":false},{"Name":"Battery full","Description":"Battery full","Code":"BATF","CanLiveInsights":false},{"Name":"Battery low","Description":"Battery low","Code":"BATL","CanLiveInsights":false},{"Name":"Button Press","Description":"Button Press","Code":"BPRS","CanLiveInsights":false},{"Name":"Ebeacon zone in","Description":"Ebeacon zone in","Code":"EBZI","CanLiveInsights":false},{"Name":"Ebeacon zone out","Description":"Ebeacon zone out","Code":"EBZO","CanLiveInsights":false},{"Name":"Location check in","Description":"Location check in","Code":"LCI","CanLiveInsights":false},{"Name":"Location check out","Description":"Location check out","Code":"LCO","CanLiveInsights":false},{"Name":"Reminder not ok","Description":"Reminder not ok","Code":"MRME","CanLiveInsights":false},{"Name":"No Activity","Description":"No Activity","Code":"NACT","CanLiveInsights":false},{"Name":"Power Off","Description":"Power Off","Code":"PWRF","CanLiveInsights":false},{"Name":"Power On","Description":"Power On","Code":"PWRN","CanLiveInsights":false},{"Name":"Vehicle - Driving hours excess","Description":"Vehicle - Driving hours excess","Code":"VDE","CanLiveInsights":false},{"Name":"Vehicle – Fuel cap","Description":"Vehicle – Fuel cap","Code":"VFC","CanLiveInsights":false},{"Name":"Vehicle - Fuel level","Description":"Vehicle - Fuel level","Code":"VFL","CanLiveInsights":false},{"Name":"Vehicle – Harsh braking","Description":"Vehicle – Harsh braking","Code":"VHB","CanLiveInsights":false},{"Name":"Vehicle – Ignition off","Description":"Vehicle – Ignition off","Code":"VIGF","CanLiveInsights":false},{"Name":"Vehicle – Driver not authorized","Description":"Vehicle – Driver not authorized","Code":"VNA","CanLiveInsights":false},{"Name":"Vehicle – Night driving","Description":"Vehicle – Night driving","Code":"VND","CanLiveInsights":false},{"Name":"Vehicle – Ignition on","Description":"Vehicle – Ignition on","Code":"VIGN","CanLiveInsights":false},{"Name":"Vehicle – Seat belt","Description":"Vehicle – Seat belt","Code":"VSB","CanLiveInsights":false},{"Name":"Zone in","Description":"Zone in","Code":"ZNI","CanLiveInsights":false},{"Name":"Zone out","Description":"Zone out","Code":"ZNO","CanLiveInsights":false},{"Name":"Device Status","Description":"Device Status","Code":"STATUS","CanLiveInsights":false},{"Name":"Real time location ","Description":"Real time location ","Code":"RTL","CanLiveInsights":false},{"Name":"Encoded communication","Description":"Encoded communication","Code":"ENC","CanLiveInsights":false},{"Name":"Proximity","Description":"Proximity alert ","Code":"PROX","CanLiveInsights":false},{"Name":"Dummy - do NOT use ","Description":"Dummy template - should not be used","Code":"DUMMY","CanLiveInsights":false},{"Name":"Battery High","Description":"Battery High","Code":"BATH","CanLiveInsights":false},{"Name":"Location - Set Available","Description":"Location - Set Available","Code":"LSA","CanLiveInsights":false},{"Name":"Location - Set Busy","Description":"Location - Set Busy","Code":"LSB","CanLiveInsights":false},{"Name":"Device information","Description":"General Device Information from the device","Code":"INFO","CanLiveInsights":false},{"Name":"Alarm - Tamper","Description":"Alarm - Device Tamper","Code":"ALTAM","CanLiveInsights":false},{"Name":"Communication ","Description":"General communication, initialisation etc.","Code":"COMM","CanLiveInsights":false},{"Name":"Humidity","Description":"Relative humidity","Code":"RH","CanLiveInsights":false},{"Name":"Temperature","Description":"Temperature","Code":"TEMP","CanLiveInsights":false},{"Name":"Alarm - Temperature","Description":"Alarm - Temperature","Code":"ALTEMP","CanLiveInsights":false},{"Name":"Alarm - Humidity","Description":"Alarm - Relative Humidity","Code":"ALRH","CanLiveInsights":false},{"Name":"Proximity End","Description":"Proximity End","Code":"PROX-E","CanLiveInsights":false},{"Name":"Alarm - PIR","Description":"Alarm - PIR","Code":"ALPIR","CanLiveInsights":false},{"Name":"PIR - Movements","Description":"Number of PIR movements detected in reporting period","Code":"PIRM","CanLiveInsights":false},{"Name":"Battery Report","Description":"Battery Voltage Report","Code":"BATR","CanLiveInsights":false},{"Name":"Alarm - Sim Swap","Description":"Alarm - Sim Swap","Code":"ALSS","CanLiveInsights":false},{"Name":"Mileage","Description":"Mileage","Code":"MIL","CanLiveInsights":false},{"Name":"Intrusion","Description":"Intrusion","Code":"INT","CanLiveInsights":false},{"Name":"No Fix Report","Description":"No fix report","Code":"NFR","CanLiveInsights":false},{"Name":"Switched Off Report","Description":"Switched off report","Code":"SOR","CanLiveInsights":false},{"Name":"End - Shift","Description":"End - Shift","Code":"ENDSH","CanLiveInsights":false},{"Name":"Sleep Mode","Description":"Device comes to sleep mode","Code":"SPM","CanLiveInsights":false},{"Name":"Wake Up Device","Description":"Device Wake Up from SleepMode","Code":"WUD","CanLiveInsights":false},{"Name":"Door Closed","Description":"Door Closed","Code":"DRCL","CanLiveInsights":false},{"Name":"Door Open","Description":"Door Open","Code":"DRO","CanLiveInsights":false},{"Name":"Alarm Door Closed","Description":"Alarm Door Closed","Code":"ALDC","CanLiveInsights":false},{"Name":"Alarm Door Open","Description":"Alarm Door Open","Code":"ALDO","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Snooze","Description":"Amber Alert Alarm - snoozed by user","Code":"ALA-S","CanLiveInsights":false},{"Name":"Amber Alert - On","Description":"Amber Alert Alarm created by User","Code":"ALA-O","CanLiveInsights":false},{"Name":"Reminder OK","Description":"Reminder OK","Code":"MRMK","CanLiveInsights":false},{"Name":"Message - text","Description":"Message- text","Code":"MSG","CanLiveInsights":false},{"Name":"Start - Shift","Description":"Start- Shift","Code":"STSH","CanLiveInsights":false},{"Name":"Beacon","Description":"Beacon","Code":"BT","CanLiveInsights":false},{"Name":"Alarm - Amber Alert - Cancel","Description":"Amber alert alarm, cancelled by user","Code":"ALA-C","CanLiveInsights":false},{"Name":"Alarm-Impact","Description":"Alarm-Impact","Code":"ALI","CanLiveInsights":false},{"Name":"Reminder Snooze ","Description":"Reminder - snooze","Code":"MRM-S","CanLiveInsights":false},{"Name":"Blood Pressure","Description":"Blood Pressure","Code":"HBP","CanLiveInsights":false},{"Name":"Heart Rate","Description":"Heart Rate","Code":"HRT","CanLiveInsights":false},{"Name":"SELFTEST","Description":"Used for Testing Purposes","Code":"TEST","CanLiveInsights":false},{"Name":"Alarm - Fall Cancelled","Description":"Alarm - Fall Cancelled","Code":"ALF-C","CanLiveInsights":false},{"Name":"Alarm – Non Movement Cancelled","Description":"Alarm – Non movement Cancelled by the user","Code":"ALNM-C","CanLiveInsights":false},{"Name":"Insight","Description":"Insight","Code":"INSIGHT","CanLiveInsights":false},{"Name":"Quantity Drunk","Description":"Quantity of liquid drunk ","Code":"QDRNK","CanLiveInsights":false},{"Name":"Bed - in","Description":"Bed or seat sensor ","Code":"BEDIN","CanLiveInsights":false},{"Name":"Bed - Out","Description":"Bed / seat sensor","Code":"BEDOUT","CanLiveInsights":false},{"Name":"Leak sensor","Description":"Leak detected ","Code":"LEAK","CanLiveInsights":false},{"Name":"Light - Lux","Description":"Light levels - LUX ","Code":"LUX","CanLiveInsights":false},{"Name":"Exited","Description":"Exited","Code":"EXIT","CanLiveInsights":false},{"Name":"Entered","Description":"Entered","Code":"ENTER","CanLiveInsights":false},{"Name":"Answered Door","Description":"Answered Door","Code":"ANSWDR","CanLiveInsights":false},{"Name":"Alarm – Emergency","Description":"Alarm – Emergency","Code":"ALSOS","CanLiveInsights":true},{"Name":"Alarm – Gas","Description":"Alarm – Gas ( carbon monixide, carbon dioxide, propane, butane ) ","Code":"ALG","CanLiveInsights":false},{"Name":"Leak Off","Description":"Leak detection has stopped alerting","Code":"LEAK-OFF","CanLiveInsights":false},{"Name":"Question-Answer","Description":"Question - Answer response","Code":"Q-A","CanLiveInsights":false},{"Name":"Visitor Arrived","Description":"Visitor Arrived","Code":"VISARR","CanLiveInsights":true},{"Name":"Visitor Departed","Description":"Visitor Departed","Code":"VISDEP","CanLiveInsights":true},{"Name":"Docked","Description":"Device placed in docking station","Code":"DOCK-IN","CanLiveInsights":false},{"Name":"Undocked","Description":"Device removed from docking station","Code":"DOCK-OUT","CanLiveInsights":false},{"Name":"Gas concentrarion","Description":"Gas concentrarion (ppm)","Code":"GAS","CanLiveInsights":false},{"Name":"Distance ","Description":"Distance measurement, could be level, proximity etc ","Code":"DIST","CanLiveInsights":false},{"Name":"Alarm Distance","Description":"Alarm on distance measurement, could be level, proximity etc ","Code":"ALDIST","CanLiveInsights":false},{"Name":"Welfare OK","Description":"Welfare check has returned OK","Code":"WELFOK","CanLiveInsights":false},{"Name":"Steps","Description":"Step counter","Code":"STEPS","CanLiveInsights":true},{"Name":"Connection","Description":"Connection","Code":"CON","CanLiveInsights":false},{"Name":"Disconnection","Description":"Disconnect","Code":"DISCON","CanLiveInsights":false},{"Name":"Position By Button","Description":"Position By Button","Code":"PBB","CanLiveInsights":false},{"Name":"Alarm Welfare","Description":"Alert welfare not confirmed","Code":"ALA-W","CanLiveInsights":false},{"Name":"Welfare Timer Starts","Description":"Welfare Check in","Code":"WTS","CanLiveInsights":false},{"Name":"Welfare Stops","Description":"Welfare Check out","Code":"WSTP","CanLiveInsights":false},{"Name":"Alarm Ended","Description":"Alarm finished","Code":"ALA-F","CanLiveInsights":false},{"Name":"BRTH - Breath Rate","Description":"Rate of Breathing per minute","Code":"BRTH","CanLiveInsights":false},{"Name":"Sleep State","Description":"Sleep state ","Code":"SLPSTATE","CanLiveInsights":false},{"Name":"Alarm - Tilt","Description":"Alarm - Tilt Alert","Code":"ALTLT","CanLiveInsights":false},{"Name":"Alert – Fall Suspected","Description":"Alert – Fall Suspected","Code":"ALFS","CanLiveInsights":false}]} \ No newline at end of file