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