Phân loại Node
Last updated
Last updated
Node kiểm tra các trường có trong msg và metadata.
Message data: trường cần kiểm tra trong msg, có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Message metadata: trường cần kiểm tra trong metadata, có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Check that all selected keys are present: điều kiện AND/OR của kiểm tra.
Nếu Check that all selected keys are present được bật, chỉ cần một trường khai báo bị thiếu thì Node sẽ trả về Relation False.
Ngược lại nếu tắt Check that all selected keys are present, nếu tất cả trường khai báo bị thiếu thì Node sẽ trả về Relation False.
Node sẽ lấy dữ liệu kinh độ, vĩ độ từ msg hoặc metadata, rồi kiểm tra tọa độ có nằm trong vùng an toàn đã được cấu hình.
Node sẽ mặc định lấy dữ liệu vùng an toàn từ metadata. Nếu Fetch perimeter information from message metadata tắt, nhà phát triển cần cấu hình vùng an toàn ngay trong Node.
Dữ liệu vùng an toàn lấy từ metadata: - Hình đa giác: metadata phải có trường perimeter. - Hình tròn: metadata cần có các trường centerLatitude, centerLongitude, range, rangeUnit.
// Polygon
"perimeter": [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]]
// Circle
"perimeter": {
"centerLatitude": "value1"
"centerLongitude": "value2"
"range": "value3"
"rangeUnit": "METER" // or KILOMETER, FOOT, MILE, NAUTICLE_MILE
}
Dữ liệu vùng an toàn được cấu hình trong Node: - Hình đa giác: cần nhập mảng chứa các mảng [kinh độ, vĩ độ] vào Polygon definition. - Hình tròn: cần nhập dữ liệu cho Center latitude, Center longitude, Range, Range units.
Node sẽ trả về Relation Failure nếu:
msg và metadata không chứa trường được khai báo cho latitude và longitude.
Thiết định nghĩa cho vùng an toàn.
Node thực hiện kiểm tra logic với bản tin truyền đến và trả về Relation True/False.
Node sẽ tương đương một JavaScript function với 3 biến đầu vào: msg, metadata, msgType.
Node cần return giá trị True/False, có thể lấy được từ mệnh đề hoặc giá trị Truthy/Falsy.
Một ví dụ sử dụng Script Node:
// Check whether the soap response from previous SOAP API Request has the errorCode
return metadata.soap_response.indexOf("R3650172") > -1;
Node sẽ thực hiển kiểm tra logic và trả về một hoặc nhiều Relation.
Node sẽ tương đương một JavaScript function với 3 biến đầu vào: msg, metadata, msgType.
Node cần return một mảng chứa các string, và sẽ trả về các Relation tương ứng các string trong mảng đó.
Một ví dụ sử dụng Switch Node:
jmetadata['node'] = "Device Validate VTAG Plan";
let {pronb, alertnb} = msg.tpp;
if (metadata.ss_imei == "1234567891") return ["Available"];
if (pronb == "" || pronb == "VTAG") return ["Unregistered", "SaveData"];
else if (alertnb == "0" || alertnb == "1") return ["Available"];
else return ["Expired", "SaveData"];
Node lấy giá trị attribute của Device được nhắc tới trong metadata.
Để sử dụng Node, người sử dụng cần khai báo deviceID trong metadata tương ứng ID của Device, và điền tên Attribute muốn lấy giá trị:
Client attributes: lấy giá trị các attribute với SCOPE Client.
Server attributes: lấy giá trị các attribute với SCOPE Server.
Shared attributes: lấy giá trị các attribute với SCOPE Shared.
Tell Failure: khi bật, nếu một trong các attribute khai báo không tìm thấy thì sẽ trả về Relation Failure.
Các trường thông tin trên đều có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Giá trị Attribute được lưu vào trong metadata dạng string với trường có tên tùy thuộc vào SCOPE như sau:
Shared Attribute → shared_ + tên attribute
Client Attribute → cs_ + tên attribute
Server Attribute → ss_ + tên attribute
Node lấy giá trị attribute của Group được nhắc tới trong metadata.
Để sử dụng Node, người sử dụng cần khai báo group_id trong metadata tương ứng ID của Group, và điền tên Attribute muốn lấy giá trị:
Client attributes: lấy giá trị các attribute với SCOPE Client.
Server attributes: lấy giá trị các attribute với SCOPE Server.
Shared attributes: lấy giá trị các attribute với SCOPE Shared.
Tell Failure: khi bật, nếu một trong các attribute khai báo không tìm thấy thì sẽ trả về Relation Failure.
Các trường thông tin trên đều có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Giá trị Attribute được lưu vào trong metadata dạng string với trường có tên tùy thuộc vào SCOPE như sau:
Shared Attribute → shared_ + tên attribute
Client Attribute → cs_ + tên attribute
Server Attribute → ss_ + tên attribute
Node lấy giá trị attribute của Organization được nhắc tới trong metadata.
Để sử dụng Node, người sử dụng cần khai báo org_id trong metadata tương ứng ID của Organization, và điền tên Attribute muốn lấy giá trị:
Client attributes: lấy giá trị các attribute với SCOPE Client.
Server attributes: lấy giá trị các attribute với SCOPE Server.
Shared attributes: lấy giá trị các attribute với SCOPE Shared.
Tell Failure: khi bật, nếu một trong các attribute khai báo không tìm thấy thì sẽ trả về Relation Failure.
Các trường thông tin trên đều có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Giá trị Attribute được lưu vào trong metadata dạng string với trường có tên tùy thuộc vào SCOPE như sau:
Shared Attribute → shared_ + tên attribute
Client Attribute → cs_ + tên attribute
Server Attribute → ss_ + tên attribute
Node sẽ lấy tìm tất cả Attribute thuộc danh sách Entity ID được truyền vào ở trường req_multiple_entity trong metadata và trả về trường res_attributes trong metadata.
Người dùng cần đưa vào metadata trường req_multiple_entity:
// metadata
{"req_multiple_entity": "{\"entity_type\":\"DEVICE\",\"entity_ids\":[\"2ad6be70-09bf-4156-872c-8b18274130aa\"]}"}
// JSON Parsed
{
"req_multiple_entity": {
"entity_type": "DEVICE",
"entity_ids": ["2ad6be70-09bf-4156-872c-8b18274130aa"]
}
}
entity_type: loại Entity cần lấy thông tin, có thể nhập DEVICE, GROUP, ORGANIZATION, USER.
entity_ids: mảng chứa các Entity ID cần lấy thông tin.
Dữ liệu trả về được để trong trường res_attributes:
// metadata
{"res_attributes": "{\"attributes\":[{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"ack\",\"boolV\":true,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"T\\\":1652862749,\\\"Type\\\":\\\"DWFC\\\"}\",\"lastUpdateTs\":1652862749110,\"valueAsString\":\"true\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"avatar\",\"boolV\":false,\"strV\":\"http://vttapi.innoway.vn/file/f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F456af15d-c3f5-487e-b1c2-2fa44f88ec28-1655688968467.jpg\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1655688969625,\"valueAsString\":\"http://vttapi.innoway.vn/file/f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F456af15d-c3f5-487e-b1c2-2fa44f88ec28-1655688968467.jpg\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"avatar_update\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031578,\"valueAsString\":\"0.0\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"battery\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":49.0,\"jsonV\":\"{\\\"B\\\":49,\\\"C\\\":[{\\\"C\\\":452,\\\"ID\\\":79413195,\\\"L\\\":42900,\\\"N\\\":4,\\\"S\\\":-91}],\\\"Cn\\\":\\\"nb\\\",\\\"RR\\\":10,\\\"T\\\":1655381629,\\\"Type\\\":\\\"DASP\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"W\\\":[{\\\"M\\\":\\\"d0:59:19:9c:c6:ab\\\",\\\"S\\\":-30},{\\\"M\\\":\\\"d0:59:19:9d:c4:63\\\",\\\"S\\\":-48},{\\\"M\\\":\\\"28:ee:52:ea:8e:2e\\\",\\\"S\\\":-61},{\\\"M\\\":\\\"2e:30:5b:5d:4f:79\\\",\\\"S\\\":-68},{\\\"M\\\":\\\"88:c3:97:52:50:aa\\\",\\\"S\\\":-75},{\\\"M\\\":\\\"ec:84:b4:bb:70:d\\\",\\\"S\\\":-81},{\\\"M\\\":\\\"3c:7c:3f:40:b4:68\\\",\\\"S\\\":-85},{\\\"M\\\":\\\"4a:4:a2:f5:9b:4c\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"68:ff:7b:21:9f:50\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"cc:2d:21:d8:b8:c1\\\",\\\"S\\\":-87}],\\\"r\\\":-11,\\\"ss\\\":-91}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"49.0\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"config\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"CC\\\":1,\\\"M\\\":1,\\\"P\\\":5,\\\"T\\\":1655280810798,\\\"Type\\\":\\\"C\\\"}\",\"lastUpdateTs\":1655280811261,\"valueAsString\":\"{\\\"CC\\\":1,\\\"M\\\":1,\\\"P\\\":5,\\\"T\\\":1655280810798,\\\"Type\\\":\\\"C\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"connection\",\"boolV\":false,\"strV\":\"nb\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"nb\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"control\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031578,\"valueAsString\":\"{}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"devconf\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":69,\\\"CC\\\":1,\\\"Cn\\\":\\\"2g\\\",\\\"MMC\\\":{\\\"M\\\":1,\\\"P\\\":5},\\\"N\\\":3,\\\"RR\\\":10,\\\"T\\\":1655289350,\\\"Type\\\":\\\"DCF\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"r\\\":0,\\\"ss\\\":-84}\",\"lastUpdateTs\":1655289350009,\"valueAsString\":\"{\\\"B\\\":69,\\\"CC\\\":1,\\\"Cn\\\":\\\"2g\\\",\\\"MMC\\\":{\\\"M\\\":1,\\\"P\\\":5},\\\"N\\\":3,\\\"RR\\\":10,\\\"T\\\":1655289350,\\\"Type\\\":\\\"DCF\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"r\\\":0,\\\"ss\\\":-84}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"firmware_version\",\"boolV\":false,\"strV\":\"S3.1.3\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":49,\\\"C\\\":[{\\\"C\\\":452,\\\"ID\\\":79413195,\\\"L\\\":42900,\\\"N\\\":4,\\\"S\\\":-91}],\\\"Cn\\\":\\\"nb\\\",\\\"RR\\\":10,\\\"T\\\":1655381629,\\\"Type\\\":\\\"DASP\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"W\\\":[{\\\"M\\\":\\\"d0:59:19:9c:c6:ab\\\",\\\"S\\\":-30},{\\\"M\\\":\\\"d0:59:19:9d:c4:63\\\",\\\"S\\\":-48},{\\\"M\\\":\\\"28:ee:52:ea:8e:2e\\\",\\\"S\\\":-61},{\\\"M\\\":\\\"2e:30:5b:5d:4f:79\\\",\\\"S\\\":-68},{\\\"M\\\":\\\"88:c3:97:52:50:aa\\\",\\\"S\\\":-75},{\\\"M\\\":\\\"ec:84:b4:bb:70:d\\\",\\\"S\\\":-81},{\\\"M\\\":\\\"3c:7c:3f:40:b4:68\\\",\\\"S\\\":-85},{\\\"M\\\":\\\"4a:4:a2:f5:9b:4c\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"68:ff:7b:21:9f:50\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"cc:2d:21:d8:b8:c1\\\",\\\"S\\\":-87}],\\\"r\\\":-11,\\\"ss\\\":-91}\",\"lastUpdateTs\":1655381629102,\"valueAsString\":\"S3.1.3\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"geo_fencing\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"c\\\":true,\\\"fences\\\":[{\\\"inside\\\":false,\\\"lat\\\":21.030201084137587,\\\"lng\\\":105.82693386822939,\\\"name\\\":\\\"cty\\\",\\\"radius\\\":167},{\\\"inside\\\":false,\\\"lat\\\":20.988890529803804,\\\"lng\\\":105.85477620363235,\\\"name\\\":\\\"nha\\\",\\\"radius\\\":300}]}\",\"lastUpdateTs\":1655381636277,\"valueAsString\":\"{\\\"c\\\":true,\\\"fences\\\":[{\\\"inside\\\":false,\\\"lat\\\":21.030201084137587,\\\"lng\\\":105.82693386822939,\\\"name\\\":\\\"cty\\\",\\\"radius\\\":167},{\\\"inside\\\":false,\\\"lat\\\":20.988890529803804,\\\"lng\\\":105.85477620363235,\\\"name\\\":\\\"nha\\\",\\\"radius\\\":300}]}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"gps\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":48,\\\"CC\\\":1,\\\"Cn\\\":\\\"nb\\\",\\\"MMC\\\":{\\\"M\\\":1,\\\"P\\\":5},\\\"N\\\":3,\\\"RR\\\":10,\\\"T\\\":1655719039,\\\"Type\\\":\\\"GET\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"r\\\":-14,\\\"ss\\\":-83}\",\"lastUpdateTs\":1655719039201,\"valueAsString\":\"{\\\"B\\\":48,\\\"CC\\\":1,\\\"Cn\\\":\\\"nb\\\",\\\"MMC\\\":{\\\"M\\\":1,\\\"P\\\":5},\\\"N\\\":3,\\\"RR\\\":10,\\\"T\\\":1655719039,\\\"Type\\\":\\\"GET\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"r\\\":-14,\\\"ss\\\":-83}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"id\",\"boolV\":false,\"strV\":\"MAN02ND00160\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031630,\"valueAsString\":\"MAN02ND00160\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"imei\",\"boolV\":false,\"strV\":\"2202654645\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648307575932,\"valueAsString\":\"2202654645\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"last_update\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":1.655381636164E12,\"jsonV\":\"{}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"1.655381636164E12\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"lat\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031578,\"valueAsString\":\"0.0\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"location\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"accuracy\\\":19,\\\"address\\\":{\\\"district\\\":{\\\"id\\\":\\\"003\\\",\\\"name\\\":\\\"Tây Hồ\\\"},\\\"province\\\":{\\\"id\\\":\\\"01\\\",\\\"name\\\":\\\"Hà Nội\\\"},\\\"ward\\\":{\\\"id\\\":\\\"00094\\\",\\\"name\\\":\\\"Nhật Tân\\\"}},\\\"lat\\\":21.067764,\\\"lon\\\":105.811215,\\\"type\\\":\\\"ASP\\\"}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"{\\\"accuracy\\\":19,\\\"address\\\":{\\\"district\\\":{\\\"id\\\":\\\"003\\\",\\\"name\\\":\\\"Tây Hồ\\\"},\\\"province\\\":{\\\"id\\\":\\\"01\\\",\\\"name\\\":\\\"Hà Nội\\\"},\\\"ward\\\":{\\\"id\\\":\\\"00094\\\",\\\"name\\\":\\\"Nhật Tân\\\"}},\\\"lat\\\":21.067764,\\\"lon\\\":105.811215,\\\"type\\\":\\\"ASP\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"logging\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"message\\\":{\\\"CC\\\":1,\\\"M\\\":1,\\\"N\\\":3,\\\"P\\\":5,\\\"T\\\":\\\"1655720393\\\",\\\"Type\\\":\\\"C\\\",\\\"_pt\\\":1655719039},\\\"topic\\\":\\\"control\\\"}\",\"lastUpdateTs\":1655720393287,\"valueAsString\":\"{\\\"message\\\":{\\\"CC\\\":1,\\\"M\\\":1,\\\"N\\\":3,\\\"P\\\":5,\\\"T\\\":\\\"1655720393\\\",\\\"Type\\\":\\\"C\\\",\\\"_pt\\\":1655719039},\\\"topic\\\":\\\"control\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"lon\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031578,\"valueAsString\":\"0.0\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"message\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":49,\\\"Cn\\\":\\\"nb\\\",\\\"T\\\":1655381629,\\\"V\\\":\\\"S3.1.3\\\",\\\"accuracy\\\":19,\\\"address\\\":{\\\"district\\\":{\\\"id\\\":\\\"003\\\",\\\"name\\\":\\\"Tây Hồ\\\"},\\\"province\\\":{\\\"id\\\":\\\"01\\\",\\\"name\\\":\\\"Hà Nội\\\"},\\\"ward\\\":{\\\"id\\\":\\\"00094\\\",\\\"name\\\":\\\"Nhật Tân\\\"}},\\\"lat\\\":21.067764,\\\"lon\\\":105.811215,\\\"r\\\":-11,\\\"ss\\\":-91,\\\"status\\\":{\\\"nb\\\":1,\\\"state\\\":2},\\\"ts\\\":1655381636,\\\"type\\\":\\\"ASP\\\",\\\"uwL\\\":\\\"\\\"}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"{\\\"B\\\":49,\\\"Cn\\\":\\\"nb\\\",\\\"T\\\":1655381629,\\\"V\\\":\\\"S3.1.3\\\",\\\"accuracy\\\":19,\\\"address\\\":{\\\"district\\\":{\\\"id\\\":\\\"003\\\",\\\"name\\\":\\\"Tây Hồ\\\"},\\\"province\\\":{\\\"id\\\":\\\"01\\\",\\\"name\\\":\\\"Hà Nội\\\"},\\\"ward\\\":{\\\"id\\\":\\\"00094\\\",\\\"name\\\":\\\"Nhật Tân\\\"}},\\\"lat\\\":21.067764,\\\"lon\\\":105.811215,\\\"r\\\":-11,\\\"ss\\\":-91,\\\"status\\\":{\\\"nb\\\":1,\\\"state\\\":2},\\\"ts\\\":1655381636,\\\"type\\\":\\\"ASP\\\",\\\"uwL\\\":\\\"\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"movement_status\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"start\\\":0,\\\"stop\\\":1}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"{\\\"start\\\":0,\\\"stop\\\":1}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"msg_type\",\"boolV\":false,\"strV\":\"route\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"route\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"_name\",\"boolV\":false,\"strV\":\"Tom\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1655688974185,\"valueAsString\":\"Tom\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"owner\",\"boolV\":false,\"strV\":\"0976008008\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1652862714412,\"valueAsString\":\"0976008008\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"paired\",\"boolV\":true,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"T\\\":1652862749,\\\"Type\\\":\\\"DWFC\\\"}\",\"lastUpdateTs\":1652862749110,\"valueAsString\":\"true\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"pair_ts\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":1.652862714391E12,\"jsonV\":\"{\\\"geo\\\":1,\\\"mgeo\\\":0,\\\"msos\\\":1,\\\"mss\\\":0,\\\"sos\\\":1,\\\"ss\\\":1}\",\"lastUpdateTs\":1652862714412,\"valueAsString\":\"1.652862714391E12\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"previous_msg\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"T\\\":1655719039,\\\"Type\\\":\\\"GET\\\"}\",\"lastUpdateTs\":1655719039201,\"valueAsString\":\"{\\\"T\\\":1655719039,\\\"Type\\\":\\\"GET\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"retries\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":447.0,\"jsonV\":\"{\\\"nb\\\":0,\\\"state\\\":2}\",\"lastUpdateTs\":1655353130201,\"valueAsString\":\"447.0\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"sim\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{}\",\"lastUpdateTs\":1648113031578,\"valueAsString\":\"{}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"status\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"nb\\\":0,\\\"state\\\":2}\",\"lastUpdateTs\":1655719039201,\"valueAsString\":\"{\\\"nb\\\":0,\\\"state\\\":2}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"tpp\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"alertnb\\\":\\\"0\\\",\\\"balnb\\\":30000,\\\"expnb\\\":\\\"28/06/2022\\\",\\\"imsinb\\\":\\\"452040339022769\\\",\\\"pronb\\\":\\\"12VTAG25\\\",\\\"simnb\\\":\\\"393639884\\\"}\",\"lastUpdateTs\":1655720094201,\"valueAsString\":\"{\\\"alertnb\\\":\\\"0\\\",\\\"balnb\\\":30000,\\\"expnb\\\":\\\"28/06/2022\\\",\\\"imsinb\\\":\\\"452040339022769\\\",\\\"pronb\\\":\\\"12VTAG25\\\",\\\"simnb\\\":\\\"393639884\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"track\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"id\\\":\\\"c94d0c5f-5e18-4220-b38f-1f7710615b25\\\",\\\"name\\\":\\\"29D124615\\\"}\",\"lastUpdateTs\":1654483368714,\"valueAsString\":\"{\\\"id\\\":\\\"c94d0c5f-5e18-4220-b38f-1f7710615b25\\\",\\\"name\\\":\\\"29D124615\\\"}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"update\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"nb\\\":0,\\\"state\\\":0}\",\"lastUpdateTs\":1650545837190,\"valueAsString\":\"false\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"usage_config\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"geo\\\":1,\\\"mgeo\\\":1,\\\"msos\\\":1,\\\"mss\\\":0,\\\"sos\\\":1,\\\"ss\\\":1}\",\"lastUpdateTs\":1654238730148,\"valueAsString\":\"{\\\"geo\\\":1,\\\"mgeo\\\":1,\\\"msos\\\":1,\\\"mss\\\":0,\\\"sos\\\":1,\\\"ss\\\":1}\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"version\",\"boolV\":false,\"strV\":\"S3.1.3\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":49,\\\"C\\\":[{\\\"C\\\":452,\\\"ID\\\":79413195,\\\"L\\\":42900,\\\"N\\\":4,\\\"S\\\":-91}],\\\"Cn\\\":\\\"nb\\\",\\\"RR\\\":10,\\\"T\\\":1655381629,\\\"Type\\\":\\\"DASP\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"W\\\":[{\\\"M\\\":\\\"d0:59:19:9c:c6:ab\\\",\\\"S\\\":-30},{\\\"M\\\":\\\"d0:59:19:9d:c4:63\\\",\\\"S\\\":-48},{\\\"M\\\":\\\"28:ee:52:ea:8e:2e\\\",\\\"S\\\":-61},{\\\"M\\\":\\\"2e:30:5b:5d:4f:79\\\",\\\"S\\\":-68},{\\\"M\\\":\\\"88:c3:97:52:50:aa\\\",\\\"S\\\":-75},{\\\"M\\\":\\\"ec:84:b4:bb:70:d\\\",\\\"S\\\":-81},{\\\"M\\\":\\\"3c:7c:3f:40:b4:68\\\",\\\"S\\\":-85},{\\\"M\\\":\\\"4a:4:a2:f5:9b:4c\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"68:ff:7b:21:9f:50\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"cc:2d:21:d8:b8:c1\\\",\\\"S\\\":-87}],\\\"r\\\":-11,\\\"ss\\\":-91}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"S3.1.3\"},{\"entityType\":\"DEVICE\",\"entityId\":\"456af15d-c3f5-487e-b1c2-2fa44f88ec28\",\"scope\":\"SCOPE_SERVER\",\"key\":\"wificell\",\"boolV\":false,\"strV\":\"\",\"longV\":0,\"dblV\":0.0,\"jsonV\":\"{\\\"B\\\":49,\\\"C\\\":[{\\\"C\\\":452,\\\"ID\\\":79413195,\\\"L\\\":42900,\\\"N\\\":4,\\\"S\\\":-91}],\\\"Cn\\\":\\\"nb\\\",\\\"RR\\\":10,\\\"T\\\":1655381629,\\\"Type\\\":\\\"DASP\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"W\\\":[{\\\"M\\\":\\\"d0:59:19:9c:c6:ab\\\",\\\"S\\\":-30},{\\\"M\\\":\\\"d0:59:19:9d:c4:63\\\",\\\"S\\\":-48},{\\\"M\\\":\\\"28:ee:52:ea:8e:2e\\\",\\\"S\\\":-61},{\\\"M\\\":\\\"2e:30:5b:5d:4f:79\\\",\\\"S\\\":-68},{\\\"M\\\":\\\"88:c3:97:52:50:aa\\\",\\\"S\\\":-75},{\\\"M\\\":\\\"ec:84:b4:bb:70:d\\\",\\\"S\\\":-81},{\\\"M\\\":\\\"3c:7c:3f:40:b4:68\\\",\\\"S\\\":-85},{\\\"M\\\":\\\"4a:4:a2:f5:9b:4c\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"68:ff:7b:21:9f:50\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"cc:2d:21:d8:b8:c1\\\",\\\"S\\\":-87}],\\\"r\\\":-11,\\\"ss\\\":-91}\",\"lastUpdateTs\":1655381629112,\"valueAsString\":\"{\\\"B\\\":49,\\\"C\\\":[{\\\"C\\\":452,\\\"ID\\\":79413195,\\\"L\\\":42900,\\\"N\\\":4,\\\"S\\\":-91}],\\\"Cn\\\":\\\"nb\\\",\\\"RR\\\":10,\\\"T\\\":1655381629,\\\"Type\\\":\\\"DASP\\\",\\\"V\\\":\\\"S3.1.3\\\",\\\"W\\\":[{\\\"M\\\":\\\"d0:59:19:9c:c6:ab\\\",\\\"S\\\":-30},{\\\"M\\\":\\\"d0:59:19:9d:c4:63\\\",\\\"S\\\":-48},{\\\"M\\\":\\\"28:ee:52:ea:8e:2e\\\",\\\"S\\\":-61},{\\\"M\\\":\\\"2e:30:5b:5d:4f:79\\\",\\\"S\\\":-68},{\\\"M\\\":\\\"88:c3:97:52:50:aa\\\",\\\"S\\\":-75},{\\\"M\\\":\\\"ec:84:b4:bb:70:d\\\",\\\"S\\\":-81},{\\\"M\\\":\\\"3c:7c:3f:40:b4:68\\\",\\\"S\\\":-85},{\\\"M\\\":\\\"4a:4:a2:f5:9b:4c\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"68:ff:7b:21:9f:50\\\",\\\"S\\\":-86},{\\\"M\\\":\\\"cc:2d:21:d8:b8:c1\\\",\\\"S\\\":-87}],\\\"r\\\":-11,\\\"ss\\\":-91}\"}]}"
// JSON Parsed
{
"res_attributes": {
"attributes": [
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "ack",
"boolV": true,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"T\":1652862749,\"Type\":\"DWFC\"}",
"lastUpdateTs": 1652862749110,
"valueAsString": "true"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "avatar",
"boolV": false,
"strV": "http://vttapi.innoway.vn/file/f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F456af15d-c3f5-487e-b1c2-2fa44f88ec28-1655688968467.jpg",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1655688969625,
"valueAsString": "http://vttapi.innoway.vn/file/f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F456af15d-c3f5-487e-b1c2-2fa44f88ec28-1655688968467.jpg"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "avatar_update",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031578,
"valueAsString": "0.0"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "battery",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 49.0,
"jsonV": "{\"B\":49,\"C\":[{\"C\":452,\"ID\":79413195,\"L\":42900,\"N\":4,\"S\":-91}],\"Cn\":\"nb\",\"RR\":10,\"T\":1655381629,\"Type\":\"DASP\",\"V\":\"S3.1.3\",\"W\":[{\"M\":\"d0:59:19:9c:c6:ab\",\"S\":-30},{\"M\":\"d0:59:19:9d:c4:63\",\"S\":-48},{\"M\":\"28:ee:52:ea:8e:2e\",\"S\":-61},{\"M\":\"2e:30:5b:5d:4f:79\",\"S\":-68},{\"M\":\"88:c3:97:52:50:aa\",\"S\":-75},{\"M\":\"ec:84:b4:bb:70:d\",\"S\":-81},{\"M\":\"3c:7c:3f:40:b4:68\",\"S\":-85},{\"M\":\"4a:4:a2:f5:9b:4c\",\"S\":-86},{\"M\":\"68:ff:7b:21:9f:50\",\"S\":-86},{\"M\":\"cc:2d:21:d8:b8:c1\",\"S\":-87}],\"r\":-11,\"ss\":-91}",
"lastUpdateTs": 1655381629112,
"valueAsString": "49.0"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "config",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"CC\":1,\"M\":1,\"P\":5,\"T\":1655280810798,\"Type\":\"C\"}",
"lastUpdateTs": 1655280811261,
"valueAsString": "{\"CC\":1,\"M\":1,\"P\":5,\"T\":1655280810798,\"Type\":\"C\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "connection",
"boolV": false,
"strV": "nb",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1655381629112,
"valueAsString": "nb"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "control",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031578,
"valueAsString": "{}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "devconf",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":69,\"CC\":1,\"Cn\":\"2g\",\"MMC\":{\"M\":1,\"P\":5},\"N\":3,\"RR\":10,\"T\":1655289350,\"Type\":\"DCF\",\"V\":\"S3.1.3\",\"r\":0,\"ss\":-84}",
"lastUpdateTs": 1655289350009,
"valueAsString": "{\"B\":69,\"CC\":1,\"Cn\":\"2g\",\"MMC\":{\"M\":1,\"P\":5},\"N\":3,\"RR\":10,\"T\":1655289350,\"Type\":\"DCF\",\"V\":\"S3.1.3\",\"r\":0,\"ss\":-84}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "firmware_version",
"boolV": false,
"strV": "S3.1.3",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":49,\"C\":[{\"C\":452,\"ID\":79413195,\"L\":42900,\"N\":4,\"S\":-91}],\"Cn\":\"nb\",\"RR\":10,\"T\":1655381629,\"Type\":\"DASP\",\"V\":\"S3.1.3\",\"W\":[{\"M\":\"d0:59:19:9c:c6:ab\",\"S\":-30},{\"M\":\"d0:59:19:9d:c4:63\",\"S\":-48},{\"M\":\"28:ee:52:ea:8e:2e\",\"S\":-61},{\"M\":\"2e:30:5b:5d:4f:79\",\"S\":-68},{\"M\":\"88:c3:97:52:50:aa\",\"S\":-75},{\"M\":\"ec:84:b4:bb:70:d\",\"S\":-81},{\"M\":\"3c:7c:3f:40:b4:68\",\"S\":-85},{\"M\":\"4a:4:a2:f5:9b:4c\",\"S\":-86},{\"M\":\"68:ff:7b:21:9f:50\",\"S\":-86},{\"M\":\"cc:2d:21:d8:b8:c1\",\"S\":-87}],\"r\":-11,\"ss\":-91}",
"lastUpdateTs": 1655381629102,
"valueAsString": "S3.1.3"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "geo_fencing",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"c\":true,\"fences\":[{\"inside\":false,\"lat\":21.030201084137587,\"lng\":105.82693386822939,\"name\":\"cty\",\"radius\":167},{\"inside\":false,\"lat\":20.988890529803804,\"lng\":105.85477620363235,\"name\":\"nha\",\"radius\":300}]}",
"lastUpdateTs": 1655381636277,
"valueAsString": "{\"c\":true,\"fences\":[{\"inside\":false,\"lat\":21.030201084137587,\"lng\":105.82693386822939,\"name\":\"cty\",\"radius\":167},{\"inside\":false,\"lat\":20.988890529803804,\"lng\":105.85477620363235,\"name\":\"nha\",\"radius\":300}]}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "gps",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":48,\"CC\":1,\"Cn\":\"nb\",\"MMC\":{\"M\":1,\"P\":5},\"N\":3,\"RR\":10,\"T\":1655719039,\"Type\":\"GET\",\"V\":\"S3.1.3\",\"r\":-14,\"ss\":-83}",
"lastUpdateTs": 1655719039201,
"valueAsString": "{\"B\":48,\"CC\":1,\"Cn\":\"nb\",\"MMC\":{\"M\":1,\"P\":5},\"N\":3,\"RR\":10,\"T\":1655719039,\"Type\":\"GET\",\"V\":\"S3.1.3\",\"r\":-14,\"ss\":-83}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "id",
"boolV": false,
"strV": "MAN02ND00160",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031630,
"valueAsString": "MAN02ND00160"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "imei",
"boolV": false,
"strV": "2202654645",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648307575932,
"valueAsString": "2202654645"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "last_update",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 1.655381636164e12,
"jsonV": "{}",
"lastUpdateTs": 1655381629112,
"valueAsString": "1.655381636164E12"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "lat",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031578,
"valueAsString": "0.0"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "location",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"accuracy\":19,\"address\":{\"district\":{\"id\":\"003\",\"name\":\"Tây Hồ\"},\"province\":{\"id\":\"01\",\"name\":\"Hà Nội\"},\"ward\":{\"id\":\"00094\",\"name\":\"Nhật Tân\"}},\"lat\":21.067764,\"lon\":105.811215,\"type\":\"ASP\"}",
"lastUpdateTs": 1655381629112,
"valueAsString": "{\"accuracy\":19,\"address\":{\"district\":{\"id\":\"003\",\"name\":\"Tây Hồ\"},\"province\":{\"id\":\"01\",\"name\":\"Hà Nội\"},\"ward\":{\"id\":\"00094\",\"name\":\"Nhật Tân\"}},\"lat\":21.067764,\"lon\":105.811215,\"type\":\"ASP\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "logging",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"message\":{\"CC\":1,\"M\":1,\"N\":3,\"P\":5,\"T\":\"1655720393\",\"Type\":\"C\",\"_pt\":1655719039},\"topic\":\"control\"}",
"lastUpdateTs": 1655720393287,
"valueAsString": "{\"message\":{\"CC\":1,\"M\":1,\"N\":3,\"P\":5,\"T\":\"1655720393\",\"Type\":\"C\",\"_pt\":1655719039},\"topic\":\"control\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "lon",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031578,
"valueAsString": "0.0"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "message",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":49,\"Cn\":\"nb\",\"T\":1655381629,\"V\":\"S3.1.3\",\"accuracy\":19,\"address\":{\"district\":{\"id\":\"003\",\"name\":\"Tây Hồ\"},\"province\":{\"id\":\"01\",\"name\":\"Hà Nội\"},\"ward\":{\"id\":\"00094\",\"name\":\"Nhật Tân\"}},\"lat\":21.067764,\"lon\":105.811215,\"r\":-11,\"ss\":-91,\"status\":{\"nb\":1,\"state\":2},\"ts\":1655381636,\"type\":\"ASP\",\"uwL\":\"\"}",
"lastUpdateTs": 1655381629112,
"valueAsString": "{\"B\":49,\"Cn\":\"nb\",\"T\":1655381629,\"V\":\"S3.1.3\",\"accuracy\":19,\"address\":{\"district\":{\"id\":\"003\",\"name\":\"Tây Hồ\"},\"province\":{\"id\":\"01\",\"name\":\"Hà Nội\"},\"ward\":{\"id\":\"00094\",\"name\":\"Nhật Tân\"}},\"lat\":21.067764,\"lon\":105.811215,\"r\":-11,\"ss\":-91,\"status\":{\"nb\":1,\"state\":2},\"ts\":1655381636,\"type\":\"ASP\",\"uwL\":\"\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "movement_status",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"start\":0,\"stop\":1}",
"lastUpdateTs": 1655381629112,
"valueAsString": "{\"start\":0,\"stop\":1}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "msg_type",
"boolV": false,
"strV": "route",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1655381629112,
"valueAsString": "route"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "_name",
"boolV": false,
"strV": "Tom",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1655688974185,
"valueAsString": "Tom"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "owner",
"boolV": false,
"strV": "0976008008",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1652862714412,
"valueAsString": "0976008008"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "paired",
"boolV": true,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"T\":1652862749,\"Type\":\"DWFC\"}",
"lastUpdateTs": 1652862749110,
"valueAsString": "true"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "pair_ts",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 1.652862714391e12,
"jsonV": "{\"geo\":1,\"mgeo\":0,\"msos\":1,\"mss\":0,\"sos\":1,\"ss\":1}",
"lastUpdateTs": 1652862714412,
"valueAsString": "1.652862714391E12"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "previous_msg",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"T\":1655719039,\"Type\":\"GET\"}",
"lastUpdateTs": 1655719039201,
"valueAsString": "{\"T\":1655719039,\"Type\":\"GET\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "retries",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 447.0,
"jsonV": "{\"nb\":0,\"state\":2}",
"lastUpdateTs": 1655353130201,
"valueAsString": "447.0"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "sim",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{}",
"lastUpdateTs": 1648113031578,
"valueAsString": "{}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "status",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"nb\":0,\"state\":2}",
"lastUpdateTs": 1655719039201,
"valueAsString": "{\"nb\":0,\"state\":2}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "tpp",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"alertnb\":\"0\",\"balnb\":30000,\"expnb\":\"28/06/2022\",\"imsinb\":\"452040339022769\",\"pronb\":\"12VTAG25\",\"simnb\":\"393639884\"}",
"lastUpdateTs": 1655720094201,
"valueAsString": "{\"alertnb\":\"0\",\"balnb\":30000,\"expnb\":\"28/06/2022\",\"imsinb\":\"452040339022769\",\"pronb\":\"12VTAG25\",\"simnb\":\"393639884\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "track",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"id\":\"c94d0c5f-5e18-4220-b38f-1f7710615b25\",\"name\":\"29D124615\"}",
"lastUpdateTs": 1654483368714,
"valueAsString": "{\"id\":\"c94d0c5f-5e18-4220-b38f-1f7710615b25\",\"name\":\"29D124615\"}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "update",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"nb\":0,\"state\":0}",
"lastUpdateTs": 1650545837190,
"valueAsString": "false"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "usage_config",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"geo\":1,\"mgeo\":1,\"msos\":1,\"mss\":0,\"sos\":1,\"ss\":1}",
"lastUpdateTs": 1654238730148,
"valueAsString": "{\"geo\":1,\"mgeo\":1,\"msos\":1,\"mss\":0,\"sos\":1,\"ss\":1}"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "version",
"boolV": false,
"strV": "S3.1.3",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":49,\"C\":[{\"C\":452,\"ID\":79413195,\"L\":42900,\"N\":4,\"S\":-91}],\"Cn\":\"nb\",\"RR\":10,\"T\":1655381629,\"Type\":\"DASP\",\"V\":\"S3.1.3\",\"W\":[{\"M\":\"d0:59:19:9c:c6:ab\",\"S\":-30},{\"M\":\"d0:59:19:9d:c4:63\",\"S\":-48},{\"M\":\"28:ee:52:ea:8e:2e\",\"S\":-61},{\"M\":\"2e:30:5b:5d:4f:79\",\"S\":-68},{\"M\":\"88:c3:97:52:50:aa\",\"S\":-75},{\"M\":\"ec:84:b4:bb:70:d\",\"S\":-81},{\"M\":\"3c:7c:3f:40:b4:68\",\"S\":-85},{\"M\":\"4a:4:a2:f5:9b:4c\",\"S\":-86},{\"M\":\"68:ff:7b:21:9f:50\",\"S\":-86},{\"M\":\"cc:2d:21:d8:b8:c1\",\"S\":-87}],\"r\":-11,\"ss\":-91}",
"lastUpdateTs": 1655381629112,
"valueAsString": "S3.1.3"
},
{
"entityType": "DEVICE",
"entityId": "456af15d-c3f5-487e-b1c2-2fa44f88ec28",
"scope": "SCOPE_SERVER",
"key": "wificell",
"boolV": false,
"strV": "",
"longV": 0,
"dblV": 0.0,
"jsonV": "{\"B\":49,\"C\":[{\"C\":452,\"ID\":79413195,\"L\":42900,\"N\":4,\"S\":-91}],\"Cn\":\"nb\",\"RR\":10,\"T\":1655381629,\"Type\":\"DASP\",\"V\":\"S3.1.3\",\"W\":[{\"M\":\"d0:59:19:9c:c6:ab\",\"S\":-30},{\"M\":\"d0:59:19:9d:c4:63\",\"S\":-48},{\"M\":\"28:ee:52:ea:8e:2e\",\"S\":-61},{\"M\":\"2e:30:5b:5d:4f:79\",\"S\":-68},{\"M\":\"88:c3:97:52:50:aa\",\"S\":-75},{\"M\":\"ec:84:b4:bb:70:d\",\"S\":-81},{\"M\":\"3c:7c:3f:40:b4:68\",\"S\":-85},{\"M\":\"4a:4:a2:f5:9b:4c\",\"S\":-86},{\"M\":\"68:ff:7b:21:9f:50\",\"S\":-86},{\"M\":\"cc:2d:21:d8:b8:c1\",\"S\":-87}],\"r\":-11,\"ss\":-91}",
"lastUpdateTs": 1655381629112,
"valueAsString": "{\"B\":49,\"C\":[{\"C\":452,\"ID\":79413195,\"L\":42900,\"N\":4,\"S\":-91}],\"Cn\":\"nb\",\"RR\":10,\"T\":1655381629,\"Type\":\"DASP\",\"V\":\"S3.1.3\",\"W\":[{\"M\":\"d0:59:19:9c:c6:ab\",\"S\":-30},{\"M\":\"d0:59:19:9d:c4:63\",\"S\":-48},{\"M\":\"28:ee:52:ea:8e:2e\",\"S\":-61},{\"M\":\"2e:30:5b:5d:4f:79\",\"S\":-68},{\"M\":\"88:c3:97:52:50:aa\",\"S\":-75},{\"M\":\"ec:84:b4:bb:70:d\",\"S\":-81},{\"M\":\"3c:7c:3f:40:b4:68\",\"S\":-85},{\"M\":\"4a:4:a2:f5:9b:4c\",\"S\":-86},{\"M\":\"68:ff:7b:21:9f:50\",\"S\":-86},{\"M\":\"cc:2d:21:d8:b8:c1\",\"S\":-87}],\"r\":-11,\"ss\":-91}"
}
]
}
}
entityType: loại Entity, có thể nhận DEVICE, GROUP, USER, ORGANIZATION.
entityId: ID của Entity.
scope: Scope của Attribute, có thể nhận SCOPE_SERVER, SCOPE_CLIENT, SCOPE_SHARE.
key: tên của Attribute.
boolV: giá trị kiểu Boolean của Attribute.
strV: giá trị kiểu String của Attribute.
longV: giá trị kiểu Long của Attribute.
dblV: giá trị kiểu Double của Attribute.
jsonV: giá trị kiểu JSON của Attribute, cần JSON Parse khi sử dụng.
lastUpdateTs: thời điểm cập nhật Attribute lần cuối, tính bằng epoch dạng ms.
valueAsString: giá trị của Attribute dưới dạng String
Người dùng nên biết kiểu Attribute mình cần lấy để lấy đúng dữ liệu.
Node sẽ trả về Relation Success bất kể có tìm được các Entity được yêu cầu không có Attribute nào, ngược lại nếu không có req_multiple_entity, Node sẽ trả về Relation Failure.
Node sẽ tìm ID của các Entity có attribute thỏa mãn điều kiện tìm kiếm.
Người dùng cần đưa vào metadata trường attributes_query:
// metadata
{
"attributes_query": "{\"list_query\":[{\"type\":\"AND\",\"entity_type\":\"DEVICE\",\"filters\":[{\"key\":\"imei\",\"value\":\"3311909006\"}]}]}",
}
// JSON Parsed
{
"attributes_query": {
"list_query": [
{
"type": "AND",
"entity_type": "DEVICE",
"filters": [
{
"key": "imei",
"value": "3311909006"
}
]
}
]
}
}
list_query: mảng tập hợp các yêu cầu tìm Entity ID theo Entity Type và các cặp Key - Value của Attribute Key - Attribute Value.
entity_type: loại Entity đang tìm kiếm, có thể nhận các giá trị DEVICE, ORGANIZATION, USER, GROUP.
type: logic tìm kiếm của các mệnh đề trong filters, có thể nhận giá trị AND, OR.
filters: mảng chứa các mệnh đề tìm kiếm, mỗi mệnh đề sẽ tương ứng key chứa value, hiện Node chỉ hỗ trợ value dạng String.
Dữ liệu trả về được để trong trường attributes_query:
// metadata
{
"attributes_query": "{\"list_query\":[{\"entity_type\":\"DEVICE\",\"type\":\"AND\",\"filters\":[{\"key\":\"imei\",\"value\":\"3311909006\"}],\"entity_ids\":[\"3d2555a6-c77a-487c-989f-20c4143d5095\"]}]}"
}
// JSON Parsed
{
"attributes_query": {
"list_query": [
{
"entity_type": "DEVICE",
"type": "AND",
"filters": [
{
"key": "imei",
"value": "3311909006"
}
],
"entity_ids": ["3d2555a6-c77a-487c-989f-20c4143d5095"]
}
]
}
}
entity_ids: mảng chứa Entity ID tìm thấy theo mỗi yêu cầu, đặt cùng tầng với filters.
Node sẽ trả về Relation Success bất kể có tìm được Entity ID thỏa mãn các mệnh đề được đặt trong attributes_query, ngược lại nếu không có attributes_query, Node sẽ trả về Relation Failure.
Node sẽ trả về địa chỉ (phường/quận/thành phố) của tọa độ cho trước.
Latitude key name: trường thông tin trong msg có giá trị của vĩ độ.
Longitude key name: trường thông tin trong msg có giá trị của hoành độ.
Dữ liệu trả về được truyền vào trường address trong metadata với định dạng sau:
// metadata
{
"address": "{\"province\":{\"id\":\"96\",\"name\":\"Hồ Chí Minh\"},\"district\":{\"id\":\"770\",\"name\":\"Quận 3\"},\"ward\":{\"id\":\"NaN\",\"name\":\"Phường 7\"}}"
}
// JSON Parsed
{
"address": {
"province": {
"id": "96",
"name": "Hồ Chí Minh"
},
"district": {
"id": "770",
"name": "Quận 3"
},
"ward": {
"id": "NaN",
"name": "Phường 7"
}
}
}
province: bao gồm mã hành chính id và tên đơn vị hành chính name của tỉnh/thành phố.
district: bao gồm mã hành chính id và tên đơn vị hành chính name của quận/huyện/thành phố/thị xã.
ward: bao gồm mã hành chính id và tên đơn vị hành chính name của xã/phường/thị trấn.
Nếu dữ liệu trả về có id là NaN thì có thể dữ liệu hành chính trong Innoway chưa được cập nhật.
Node thay đổi msg, metadata, msgType sử dụng ngôn ngữ lập trình JavaScript.
Node tương đương một function trong JavaScript với đầu vào là msg, metadata, msgType của bản tin truyền vào, và trả về với định dạng {msg, metadata, msgType}
.
Kafka Node gửi bản tin đến đến Kafka Server.
Topic pattern: topic trên kafka broker, có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Bootstrap servers: danh sách kafka broker, phân biệt bằng dấu phẩy ",".
Automatically retry times: số lần gửi lại bản tin nếu kết nối thất bại.
Produces batch size: kích cỡ batch tính bằng byte cho việc nhóm bản tin trong cùng partition.
Time to bufer locally: thời gian local buffering window tối đa tính theo ms.
Client bufer mã size: kích cỡ buffer tính bằng byte cho việc gửi bản tin.
Key serializer: mặc định là org.apache.kafka.common.serialization.StringSerializer.
Value serializer: mặc định là org.apache.kafka.common.serialization.StringSerializer.
Other properties: bất kì property nào khác cần cho kafka broker.
Nội dung bản tin gửi đi lấy từ msg.
Kết quả đầu ra gồm msg là nội dung bản tin gửi đi (không đổi), và metadata chứa offset, partition, topic.
Bản tin chứa trong msg sẽ gửi sang MQTT Broker với QoS AT_LEAST_ONCE.
Topic pattern: topic trên MQTT Broker, có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Host: URL của MQTT Broker.
Port: Port của MQTT Broker.
Connection timeout: thời gian timeout tính bằng giây cho việc kết nối MQTT Broker.
Client ID: (phụ) ID của Client sử dụng cho việc kết nối tới MQTT Broker. Nếu không khai báo thì sẽ mang giá trị ngẫu nhiên.
Add Service ID as suffix to Client ID: (phụ) Service ID sẽ được thêm vào sau Client ID.
Clean session: tạo một kết nối tạm thời với MQTT Broker.
SSL Enable/Disable: bật/tắt SSL.
Credentials: Hình thức bảo mật cho kết nối MQTT. Có thể là Anonymous, Basic hoặc PEM (hỗ trợ CA certificate file, Certificate file, Private key file, Private key password).
Nội dung bản tin gửi đi lấy từ msg.
Nếu bản tin được gửi thành công, Node sẽ trả về Relation Success. Ngược lại là Relation Failure.
Node sẽ gửi REST Request tới REST server ngoài Platform.
Endpoint URL pattern: có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Request method: GET, POST, PUT, DELETE.
Headers: header của request, có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Nội dung bản tin gửi đi lấy từ msg.
Kết quả đầu ra gồm msg là nội dung của REST Response, và metadata chứa status, statusCode, statusReason, và các response header.
Nếu bản tin được gửi thành công, Node sẽ trả về Relation Success. Ngược lại là Relation Failure.
Node sẽ gửi email từ email được cấu hình SMTP tới các email được chỉ định.
Use system SMTP settings: sử dụng Mail Server đã cấu hình mặc định hoặc tự điều chỉnh cấu hình.
SMTP host: SMTP URL.
SMTP port: SMTP Port.
Timeout: thời gian timeout cho yêu cầu gửi Email.
Username: tài khoản email được cấp quyền sử dụng SMTP.
Password: mật khẩu email được cấp quyền sử dụng SMTP.
From Template: địa chỉ email gửi đi.
To Template: danh sách địa chỉ email nhận, cách nhau bằng dấu ",".
CC Template: danh sách địa chỉ email được CC, cách nhau bằng dấu ",".
BCC Template: danh sách địa chỉ email được BCC, cách nhau bằng dấu ",".
Subject Template: tiêu đề của email.
Body Template: nội dung email.
Các trường trên đều có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata
Node cũng hỗ trợ đính kèm tệp tin được lưu trên MinIO của Innoway. Cần có key images trong metadata với nội dung như sau:
{
images: {\"0962623826-0.jpg\":\"f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F0962623826-0.jpg\",\"0962623826-1.jpg\":\"f958c722-42bf-4540-a71e-98e16ad76530/a802cfe5-ae6b-4381-97ab-494b9277ea63%2F0962623826-1.jpg\"}"
}
Nếu email được gửi thành công, Node sẽ trả về Relation Success. Ngược lại là Relation Failure.
Node sẽ gửi tin nhắn qua các nhà cung cấp dịnh vụ của AWS SNS và Twilio SMS.
Phone Numbers To Template: sho phép nhiều số điện thoại cùng nhận tin nhắn, ngăn cách bằng dấu phẩy.
SMS message Template: soạn nội dung tin nhắn.
Hai trường trên đều có thể nhập dạng string hoặc gọi tới giá trị trong msg và metadata.
Nếu tin nhắn được gửi thành công, Node sẽ trả về Relation Success. Ngược lại là Relation Failure.