diff --git a/vga b/vga index 247d5ae..c2688f7 100644 --- a/vga +++ b/vga @@ -1 +1 @@ -{"Id":206,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":6005,"Code":"MACB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;MACB=<>,<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;MACB=[^,;]*,[^;,]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6006,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGA-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6006,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":true,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712654533}],"Tags":[]},{"Id":6007,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6008,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6009,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6010,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6011,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6012,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6013,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6014,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6015,"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,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6016,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6017,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6018,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6019,"Code":"DISCONB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;DISCONB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;DISCONB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6020,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6021,"Code":"ALTAM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALTAM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALTAM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6022,"Code":"ATEMPB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ATEMPB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ATEMPB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6023,"Code":"ALNMB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALNMB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALNMB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6024,"Code":"BATEB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;BATEB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATEB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6025,"Code":"BATLB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATLB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATLB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6026,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGA-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGA-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6027,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6028,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6029,"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":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\"[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6030,"Code":"CONNB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;CONNB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CONNB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6031,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6032,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6032,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710246258},{"Type":1,"NewValue":"{\"Id\":6032,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712654568}],"Tags":[]}],"Commands":[{"Id":4122,"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":[],"Tags":[]},{"Id":4121,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkonwn 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":[],"Tags":[]},{"Id":4120,"Name":"Reset Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"RESETB\";\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":[],"Tags":[]},{"Id":4119,"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":[],"Tags":[]},{"Id":4118,"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":[],"Tags":[]},{"Id":4117,"Name":"SetLTEParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"LTEPAR=\" + params.Bracelet.LTEParam;\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":[],"Tags":[]},{"Id":4116,"Name":"SetCommonParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"COMPAR=\" + params.Bracelet.CommonParam;\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":[],"Tags":[]},{"Id":4115,"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":[],"Tags":[]},{"Id":4114,"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":[],"Tags":[]},{"Id":4113,"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":[],"Tags":[]},{"Id":4112,"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":[],"Tags":[]},{"Id":4111,"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":[],"Tags":[]},{"Id":4110,"Name":"Reboot Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"REBOOTB\";\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":[],"Tags":[]},{"Id":4109,"Name":"SetBattery Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"BATBC=\" + params.Bracelet.LowBattery + \",\" + params.Bracelet.CriticalBattery;\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":[],"Tags":[]},{"Id":4108,"Name":"SetTemp Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"TEMPBC=\" + params.Bracelet.LowTemp + \",\" + params.Bracelet.HighTemp;\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":[],"Tags":[]},{"Id":4107,"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":[],"Tags":[]},{"Id":4106,"Name":"Set Bracelet Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"BRAPW=\" + params.Password.BraceletPW;\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":[],"Tags":[]},{"Id":4105,"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":[],"Tags":[]},{"Id":4104,"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":[],"Tags":[]},{"Id":4103,"Name":"PowerOff Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"PWRFB\";\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":[],"Tags":[]},{"Id":4102,"Name":"SetCloudParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"CLDPAR=\" + params.Bracelet.CloudParam;\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":[],"Tags":[]},{"Id":4101,"Name":"SetBLEParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"BLEPAR=\" + params.Bracelet.BLEParam;\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":[],"Tags":[]},{"Id":4123,"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":[{"Type":0,"NewValue":"{\"Id\":4123,\"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":1710246421}],"Tags":[]},{"Id":4124,"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\":4124,\"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":1710246477}],"Tags":[]},{"Id":4125,"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\":4125,\"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":1710246526},{"Type":1,"NewValue":"{\"Id\":4125,\"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":1714640696}],"Tags":[]},{"Id":4126,"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\":4126,\"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":1710246587}],"Tags":[]}],"Operations":[{"Id":279,"Name":"VGA","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 switch (messageTypeLocalCode) {\n case (\"COMM\"):\n process_invent_msg(); //incoming invent commands\n break;\n case (\"MACB\"):\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\n add_params_to_output();\n break;\n case (\"REGISTER\"):\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 break;\n case (\"CREATE\"):\n let c_ble_mac = params.ble_mac;\n let c_iccid = params.iccid;\n let new_imei = params.new_imei;\n let c_message = \"VGA-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + c_ble_mac + \",\" + c_iccid + \";\";\n // sendMessageToLocalhost(c_message); \n tasks = [{\n \"name\": \"VGA\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGA\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGA\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": c_message\n }),\n \"order\": 2\n }]\n break;\n default:\n // all other general messages\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n add_params_to_output();\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 // modify to return the object that contains your data\n return msg;\n\n function add_params_to_output() {\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 //if (params.temp_bracelet) {\n // AddValue('oysta_labels', 'DegC');\n // AddValue('single_column_value', params.temp_bracelet);\n //}\n }\n\n function process_invent_msg() {\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 \"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 \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"CGFBR\":\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\n let commonParam = addEscapeChar(details.Data.ComPar);\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\n let cloudParam = addEscapeChar(details.Data.CldPar);\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\n let lteParam = addEscapeChar(details.Data.LtePar);\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\n let bleParam = addEscapeChar(details.Data.BlePar);\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\n break;\n case \"REBOOTB\":\n AddConfig(configIds.Bracelet.Reboot, 'true');\n break;\n case \"PWRFB\":\n AddConfig(configIds.Bracelet.PowerOff, 'true');\n break;\n case \"RESETB\":\n AddConfig(configIds.Bracelet.Reset, 'true');\n break;\n case \"BRAPWUPDATE\":\n AddValue(\"PasswordRecoveryFrom\", details.Data.ImeiOld);\n // get password from old device, then set\n AddConfig(configIds.Password.BraceletPW, \"DoNotChange123\" // replace with recovered password, for test this is DoNotChange123\n )\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(\" \");\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 }\n\n function addEscapeChar(json) {\n if (json === undefined) {\n return undefined;\n }\n let outStr = \"\";\n let jsonStr = JSON.stringify(json);\n for (let c of jsonStr) {\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\n } else {\n outStr += c;\n }\n };\n return outStr;\n }\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,\n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, 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\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1710246336},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1711039145},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1714651746},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(c_iccid)) {\\n c_iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1715247045},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(c_iccid)) {\\n c_iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1716206509}]}],"Groups":[{"Id":5624,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5625,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5626,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5627,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5628,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5629,"Parent":{"Id":5625,"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":5629,"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":5630,"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,"ProtocolActionObjects":[]},{"Id":5630,"Parent":{"Id":5625,"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":5629,"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":5630,"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,"ProtocolActionObjects":[]},{"Id":5631,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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,"ProtocolActionObjects":[]},{"Id":5632,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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,"ProtocolActionObjects":[]},{"Id":5633,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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":"Bracelet","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5634,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5635,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5636,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5637,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5638,"Parent":{"Id":5627,"Name":"Notification","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5638,"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,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9692,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9692,\"Group\":{\"Id\":5629,\"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":1714640806}],"Tags":[]},{"Id":9689,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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 hte phones SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9689,\"Group\":{\"Id\":5629,\"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 hte phones SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640798}],"Tags":[]},{"Id":9690,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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 that is set when the Invent platform has acknowledged the activation of the device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9690,\"Group\":{\"Id\":5629,\"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 that is set when the Invent platform has acknowledged the activation of the device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640801}],"Tags":[]},{"Id":9691,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\":\"\",\"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":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9691,\"Group\":{\"Id\":5629,\"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\\\":\\\"\\\",\\\"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\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640794}],"Tags":[]},{"Id":9693,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"DisableAck","Json":"{\"name\":\"DisableAck\",\"default\":\"\",\"description\":\"Disable Ack\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Disable Acks for testing to simulate IntelliCare failure.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9693,\"Group\":{\"Id\":5629,\"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\":\"DisableAck\",\"Json\":\"{\\\"name\\\":\\\"DisableAck\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Disable Ack\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Disable Acks for testing to simulate IntelliCare failure.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640747},{"Type":1,"NewValue":"{\"Id\":9693,\"Group\":{\"Id\":5629,\"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\":\"DisableAck\",\"Json\":\"{\\\"name\\\":\\\"DisableAck\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Disable Ack\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Disable Acks for testing to simulate IntelliCare failure.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640819}],"Tags":[]},{"Id":9666,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9666,\"Group\":{\"Id\":5629,\"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":1714640812}],"Tags":[]},{"Id":9686,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\":\"Phone BLE 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\":\"The Bluetooth MAC address of the phone.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9687,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"BRA MAC","Json":"{\"name\":\"BRA MAC\",\"default\":\"\",\"description\":\"Bracelet 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\":\"The MAC address of the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9688,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"braceletIMEI","Json":"{\"name\":\"braceletIMEI\",\"default\":\"\",\"description\":\"Bracelet IMEI\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Readonly field containing the bracelet IMEI.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9696,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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":"BraceletPW","Json":"{\"name\":\"BraceletPW\",\"default\":\"\",\"description\":\"Bracelet Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9694,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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":[],"Tags":[]},{"Id":9695,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9697,"Group":{"Id":5631,"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":5624,"Name":"Settings","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":5632,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9685,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9701,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9700,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9699,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9698,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9671,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LTEParam","Json":"{\"name\":\"LTEParam\",\"default\":\"\",\"description\":\"LTE Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"LTE Parameters as defined by SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9672,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"BLEParam","Json":"{\"name\":\"BLEParam\",\"default\":\"\",\"description\":\"BLE Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"BLE Parameters as defined in SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9673,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"Reboot","Json":"{\"name\":\"Reboot\",\"default\":\"\",\"description\":\"Reboot\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Reboots the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9674,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"PowerOff","Json":"{\"name\":\"PowerOff\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Power off the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9675,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Resets the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9682,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"HighTemp","Json":"{\"name\":\"HighTemp\",\"default\":\"\",\"description\":\"High Temperature\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Temperature above which a temperature alarm will be raised.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9684,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LowTemp","Json":"{\"name\":\"LowTemp\",\"default\":\"\",\"description\":\"Low Temperature\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Threshold below which a temperature alert will be triggered.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9667,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LowBattery","Json":"{\"name\":\"LowBattery\",\"default\":\"\",\"description\":\"Low Battery Threshold\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9668,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CriticalBattery","Json":"{\"name\":\"CriticalBattery\",\"default\":\"\",\"description\":\"Critical Battery Threshold\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9669,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CommonParam","Json":"{\"name\":\"CommonParam\",\"default\":\"\",\"description\":\"Common Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Common parameters as defined in the SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9670,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CloudParam","Json":"{\"name\":\"CloudParam\",\"default\":\"\",\"description\":\"Cloud Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Cloud Parameters as defined by SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9677,"Group":{"Id":5634,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5635,"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":[]},{"Id":5636,"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":5637,"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 No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"false\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9677,\"Group\":{\"Id\":5634,\"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\":[]},\"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\":[],\"Tags\":[]}","Timestamp":1716289251}],"Tags":[]},{"Id":9676,"Group":{"Id":5634,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5635,"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":[]},{"Id":5636,"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":5637,"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":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":null,\"integerOnly\":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":[],"Tags":[]},{"Id":9678,"Group":{"Id":5635,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5636,"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":5637,"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\":\"\",\"integerOnly\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9678,\"Group\":{\"Id\":5635,\"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\":\"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\":[],\"Tags\":[]}","Timestamp":1716289280}],"Tags":[]},{"Id":9679,"Group":{"Id":5635,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5636,"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":5637,"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\":\"false\",\"description\":null,\"type\":\"enable\",\"order\":0,\"suffix\":null,\"prefix\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9679,\"Group\":{\"Id\":5635,\"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\":\"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\":[],\"Tags\":[]}","Timestamp":1716289267}],"Tags":[]},{"Id":9680,"Group":{"Id":5636,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5637,"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":"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9683,"Group":{"Id":5637,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":[]}]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"label\":\"Production Primary\",\"value\":\"52.232.85.255:5678\"},{\"label\":\"Acceptance Primary\",\"value\":\"52.174.17.77:5678\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9681,"Group":{"Id":5637,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":[]}]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"label\":\"Production Secondary\",\"value\":\"52.232.85.255:5678\"},{\"label\":\"Acceptance Secondary\",\"value\":\"52.174.17.77:5678\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9702,"Group":{"Id":5638,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5627,"Name":"Notification","Json":{"description":null,"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":"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":[],"Tags":[]},{"Id":9703,"Group":{"Id":5629,"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\":9703,\"Group\":{\"Id\":5629,\"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":1710246641},{"Type":0,"NewValue":"{\"Id\":9703,\"Group\":{\"Id\":5629,\"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\":4123,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"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\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710246647},{"Type":1,"NewValue":"{\"Id\":9703,\"Group\":{\"Id\":5629,\"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\\\":3}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640790}],"Tags":[]},{"Id":9703,"Group":{"Id":5629,"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":4123,"Protocol":{"Id":206,"Code":"VGA","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":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9704,"Group":{"Id":5629,"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\":9704,\"Group\":{\"Id\":5629,\"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":1710246708},{"Type":0,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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\":4126,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246712},{"Type":1,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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":1714640774},{"Type":1,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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\\\":10}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640824}],"Tags":[]},{"Id":9704,"Group":{"Id":5629,"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":4126,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9705,"Group":{"Id":5629,"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\":9705,\"Group\":{\"Id\":5629,\"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":1710246766},{"Type":0,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\":4125,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246770},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640834},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640848},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640888}],"Tags":[]},{"Id":9705,"Group":{"Id":5629,"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":4125,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9706,"Group":{"Id":5629,"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\":9706,\"Group\":{\"Id\":5629,\"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":1710246818},{"Type":0,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\":4124,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246823},{"Type":1,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278047},{"Type":1,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278063}],"Tags":[]},{"Id":9706,"Group":{"Id":5629,"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":4124,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9707,"Group":{"Id":5629,"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\":9707,\"Group\":{\"Id\":5629,\"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":1710246871},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640853},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278051},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278066}],"Tags":[]},{"Id":11133,"Group":{"Id":5629,"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\":11133,\"Group\":{\"Id\":5629,\"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":1714640506},{"Type":1,"NewValue":"{\"Id\":11133,\"Group\":{\"Id\":5629,\"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\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640842},{"Type":1,"NewValue":"{\"Id\":11133,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714642185}],"Tags":[]},{"Id":11134,"Group":{"Id":5629,"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\":11134,\"Group\":{\"Id\":5629,\"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":1714640554},{"Type":1,"NewValue":"{\"Id\":11134,\"Group\":{\"Id\":5629,\"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":1714640828},{"Type":1,"NewValue":"{\"Id\":11134,\"Group\":{\"Id\":5629,\"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\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714642190}],"Tags":[]},{"Id":11226,"Group":{"Id":5629,"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":"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\":11226,\"Group\":{\"Id\":5629,\"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\":\"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":1716204701},{"Type":1,"NewValue":"{\"Id\":11226,\"Group\":{\"Id\":5629,\"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\":\"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\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278055},{"Type":1,"NewValue":"{\"Id\":11226,\"Group\":{\"Id\":5629,\"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\":\"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":1716278069}],"Tags":[]},{"Id":11227,"Group":{"Id":5629,"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":"MTBR","Json":"{\"name\":\"MTBR\",\"default\":\"\",\"description\":\"Mean Time Between Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"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\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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":1716204770},{"Type":1,"NewValue":"{\"Id\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278044},{"Type":1,"NewValue":"{\"Id\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278072}],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) add ALLDATA messagetype","Timestamp":1710246258},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Ops update - ALLDATA processing","Timestamp":1710246336},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) create CLRBUF command","Timestamp":1710246421},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) create REQDATA command","Timestamp":1710246477},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) create REQLOG command","Timestamp":1710246526},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) create RTLOG command","Timestamp":1710246587},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) Add ClearBuffer button","Timestamp":1710246641},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710246647},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) add RTLog checkbox","Timestamp":1710246708},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710246712},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) add Request Log button","Timestamp":1710246766},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710246770},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) add request Data command","Timestamp":1710246818},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710246823},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) add version field","Timestamp":1710246871},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"version and logging","Timestamp":1710246938},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) auto-activate for acceptance","Timestamp":1711039145},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-activate on Acceptance only","Timestamp":1711039692},{"Version":"0.4","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) Fix for CYC location_accuracy","Timestamp":1712654533},{"Version":"0.4","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) Fix for ALLDATA location accuracy","Timestamp":1712654568},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fox for locatin precision for CYC messages","Timestamp":1712655610},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) adding starttime to LOGREQ","Timestamp":1714640506},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Adding endtime to REQLOG","Timestamp":1714640554},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1714640696},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"DisableAck","Message":"(Update) (DisableAck) hiding unused control","Timestamp":1714640747},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) hiding realtime logging as not implemented","Timestamp":1714640774},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1714640790},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1714640794},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1714640798},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1714640801},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1714640806},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714640812},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"DisableAck","Message":"(Update) (DisableAck) Reorder Group Params","Timestamp":1714640819},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714640824},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714640828},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640834},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714640842},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640848},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1714640853},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640888},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714642185},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714642190},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Check ICCID is a number","Timestamp":1714651746},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Moved ICCID check to CREATE message","Timestamp":1715247045},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Log time ranges, hide unused controls, ICCID filtering","Timestamp":1715255881},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Create) (Restarts) Add restarts count read only field","Timestamp":1716204701},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Create) (MTBR) Add MTBR field","Timestamp":1716204770},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) restarts and mtbr json parsing","Timestamp":1716206509},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716278044},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716278047},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716278051},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716278055},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716278063},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716278066},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716278069},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716278072},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) hide unused params","Timestamp":1716289251},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Disable NonMovement","Message":"(Update) (Enable Disable NonMovement) hide unused params","Timestamp":1716289267},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"period ","Message":"(Update) (period ) hide unused params","Timestamp":1716289280}],"ProtocolActionObjects":[],"Tags":[{"Id":1957,"Name":"ONeCommandSender","BackendAction":"OneCommandSender","Value":"True"},{"Id":1959,"Name":"PermitDuplicates","BackendAction":"PermitReceiverDublicates","Value":"True"}]} \ No newline at end of file +{"Id":206,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":6005,"Code":"MACB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;MACB=<>,<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;MACB=[^,;]*,[^;,]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6006,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGA-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":6006,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":true,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712654533}],"Tags":[]},{"Id":6007,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6008,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6009,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6010,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6011,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6012,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6013,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6014,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6015,"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,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6016,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6017,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6018,"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,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6019,"Code":"DISCONB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;DISCONB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;DISCONB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6020,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6021,"Code":"ALTAM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALTAM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALTAM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6022,"Code":"ATEMPB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ATEMPB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ATEMPB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6023,"Code":"ALNMB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGA-<>;<>;mid=<>;ALNMB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALNMB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6024,"Code":"BATEB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGA-<>;<>;mid=<>;BATEB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATEB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6025,"Code":"BATLB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;BATLB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;BATLB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6026,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGA-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGA-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6027,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6028,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6029,"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":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\"[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6030,"Code":"CONNB","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;CONNB;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;CONNB;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6031,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":true,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6032,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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":"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6032,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710246258},{"Type":1,"NewValue":"{\"Id\":6032,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGA-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;BATPB=<>;TEMPB=<>;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\":\"^VGA-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;BATPB=[^;;]*;TEMPB=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712654568}],"Tags":[]}],"Commands":[{"Id":4122,"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":[],"Tags":[]},{"Id":4121,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkonwn 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":[],"Tags":[]},{"Id":4120,"Name":"Reset Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"RESETB\";\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":[],"Tags":[]},{"Id":4119,"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":[],"Tags":[]},{"Id":4118,"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":[],"Tags":[]},{"Id":4117,"Name":"SetLTEParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"LTEPAR=\" + params.Bracelet.LTEParam;\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":[],"Tags":[]},{"Id":4116,"Name":"SetCommonParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"COMPAR=\" + params.Bracelet.CommonParam;\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":[],"Tags":[]},{"Id":4115,"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":[],"Tags":[]},{"Id":4114,"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":[],"Tags":[]},{"Id":4113,"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":[],"Tags":[]},{"Id":4112,"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":[],"Tags":[]},{"Id":4111,"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":[],"Tags":[]},{"Id":4110,"Name":"Reboot Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"REBOOTB\";\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":[],"Tags":[]},{"Id":4109,"Name":"SetBattery Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"BATBC=\" + params.Bracelet.LowBattery + \",\" + params.Bracelet.CriticalBattery;\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":[],"Tags":[]},{"Id":4108,"Name":"SetTemp Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"TEMPBC=\" + params.Bracelet.LowTemp + \",\" + params.Bracelet.HighTemp;\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":[],"Tags":[]},{"Id":4107,"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":[],"Tags":[]},{"Id":4106,"Name":"Set Bracelet Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"BRAPW=\" + params.Password.BraceletPW;\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":[],"Tags":[]},{"Id":4105,"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":[],"Tags":[]},{"Id":4104,"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":[],"Tags":[]},{"Id":4103,"Name":"PowerOff Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"PWRFB\";\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":[],"Tags":[]},{"Id":4102,"Name":"SetCloudParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"CLDPAR=\" + params.Bracelet.CloudParam;\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":[],"Tags":[]},{"Id":4101,"Name":"SetBLEParam Bracelet","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let command = \"BLEPAR=\" + params.Bracelet.BLEParam;\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":[],"Tags":[]},{"Id":4123,"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":[{"Type":0,"NewValue":"{\"Id\":4123,\"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":1710246421}],"Tags":[]},{"Id":4124,"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\":4124,\"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":1710246477}],"Tags":[]},{"Id":4125,"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\":4125,\"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":1710246526},{"Type":1,"NewValue":"{\"Id\":4125,\"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":1714640696}],"Tags":[]},{"Id":4126,"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\":4126,\"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":1710246587}],"Tags":[]}],"Operations":[{"Id":279,"Name":"VGA","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 switch (messageTypeLocalCode) {\n case (\"COMM\"):\n process_invent_msg(); //incoming invent commands\n break;\n case (\"MACB\"):\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\n add_params_to_output();\n break;\n case (\"REGISTER\"):\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 break;\n case (\"CREATE\"):\n let c_ble_mac = params.ble_mac;\n let c_iccid = params.iccid;\n let new_imei = params.new_imei;\n let c_message = \"VGA-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + c_ble_mac + \",\" + c_iccid + \";\";\n // sendMessageToLocalhost(c_message); \n tasks = [{\n \"name\": \"VGA\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGA\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGA\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": c_message\n }),\n \"order\": 2\n }]\n break;\n default:\n // all other general messages\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n add_params_to_output();\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 // modify to return the object that contains your data\n return msg;\n\n function add_params_to_output() {\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 //if (params.temp_bracelet) {\n // AddValue('oysta_labels', 'DegC');\n // AddValue('single_column_value', params.temp_bracelet);\n //}\n }\n\n function process_invent_msg() {\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 \"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 \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"CGFBR\":\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\n let commonParam = addEscapeChar(details.Data.ComPar);\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\n let cloudParam = addEscapeChar(details.Data.CldPar);\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\n let lteParam = addEscapeChar(details.Data.LtePar);\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\n let bleParam = addEscapeChar(details.Data.BlePar);\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\n break;\n case \"REBOOTB\":\n AddConfig(configIds.Bracelet.Reboot, 'true');\n break;\n case \"PWRFB\":\n AddConfig(configIds.Bracelet.PowerOff, 'true');\n break;\n case \"RESETB\":\n AddConfig(configIds.Bracelet.Reset, 'true');\n break;\n case \"BRAPWUPDATE\":\n AddValue(\"PasswordRecoveryFrom\", details.Data.ImeiOld);\n // get password from old device, then set\n AddConfig(configIds.Password.BraceletPW, \"DoNotChange123\" // replace with recovered password, for test this is DoNotChange123\n )\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(\" \");\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 }\n\n function addEscapeChar(json) {\n if (json === undefined) {\n return undefined;\n }\n let outStr = \"\";\n let jsonStr = JSON.stringify(json);\n for (let c of jsonStr) {\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\n } else {\n outStr += c;\n }\n };\n return outStr;\n }\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,\n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, 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\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1710246336},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1711039145},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1714651746},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(c_iccid)) {\\n c_iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1715247045},{"Type":1,"NewValue":"{\"Id\":279,\"Name\":\"VGA\",\"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 switch (messageTypeLocalCode) {\\n case (\\\"COMM\\\"):\\n process_invent_msg(); //incoming invent commands\\n break;\\n case (\\\"MACB\\\"):\\n AddConfig(configIds.DeviceConfig.BRAMAC, params.bracelet_mac);\\n AddConfig(configIds.DeviceConfig.braceletIMEI, params.bracelet_imei);\\n add_params_to_output();\\n break;\\n case (\\\"REGISTER\\\"):\\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 break;\\n case (\\\"CREATE\\\"):\\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 c_ble_mac = params.ble_mac;\\n let c_iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(c_iccid)) {\\n c_iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let c_message = \\\"VGA-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + c_ble_mac + \\\",\\\" + c_iccid + \\\";\\\";\\n // sendMessageToLocalhost(c_message); \\n tasks = [{\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGA\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGA\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": c_message\\n }),\\n \\\"order\\\": 2\\n }]\\n // }\\n break;\\n case (\\\"ALLDATA\\\"):\\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 break;\\n default:\\n // all other general messages\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n add_params_to_output();\\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 // modify to return the object that contains your data\\n return msg;\\n\\n function add_params_to_output() {\\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 // if (params.temp_bracelet){\\n // AddValue('oysta_labels', 'DegC');\\n // AddValue('single_column_value', params.temp_bracelet);\\n // }\\n }\\n\\n function process_invent_msg() {\\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 \\\"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 \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"CGFBR\\\":\\n AddConfig(configIds.Bracelet.LowTemp, details.Data.TempLow);\\n AddConfig(configIds.Bracelet.HighTemp, details.Data.TempHigh);\\n AddConfig(configIds.Bracelet.LowBattery, details.Data.BatLow);\\n AddConfig(configIds.Bracelet.CriticalBattery, details.Data.BatCritical);\\n let commonParam = addEscapeChar(details.Data.ComPar);\\n AddConfig(configIds.Bracelet.CommonParam, commonParam);\\n let cloudParam = addEscapeChar(details.Data.CldPar);\\n AddConfig(configIds.Bracelet.CloudParam, cloudParam);\\n let lteParam = addEscapeChar(details.Data.LtePar);\\n AddConfig(configIds.Bracelet.LTEParam, lteParam);\\n let bleParam = addEscapeChar(details.Data.BlePar);\\n AddConfig(configIds.Bracelet.BLEParam, bleParam);\\n break;\\n case \\\"REBOOTB\\\":\\n AddConfig(configIds.Bracelet.Reboot, 'true');\\n break;\\n case \\\"PWRFB\\\":\\n AddConfig(configIds.Bracelet.PowerOff, 'true');\\n break;\\n case \\\"RESETB\\\":\\n AddConfig(configIds.Bracelet.Reset, 'true');\\n break;\\n case \\\"BRAPWUPDATE\\\":\\n AddValue(\\\"PasswordRecoveryFrom\\\", details.Data.ImeiOld);\\n // get password from old device, then set\\n AddConfig(configIds.Password.BraceletPW, \\\"DoNotChange123\\\" // replace with recovered password, for test this is DoNotChange123\\n )\\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(\\\" \\\");\\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 }\\n\\n function addEscapeChar(json) {\\n if (json === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n let jsonStr = JSON.stringify(json);\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 34) { // replace quote with Escape quote\\n outStr = outStr + String.fromCharCode(92) + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\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 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,\\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, 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":1716206509}]}],"Groups":[{"Id":5624,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5625,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5626,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5627,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5628,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5629,"Parent":{"Id":5625,"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":5629,"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":5630,"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,"ProtocolActionObjects":[]},{"Id":5630,"Parent":{"Id":5625,"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":5629,"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":5630,"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,"ProtocolActionObjects":[]},{"Id":5631,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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,"ProtocolActionObjects":[]},{"Id":5632,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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,"ProtocolActionObjects":[]},{"Id":5633,"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":5633,"Name":"Bracelet","Json":{"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":"Bracelet","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5634,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5635,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5636,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5637,"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":5637,"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":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5638,"Parent":{"Id":5627,"Name":"Notification","Json":{"description":null,"columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5638,"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,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9692,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9692,\"Group\":{\"Id\":5629,\"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":1714640806}],"Tags":[]},{"Id":9689,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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 hte phones SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9689,\"Group\":{\"Id\":5629,\"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 hte phones SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640798}],"Tags":[]},{"Id":9690,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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 that is set when the Invent platform has acknowledged the activation of the device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9690,\"Group\":{\"Id\":5629,\"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 that is set when the Invent platform has acknowledged the activation of the device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640801}],"Tags":[]},{"Id":9691,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\":\"\",\"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":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9691,\"Group\":{\"Id\":5629,\"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\\\":\\\"\\\",\\\"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\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640794}],"Tags":[]},{"Id":9693,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"DisableAck","Json":"{\"name\":\"DisableAck\",\"default\":\"\",\"description\":\"Disable Ack\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Disable Acks for testing to simulate IntelliCare failure.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9693,\"Group\":{\"Id\":5629,\"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\":\"DisableAck\",\"Json\":\"{\\\"name\\\":\\\"DisableAck\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Disable Ack\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Disable Acks for testing to simulate IntelliCare failure.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640747},{"Type":1,"NewValue":"{\"Id\":9693,\"Group\":{\"Id\":5629,\"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\":\"DisableAck\",\"Json\":\"{\\\"name\\\":\\\"DisableAck\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Disable Ack\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Disable Acks for testing to simulate IntelliCare failure.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640819}],"Tags":[]},{"Id":9666,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9666,\"Group\":{\"Id\":5629,\"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":1714640812}],"Tags":[]},{"Id":9686,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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\":\"Phone BLE 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\":\"The Bluetooth MAC address of the phone.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9687,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"BRA MAC","Json":"{\"name\":\"BRA MAC\",\"default\":\"\",\"description\":\"Bracelet 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\":\"The MAC address of the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9688,"Group":{"Id":5629,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5630,"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":"braceletIMEI","Json":"{\"name\":\"braceletIMEI\",\"default\":\"\",\"description\":\"Bracelet IMEI\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Readonly field containing the bracelet IMEI.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9696,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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":"BraceletPW","Json":"{\"name\":\"BraceletPW\",\"default\":\"\",\"description\":\"Bracelet Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9694,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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":[],"Tags":[]},{"Id":9695,"Group":{"Id":5630,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5625,"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":5629,"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.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9697,"Group":{"Id":5631,"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":5624,"Name":"Settings","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":5632,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9685,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9701,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9700,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9699,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9698,"Group":{"Id":5632,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5633,"Name":"Bracelet","Json":{"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":[],"Tags":[]},{"Id":9671,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LTEParam","Json":"{\"name\":\"LTEParam\",\"default\":\"\",\"description\":\"LTE Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"LTE Parameters as defined by SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":10}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9672,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"BLEParam","Json":"{\"name\":\"BLEParam\",\"default\":\"\",\"description\":\"BLE Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"BLE Parameters as defined in SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":8}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9673,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"Reboot","Json":"{\"name\":\"Reboot\",\"default\":\"\",\"description\":\"Reboot\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Reboots the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":5}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9674,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"PowerOff","Json":"{\"name\":\"PowerOff\",\"default\":\"\",\"description\":\"Power Off\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Power off the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9675,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Resets the bracelet.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":6}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9682,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"HighTemp","Json":"{\"name\":\"HighTemp\",\"default\":\"\",\"description\":\"High Temperature\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Temperature above which a temperature alarm will be raised.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9684,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LowTemp","Json":"{\"name\":\"LowTemp\",\"default\":\"\",\"description\":\"Low Temperature\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Threshold below which a temperature alert will be triggered.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9667,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"LowBattery","Json":"{\"name\":\"LowBattery\",\"default\":\"\",\"description\":\"Low Battery Threshold\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9668,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CriticalBattery","Json":"{\"name\":\"CriticalBattery\",\"default\":\"\",\"description\":\"Critical Battery Threshold\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9669,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CommonParam","Json":"{\"name\":\"CommonParam\",\"default\":\"\",\"description\":\"Common Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Common parameters as defined in the SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":7}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9670,"Group":{"Id":5633,"Name":"Bracelet","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5624,"Name":"Settings","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":5631,"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":5632,"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":"CloudParam","Json":"{\"name\":\"CloudParam\",\"default\":\"\",\"description\":\"Cloud Parameters\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Cloud Parameters as defined by SDK as JSON string.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":9}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9677,"Group":{"Id":5634,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5635,"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":[]},{"Id":5636,"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":5637,"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 No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"false\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9677,\"Group\":{\"Id\":5634,\"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\":[]},\"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\":[],\"Tags\":[]}","Timestamp":1716289251}],"Tags":[]},{"Id":9676,"Group":{"Id":5634,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5635,"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":[]},{"Id":5636,"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":5637,"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":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":null,\"integerOnly\":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":[],"Tags":[]},{"Id":9678,"Group":{"Id":5635,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5636,"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":5637,"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\":\"\",\"integerOnly\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9678,\"Group\":{\"Id\":5635,\"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\":\"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\":[],\"Tags\":[]}","Timestamp":1716289280}],"Tags":[]},{"Id":9679,"Group":{"Id":5635,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5636,"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":5637,"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\":\"false\",\"description\":null,\"type\":\"enable\",\"order\":0,\"suffix\":null,\"prefix\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9679,\"Group\":{\"Id\":5635,\"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\":\"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\":[],\"Tags\":[]}","Timestamp":1716289267}],"Tags":[]},{"Id":9680,"Group":{"Id":5636,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5637,"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":"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9680,\"Group\":{\"Id\":5636,\"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\":[]},\"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\":[],\"Tags\":[]}","Timestamp":1716289318}],"Tags":[]},{"Id":9683,"Group":{"Id":5637,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":[]}]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"label\":\"Production Primary\",\"value\":\"52.232.85.255:5678\"},{\"label\":\"Acceptance Primary\",\"value\":\"52.174.17.77:5678\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":0}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9681,"Group":{"Id":5637,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5628,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":5,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5634,"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":5635,"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":[]},{"Id":5636,"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":[]}]},"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\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"label\":\"Production Secondary\",\"value\":\"52.232.85.255:5678\"},{\"label\":\"Acceptance Secondary\",\"value\":\"52.174.17.77:5678\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9702,"Group":{"Id":5638,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5627,"Name":"Notification","Json":{"description":null,"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":"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":[],"Tags":[]},{"Id":9703,"Group":{"Id":5629,"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\":9703,\"Group\":{\"Id\":5629,\"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":1710246641},{"Type":0,"NewValue":"{\"Id\":9703,\"Group\":{\"Id\":5629,\"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\":4123,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"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\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710246647},{"Type":1,"NewValue":"{\"Id\":9703,\"Group\":{\"Id\":5629,\"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\\\":3}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640790}],"Tags":[]},{"Id":9703,"Group":{"Id":5629,"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":4123,"Protocol":{"Id":206,"Code":"VGA","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":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9704,"Group":{"Id":5629,"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\":9704,\"Group\":{\"Id\":5629,\"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":1710246708},{"Type":0,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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\":4126,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246712},{"Type":1,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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":1714640774},{"Type":1,"NewValue":"{\"Id\":9704,\"Group\":{\"Id\":5629,\"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\\\":10}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640824}],"Tags":[]},{"Id":9704,"Group":{"Id":5629,"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":4126,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9705,"Group":{"Id":5629,"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\":9705,\"Group\":{\"Id\":5629,\"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":1710246766},{"Type":0,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\":4125,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246770},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640834},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640848},{"Type":1,"NewValue":"{\"Id\":9705,\"Group\":{\"Id\":5629,\"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\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640888}],"Tags":[]},{"Id":9705,"Group":{"Id":5629,"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":4125,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9706,"Group":{"Id":5629,"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\":9706,\"Group\":{\"Id\":5629,\"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":1710246818},{"Type":0,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\":4124,\"Protocol\":{\"Id\":206,\"Code\":\"VGA\",\"Version\":\"0.2\",\"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":1710246823},{"Type":1,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278047},{"Type":1,"NewValue":"{\"Id\":9706,\"Group\":{\"Id\":5629,\"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\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278063}],"Tags":[]},{"Id":9706,"Group":{"Id":5629,"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":4124,"Protocol":{"Id":206,"Code":"VGA","Version":"0.2","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":[]},{"Id":9707,"Group":{"Id":5629,"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\":9707,\"Group\":{\"Id\":5629,\"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":1710246871},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640853},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":16}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278051},{"Type":1,"NewValue":"{\"Id\":9707,\"Group\":{\"Id\":5629,\"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\\\":15}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278066}],"Tags":[]},{"Id":11133,"Group":{"Id":5629,"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\":11133,\"Group\":{\"Id\":5629,\"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":1714640506},{"Type":1,"NewValue":"{\"Id\":11133,\"Group\":{\"Id\":5629,\"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\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714640842},{"Type":1,"NewValue":"{\"Id\":11133,\"Group\":{\"Id\":5629,\"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\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714642185}],"Tags":[]},{"Id":11134,"Group":{"Id":5629,"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\":11134,\"Group\":{\"Id\":5629,\"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":1714640554},{"Type":1,"NewValue":"{\"Id\":11134,\"Group\":{\"Id\":5629,\"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":1714640828},{"Type":1,"NewValue":"{\"Id\":11134,\"Group\":{\"Id\":5629,\"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\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714642190}],"Tags":[]},{"Id":11226,"Group":{"Id":5629,"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":"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\":11226,\"Group\":{\"Id\":5629,\"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\":\"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":1716204701},{"Type":1,"NewValue":"{\"Id\":11226,\"Group\":{\"Id\":5629,\"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\":\"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\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278055},{"Type":1,"NewValue":"{\"Id\":11226,\"Group\":{\"Id\":5629,\"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\":\"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":1716278069}],"Tags":[]},{"Id":11227,"Group":{"Id":5629,"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":"MTBR","Json":"{\"name\":\"MTBR\",\"default\":\"\",\"description\":\"Mean Time Between Restarts\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"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\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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":1716204770},{"Type":1,"NewValue":"{\"Id\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278044},{"Type":1,"NewValue":"{\"Id\":11227,\"Group\":{\"Id\":5629,\"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\":\"MTBR\",\"Json\":\"{\\\"name\\\":\\\"MTBR\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Mean Time Between Restarts\\\",\\\"type\\\":\\\"number\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"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\\\":17}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1716278072}],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) add ALLDATA messagetype","Timestamp":1710246258},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Ops update - ALLDATA processing","Timestamp":1710246336},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) create CLRBUF command","Timestamp":1710246421},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) create REQDATA command","Timestamp":1710246477},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) create REQLOG command","Timestamp":1710246526},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) create RTLOG command","Timestamp":1710246587},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) Add ClearBuffer button","Timestamp":1710246641},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710246647},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) add RTLog checkbox","Timestamp":1710246708},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710246712},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) add Request Log button","Timestamp":1710246766},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710246770},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) add request Data command","Timestamp":1710246818},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710246823},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) add version field","Timestamp":1710246871},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"version and logging","Timestamp":1710246938},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) auto-activate for acceptance","Timestamp":1711039145},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-activate on Acceptance only","Timestamp":1711039692},{"Version":"0.4","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) Fix for CYC location_accuracy","Timestamp":1712654533},{"Version":"0.4","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) Fix for ALLDATA location accuracy","Timestamp":1712654568},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fox for locatin precision for CYC messages","Timestamp":1712655610},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) adding starttime to LOGREQ","Timestamp":1714640506},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Adding endtime to REQLOG","Timestamp":1714640554},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1714640696},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"DisableAck","Message":"(Update) (DisableAck) hiding unused control","Timestamp":1714640747},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) hiding realtime logging as not implemented","Timestamp":1714640774},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1714640790},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1714640794},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1714640798},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1714640801},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1714640806},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714640812},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"DisableAck","Message":"(Update) (DisableAck) Reorder Group Params","Timestamp":1714640819},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714640824},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714640828},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640834},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714640842},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640848},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1714640853},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714640888},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714642185},{"Version":"0.5","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714642190},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Check ICCID is a number","Timestamp":1714651746},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) Moved ICCID check to CREATE message","Timestamp":1715247045},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Log time ranges, hide unused controls, ICCID filtering","Timestamp":1715255881},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Create) (Restarts) Add restarts count read only field","Timestamp":1716204701},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Create) (MTBR) Add MTBR field","Timestamp":1716204770},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Operation","Name":"VGA","Message":"(Update) (VGA) restarts and mtbr json parsing","Timestamp":1716206509},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716278044},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716278047},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716278051},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716278055},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1716278063},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1716278066},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Restarts","Message":"(Update) (Restarts) Reorder Group Params","Timestamp":1716278069},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"MTBR","Message":"(Update) (MTBR) Reorder Group Params","Timestamp":1716278072},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Disable No Activity","Message":"(Update) (Enable Disable No Activity) hide unused params","Timestamp":1716289251},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Disable NonMovement","Message":"(Update) (Enable Disable NonMovement) hide unused params","Timestamp":1716289267},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"period ","Message":"(Update) (period ) hide unused params","Timestamp":1716289280},{"Version":"0.6","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) hide unused params","Timestamp":1716289318}],"ProtocolActionObjects":[],"Tags":[{"Id":1957,"Name":"ONeCommandSender","BackendAction":"OneCommandSender","Value":"True"},{"Id":1959,"Name":"PermitDuplicates","BackendAction":"PermitReceiverDublicates","Value":"True"}]} \ No newline at end of file