SDK User Guide
1. Introduction
What is an SDK?
An SDK, or Software Development Kit, is a collection of tools, libraries, and documentation that developers use to build applications for a specific software platform or system. It provides a set of pre-built components and resources that simplify the development process and enable developers to create applications more efficiently.
Our SDK include code samples in JAVA and Python that implements calls to our APIs.
What about an API?
API stands for Application Programming Interface. An API is a set of rules and protocols that allows different software applications to communicate with each other. In other words, it's like a messenger that allows two different applications to talk to each other and exchange information.
Imagine you're at a restaurant and you want to order some food. You tell the waiter what you want, and the waiter takes your order to the kitchen. The kitchen then prepares your food and sends it back to your table through the waiter. In this scenario, the waiter is like the API, taking your order (request) to the kitchen (application), and then returning the food (response) back to you.
Similarly, when you use an application, you may want to perform certain tasks that require the application to talk to other applications or services. An API allows the application to do this by providing a set of rules and protocols for how to communicate with those other applications or services. This allows the application to access data, services, or functionality that it otherwise wouldn't be able to.
For example, a weather application might use an API to get current weather data from a weather service, or a social media application might use an API to post a message to a user's timeline. In both cases, the API acts as a messenger between the application and the external service, allowing them to exchange data and perform tasks.
1.1 Objective
This guide is a quick guide on how the 3rd party systems connects to query data from Safety Suite Real Time (aka. SSRT). This guide covers the following:
• Authentication with assigned AppId and AccessKey
• Establishing the connection with the server
• Obtain configuration data from SSRT system.
• Obtain real time data (device/event/ worker/online offline status) from Safety Suite system.
• Obtain historical data (device/event/worker historical data) from SSRT system.
1.2 Prerequisites
This guide assumes that you are a software developer with the following knowledge:
• Familiar with one programming language
• Familiar with Http request and WebSocket connection knowledge
• Familiar with AES encrypt and decrypt knowledge
Note: For more information on AppId and AccessKey authentication, contact technical support team.
1.3 Technical Support
North America
Phone: + 1 (833) 556-3515
Email: support.safetysuite@honeywell.com
LATAM
Phone: + 1 (833) 556-3515
Email: support.safetysuite@honeywell.com
Brazil
Phone: + 1 (833) 556-3515
Email: support.safetysuite@honeywell.com
EMEA
Phone: 00 800 8181 9691
Email: support.safetysuite@honeywell.com
APACI
Email: support.safetysuite@honeywell.com
2. OVERVIEW
This guide describes the methods to receive real-time and historical data supported by the SSRT and integrate it with 3rd party systems and applications.
The four main objectives are:
• Authentication – The step describes on how to authenticate with obtained AppId and AccessKey, which is the precondition of following steps.
• Query Configuration data – Configuration provides the basic information of Safety Suite system that includes device list, worker list and site list configuration. After acquiring the configuration, the third-party system can carry these configuration parameters to get real- time and historical data. These configurations make the request history data and real time more convenient and accurate. Configuration can be requested through Http protocol.
• Real time data request - Real time data is pushed to 3rd party systems by Safety Suite system automatically through WebSocket connection. Real time data contains alarm/alert event, device data, worker data and online/offline status data. Third party system can get the real-time status of current devices, workers and events information through WebSocket subscription.
Example: When a worker or device enters a hazardous area the real events, device sensor values, worker and device online/offline information to know the real time status of that worker can be requested.
• Historical data request - Historical data is requested through Http protocol. All the http protocol requests follow the same rule. Third-party system can retrieve historical data for a specified period of time based on parameters such as device data, alarm event data and alert event data. After receiving the historical data, third-party system can analyze the data for trends and statistics.
• Topology of SSRT and 3rd party system
3. AUTHENTICATION
AppId is the unique identity of the accessing system assigned by the Safety Suite system and AccessKey is the symmetric encrypted code.
The accessing system will apply for AppId and AccessKey from SSRT and ensure thier confidentiality. The accessing system needs digital signature to access the Safety Suite system. Signature algorithms include: MD5, SHA1, sha256, AES (currently introduced AES only). Refer to section 5 for specific encryption code.
4. PROTOCOL DESCRIPTION
4.1 Http Request
Use HTTP for the API on data query requests initialized by Accessing system, which supports GET and POST. Both authentication and API request are as following:
a. GET request
Request:
GET $URI?appid= 98bcdc21-68c1-4216-84a4-d99d30cb61db &random=4238&sign=$SIGN
Request Fields |
Description |
---|---|
URI |
Request address includes API version info |
random |
An int4 random number, to avoid replay attack, suggest to user present UTC seconds |
$SIGN | An encrypted string, value = Base64.Encoder(ALG_FUNC($URI_JSON_STR)) |
ALG_FUN |
Encryption algorithm function. See API section for specific code |
$URI_JSON_STR |
Parameters in json format Example: { "appid":”98bcdc21-68c1-4216-84a4-d99d30cb61db”, "random":4238, "data": XXXX, "uri": $URI } |
Response:
{
"data": {}
}
Response Fields | Description |
---|---|
data | Encrypted string, the value is Base64. Encoder (ALG_FUNC($DATA_JSON_STR) |
ALG_FUN |
Encryption algorithm function. See API section for specific code |
$DATA _JSON_STR | Response string in json format |
b. POST request
Request: POST $URI
{
"uri": $URI, //Required
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db ", "data": {}, // no need to submit, the content is in sign field "random": 4455, //number, int4
"sign": $SIGN
}
Body Fields |
Description |
---|---|
URI |
Request address, includes API version info |
random |
An int4 random number, to avoid replay attack, suggest to user present UTC seconds |
data | Specific API parameters, which are defined by the specific API, the corresponding fields are no need to submit, the content is in sign |
$SIGN |
An encrypted string, value = Base64.Encoder(ALG_FUNC($URI_JSON_STR)) |
ALG_FUN |
encryption algorithm function. See API section for specific code |
$URI_JSON_STR |
parameters in json format Example: { "appid": “98bcdc21-68c1-4216-84a4-d99d30cb61db”, "random":4455, "data":ZZZZ, "uri":$URI } |
Response:
{
"data": {}
}
Response Fields | Description |
---|---|
data |
Encrypted string, the value is Base64.Encoder(ALG_FUNC($DATA_JSON_STR)) |
ALG_FUN |
Encryption algorithm function. See API section for specific code |
$DATA _JSON_STR |
Response string in json format |
5.2 WebSocket
Using WebSocket for the API on pushing real-time data from Safety Suite to accessing system. Authentication should be the first step, then subscribe the concerned data follow api.
a. Establish Connection
GET $URI?appid=98bcdc21-68c1-4216-84a4-d99d30cb61db&random=3258& sign=$SIGN
Request Fields | Description |
---|---|
URI |
Request address, includes API version info |
random |
An int4 random number, to avoid replay attack, suggest to user present UTC seconds |
$SIGN |
An encrypted string, value = Base64.Encoder(ALG_FUNC($URI_JSON_STR)) |
ALG_FUN |
Encryption algorithm function. See API section for specific code |
$URI_JSON_STR |
Parameters in json format |
b. Push request
{
"data": {}, //not actually using, content is in sign field "flag": 1,
"msgId": "GKJoh3WZb873Vx4DBW",
"msgType": "$MSGTYPE", "sndTime": 1593919901579,
"sign": $SIGN
}
Request Fields |
Description |
---|---|
flag |
1 //1-request 2-response |
msgId |
Generated random message id, unique for every request, response is same for it |
msgType |
Api specified |
sndTime |
Request time, unit is millisecond |
$SIGN |
An encrypted string, value = Base64.Encoder(ALG_FUNC($URI_JSON_STR)) |
ALG_FUN |
Encryption algorithm function. See API section for specific code |
$URI_JSON_STR |
Parameters in json format |
Push response
{
"data": {}, //not actually using, content is in sign field "errCode": 0,
"flag": 2,
"msgId": " GKJoh3WZb873Vx4DBW ",
"msgType": "$MSGTYPE", "sndTime": 1593919908632,
"sign":$SIGN
}
Request Fields Description
errCode error code, 0 is normal
flag 2 //1-request 2-response
msgId Same for request
msgType Same for request
sndTime Response time, unit is millisecond
$SIGN An encrypted string, value = Base64.Encoder(ALG_FUNC($URI_JSON_STR))
ALG_FUN Encryption algorithm function. See API section for specific code
$URI_JSON_STR Parameters in json format
5. Encryption algorithm function description
AES example:
Encrypt: base64Str = base64.encode(encrypt(data, accessKey, appid.substr(0,16))) Decrypt: data = decrypt(base64.decode(base64Str), accessKey, appid.substr(0,16))
Parameters Description
data Data needs to be encrypted
accessKey/appid Provided by SS
base64Str String after encrypted
appid.substr(0,16), First 16 character of appid, used as initial vector for AES
6. API DEFINITION
Get configuration of system
The configuration of the system includes site list, device list and worker list. Getting configuration will get the full configuration of system and data dictionary. The configuration is the basic information which can help to filter historical data, subscribe real time data and understand relationships and identify patterns.
a. Get site configuration list
POST
/third/gas/v1/getSiteList Get full site configuration list of system
Request content-type= application/json {
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db", "data": {//only for definition, the content is in sign field
},
"random": 2457, //number,int4 "sign": "$SIGN",
"uri":$URI
}
Response content-type= application/text {
"rtData": {
“siteList”:[ {
"siteId": 76,
"name": "2020 Sales Kickoff", //site name "city": "Houston", //city of site "timezone": "11", // timezone of site "country": "United States", //country of site
“countryName”:” United States”, //country name "province": "TX", //province of site
"center": "118.83461858749142,31.9560272454019",
//center longitude and latitude "zip": "77061", //zip of site
"address1": "8181 Airport Blvd" //addr of site
}
],
“total”:10 //total num
}
}
//if response http status code is 400 or 403, please modify parameters as requested
b. Get worker configuraton list
POST /third/gas/v1/ getWorkerList Get full worker configuration list of system, or get a worker configuration by filter with worker id
Request content-type= application/json {
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db", "data": {//only for definition, the content is in sign field
workerId:1 // option,worker id is from response of this api. Null for all worker
}
},
"random": 2457, //number,int4 "sign": "$SIGN",
"uri":$URI
}
Response content-type= application/text {
"rtData": {
“workerList”:[ {
"workerId": 198, //worker id
"userName": "Troy Walsh", //worker name "firstName": "test_frist", //user first name "middleName": "test_middle", //user middle name "lastName": "test_last",//user last name
"email": "18951873142@sina.cn", //user email "phone": "",
"sites": [{ //worker current location sites info
"id": 32, //site Id
"name": "Austin Fire Depart" // site name
}],
"status": 1, //1- active ;0-inactive
"nationCode": "1" // nation code , See appendix
}
],
“total”:10 //total num
}
}
//if response http status code is 400 or 403, please modify parameters as requested
c. Get devices configuraton list
POST /third/gas/v1/ getDeviceList Get all the devices configuration list of system, or get some devices configuration by filter with sensor Name or serial No
Request content-type= application/json {
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db", "data": {//only for definition, the content is in sign field sensorName:” NOISE”, //option, sensor name of
device contains, See appendix serialNo:” M03170111421” //option,device serialNo “isOnline”: 0 ,// option, online 1 ; offline 0; null for all “siteId”:23 //option
},
"random": 2457, //number,int4 "sign": "$SIGN",
"uri":$URI
}
Response content-type= application/text {
"rtData": {
“deviceList”:[ {
"id": 926, //device id "isOnline":0,
"onlineTime":"2020-04-13 07:54:58",
"offlineTime":"2020-04-13 08:15:43",
“nickName”:””, // nick name of device "assetType": "GasDetector", //device type "assignSites":["site"], //device assigned sites "serialNumber": "001F001231",
"status": 2,//1-in stock 2- active 3-in maintenmance 4-archived
"name": "MultiRAE", //device name "brand": "RAE", //device brand "model": "PGM-6220", // device model
"location": "Energy Point", //device location "gps":{
"lat": 31.40383060508787,
"lng": 121.21138884741838
},
"assignedTo":[ "user2"
],
"battery": 100, "alarmInfo": {
"alarms": [41], // just device level "sensorAlarms": // just sensor level
[
{
"name": "CO", "alarm": 2
},
{
"name": "H2S", "alarm": 2
},
{
"name": "SO2", "alarm": 2
},
{
"name": "O2", "alarm": 2
}
]
},
"type": 1,//0-fixed 1- portable 2-transportable "sensorList": [
{
"idx":0,
"alarm":[ 0
],
"special":0,
"detectionMode":0, //definition in 6.3 Detection Mode definition
"val":0.1,
"decimalPoint":1, // reading accuracy "name":"h2s", //sensor name "unit":"ppm" // sensor unit
}
]
}
],
“total”:10 //total num
7.2 Get real time data
7.2.1 Using websocket to setup connection
Uri is /third/ws/v1
The client needs to send ping message to server regularly, the time interval should be between 60-90 seconds.
7.2.2 Subscribe real time data
Real time data includes device data, worker data, alarm/alert event data and online/offline status data. Third-party system can subscribe the data required by subDataType in request. And Real time data can be subscribed by whole tenant or site or worker or device. It depends on the type fields in request body. One thing to notice is that this subscribe request must be send every 60 seconds to avoid information pushing waste caused by not unsubscribing in time.
Request (Must send this request every 60 seconds) {
"data": [// only for definition, content in sign
{
"type":1,// 1:tenant 2: site 4:device 5:worker
"id":[1,2] // id is corresponds to the type; type 1:null 2: siteId 4:deviceId 5:workerId
"subDataType":[1], // 1 event 2 Reading(contain location) 3 online/offline,when type=2, 3 is not supported
}] ,
"flag": 1,
"msgId": " GKJoh3WZb873Vx4DBW ",
"msgType": "subscribeRtData", "sign": "$SIGN",
"sndTime": 1593919901000
}
response {
"data": {}, "errCode": 0,
"flag": 2,
"msgId": " GKJoh3WZb873Vx4DBW ",
"msgType": "subscribeRtData", "sign": "$SIGN",
"sndTime": 1593919908376
}
7.2.3 Server publish real time data
After subscribe, Safety Suite server will publish real time data to the client automatically.
request {
"data": {//only for definition, the content is in sign field "events": [
{
"deviceId": 1, //optional, is null when worker’s
event
"eventCode": 11, //see appendix " time": 1571030843000,
“startFlag”:1,//1 start 2 stop "type": 1, //1 alarm 2 alert
}
],
“workerId”:123, "gps":
{
"lat": 11,
"lng": 222
},
"time": 1593919910376,
“online”:1, //1 online 0 offline optinal "reading":[
{
"data": [
{
"decimalPoint": 0,
"detectionMode": 0, "name": "CO",
"unit": "ppm", "val": 0.0
}
],
“online”:1, //1 online 0 offline optinal "deviceId": 1234,
"time": 1593919910376,
"gps":{ "lng":123, "lat":345}
}
]
},
"flag": 1,
"msgId": " GKJoh3WZb873Vx4DBW ",
"msgType": "subscribeRtData", "sign": "$SIGN",
"sndTime": 1593919913766
}
response {
"data": {}, // only for definition, the content is in sign field
"flag": 2,
"msgId": "GKJoh3WZb873Vx4DBW",
"msgType": “subscribeRtData", "sign": "$SIGN",
"sndTime": 1593919916766
}
7.3 Get historical data
Sensor attributes definition:
Values Description
val Instrument sensor readings
unit Instrument sensor unit
name Instrument sensor name
decimalPoint reading accuracy, for example: val=10,
decimalPoint=1 means the value is 1.0
Detection Mode
TubeSampling = 1; Sensor Tube Sampling
WarmingUp = 2; Sensor Warming-up
DisabledTemporary = 3; Sensor disabled temporary
AlarmOccurring=255; sensor alarm
a. Get historical device data
Getting historical device data will help to get historical device data info to learn sensor and GPS information at some point in history and statistical analysis of the data. Third- party system can also filter the data by site, worker or device info with a period of time and paging information.
POST /third/gas/v1/ Get historical device data over a period of time and filter by
getHisDeviceData site/worker/device
Request content-type= application/json {
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db", "data": {//only for definition, the content is in sign field
“siteId”:1 //option, null for all “workerId”:1 // option, null for all “deviceId”:3 //option, null for all
"startTime": 1593919901000,// option,historical data time interval start time, using timestamp
"endTime": 1593920501000,// option,historical data time interval end time, using timestamp
"pageNo": 1, // option, default 1
"pageSize": 1000, //option, default 1000 ,and 1000 is maximum
},
"random": 2457, //number,int4 "sign": "$SIGN"
}
Response content- type= application/text {
"rtData": {
"total": 51538, // total size "currentPageSize": 538, //if currentPageSize <
pageSize, that means this is the last page "currentPageNo": 52,
"deviceData": [
{
"serialNo": "M03A10000067",
"deviceId": 1704,
"time": 1612337283570,
"data": [
{
"detectionMode": 0,
"val": 0.0,
"decimalPoint": 0, "name": "LEL",
"unit": "%LEL"
},
{
"detectionMode": 0,
"val": 0.0,
"decimalPoint": 0, "name": "CO",
"unit": "mg/m3"
},
{
"detectionMode": 0,
"val": 0.0,
"decimalPoint": 1, "name": "H2S",
"unit": "mg/m3"
}
],
"gps": {
"lat": 31.196919,
"lng": 121.609875
},
"siteId": null, "workerId": 1258
}
]
}
}
//if response http status code is 400 or 403, please modify parameters as requested
b. Get historical alarm/alert data
Getting historical alarm/alert data will help to get historical event detail info to learn what event happened at some point in history and statistics analysis of the data. Third-party system can also filter the data by site,worker or device info with a period of time and paging information.
POST /third/gas/v1/ getHisEventData Get historical alarm/alert event data over a period of time and filter by site/worker/device
Request content-type= application/json {
"appid": "98bcdc21-68c1-4216-84a4-d99d30cb61db", "data": {//only for definition, the content is in sign field “type”:1, // option,Search historical data type:
1- alarm
2- alert null-all
"startTime": 1593919901000,// option,historical data time interval start time, using timestamp
"endTime": 1593920501000, //Option,historical data time interval end time, using timestamp
"pageNo": 1,// Required,Page no ,from 1
"pageSize": 100, //Required,page size, 100 is maximum
“siteId”:2,// Option,Site id,Null for all “workerId”:3,// Option,Worker id,Null for all “deviceId”:4// Option,Device id ,Null for all
},
"random": 2457, //number,int4 "sign": "$SIGN"
}
Response content- type= application/text {
"rtData": {
"total": 51538, // total size "currentPageSize": 538, //if currentPageSize <
pageSize, that means this is the last page "currentPageNo": 52,
“events”:[
{
"id": 24008,
"event": "SAS_FAIL", //event type name "eventCode": 10,//event type id,see appendix "eventCategory": 1,// 1 SensorAlarmStatus,2
UserAlarmStatus,3 WorkerDownPhase,4 InstrumentFaultStatus
"reported": 1587115096952, "serialNo": "K0185619080041-RTN",
"doneBy": "asdasd", "type": 2,//1 alarm 2 alert "sensorName": ["mA"], "gps": {
"lat": "31.92700114569806",
"lng": "118.861848581693"
},
"sensorList": [{
"idx": 0,
"alarm": [10],
"detectionMode": 0,
"val": 0.0,
"decimalPoint": 0, "name": "mA",
"unit": "mg/m3"
}],
"equipmentType": "Controller", "modelName": "Honeywell Touchpoint Plus", "zoneName": "demo area 01",
"timeElapsed": 419,// time of duration(ms) "siteName": "nanjing site",
"workerId": 151,//worker id "workerName":"asdasd", "equipmentId": 916,//device id "modelId": "2958032896",
"equipmentTypeId": 2
}
]
} }
//if response http status code is 400 or 403, please modify parameters as requested
7. SAMPLE CODE
You can contact support team to get sample code in Java or Python.
8.1 Java code example
8.1.1 Encrypt/decrypt java code example
public static String decrypt(String base64Data, String base64SecretKey, String alg,String ivStr) throws Exception {
byte[] secretKey = new BASE64Decoder().decodeBuffer(base64SecretKey);
if (AES.equals(alg)) {
if (ivStr==null) {
throw new IllegalArgumentException("ivStr is null");
}
byte[] btIv = ivStr.getBytes(); if (btIv.length<16) {
throw new IllegalArgumentException("ivStr len is err");
}
if (btIv.length>16) {
byte[] btIv1 = new byte[16]; System.arraycopy(btIv, 0, btIv1, 0, 16); btIv = btIv1;
}
return decryptAes(base64Data, secretKey,btIv);
}
return null;
}
public static String decryptAes(String base64Data, /*String secretKey*/byte[] enCodeFormat,byte[] ivBt) throws NoSuchProviderException, InvalidAlgorithmParameterException {
try {
byte[] encryptedBytes = new BASE64Decoder().decodeBuffer(base64Data);
//byte[] enCodeFormat = secretKey.getBytes(); SecretKeySpec secretKeySpec = new
SecretKeySpec(enCodeFormat, AES);
IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBt); Cipher cipher =
Cipher.getInstance("AES/CBC/PKCS5Padding","BC");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec,ivParameterSpec);
byte[] result = cipher.doFinal(encryptedBytes);
return new String(result, "UTF-8");
} catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
| IllegalBlockSizeException | BadPaddingException e) {
logger.error("", e);
}
return null;
}
8.1.2 Get historical data java code example
8.1.3 Websocket connection establish java code example
8.1.4 Real time instrument readings subscribe java code example
8.2 Python code example
8.2.1 Encrypt/decrypt python code example
8.2.2 Get historical data java code example
8.2.3 Websocket connection establish python code example
8.2.4 Real time instrument readings subscribe python code example
8.3 System Requirements
8.3.1 Hardware Requirements
– CPU: 2-core or more
– RAM: 4GB or more
– Hard disc: 10GB or more
– Internet Access
8.3.2 Software Requirements
– Operating system: No limit
– IDE: No limit
8. APPENDIX
8.1 Sensor Measurement Unit Table
Unit ID Unit Name
1 ppm
2 %
3 ppb
4 DegC
5 mg
6 μg
7 mA
8 V
9 DegF
10 μSv/h
11 μR/h
12 cps
13 m/sec
14 Deg
15 μg/m3
16 mg/m3
17 mBar
18 W/m2
19 -
20 Bts/m
21 Bth/m
22 mSv/h
23 mR/h
24 kcps
25 Sv/h
26 R/h
27 Mcps
28 μSv
29 μR
30 mSv
31 mR
32 Sv
33 R
34 μrem
35 mrem
36 rem
37 μrem/h
38 mrem/h
39 rem/h
40 %LEL
41 %VOL
42 μGy
43 mGy
44 Gy
45 μGy/h
46 mGy/h
47 Gy/h
48 %CH4
49 μ
50 μmol/mol
51 x10-6
52 g
53 bpm
54 MPH
55 n
56 nmol/mol
57 dBA
9.2 Sensor Name Table
Sensor ID Sensor Name
1 NO2
2 N2
3 HCN
4 HF
5 COCl2
6 NH3
7 Cl2
8 ClO2
9 NO
10 PH3
11 SO2
12 HCHO
13 VOC
14 VOL
15 MOS
16 C2H3Cl
17 CH3Cl
18 i-C4H10
19 CH3SH
20 C2H2
21 ETO
22 C2H4
23 C2H6
24 C2H5OH
25 C3H6
26 C4H10
27 C5H12
28 C6H14
29 CH3Br
30 NEUTRON
31 GAMMA
32 mA
33 V
34 DIN
35 SPEED
36 DIR
37 BAR
38 MOT
39 DO
40 Motion
41 CO
42 H2S
43 LEL
44 TC
45 R.H
46 Temp
47 H2
48 CO2
49 CH4
50 C3H8
51 DUMMY1
52 DUMMY2
53 Solar
54 Inter
55 Conf_Ck
56 Nerve
57 Blister
58 Blood
59 IRRT
60 NERV
61 BLST
62 VX
63 Chem Haz
64 Toxic
65 Breath
66 Heart
67 Activity
68 Posture
69 Skin Temp
70 Mass Conc
71 EX
72 SiH4
73 AsH3
74 O2
75 CI2
76 HCl
77 CIO2
78 EC
79 IO
80 PRESSURE
81 Accelerometer
82 Accelerometer.X
83 Accelerometer.Y
84 Accelerometer.Z
85 GPS
86 C3H3CN
87 NOISE
88 Spd
89 Conf Ck
90 Mass Conc.
91 MOS LEL
92 3D
93 P
94 HNO
95 As
96 S(HD)
97 CH
98 C2H4O
99 CH2CHCN
100 Acid
101 Vesicant
102 Chemical
103 Flammable
104 Organic Acid
105 TDI
106 Acetonitrile
107 Inorganic
108 Mask Up
109 Irritant
110 Core Body Temp
9.3 Event Code Table
Event ID Event Name
2 Cal Fail
3 Cal Due
4 Bump Fail
5 Bump Due
6 Lamp Fail
7 Off
8 Short
9 Broken
10 Fail
11 Max Range
12 Over Range
13 Extreme High
14 High
15 Low
16 Extreme LOW
17 STEL
18 TWA
19 Negative
20 Dose
21 Alarm
37 Fall Down
38 Sos Req
39 Faint Down
40 Slip Down
23 Mandown Warning
24 Mandown
25 Super Alarm
26 Phone Panic
33 Battery Low
34 Pump Blocked
35 Memory Full
36 Unit Failure
28 Mandown Warning
29 Mandown
30 Super Alarm
31 Panic Alarm
41 Device out site
42 Device out area
43 Worker enter restricted area
44 Worker non-compliance
45 Device enter area
9.4 Error Code
ErrorCode ErrorMsg
-1 server intern err (no encrypt text)
10001 appid is not exist (no encrypt text)
10002 time calculate error
10003 sign data decrypt error
10004 sign data decrypt does not match request param data
10005 sign data decrypt url error
10006 random check error
10007 page size error
10008 start time cannot null
10009 time interval out of one day
10010 time interval out of thirty day
10011 total list size is too long, please query by page