# 安定宝协议

## 一、概述 

### 名词解释

* 探测器

	有太阳能无线光栅、红外幕帘、无线门磁、紧急按钮等各种类型,通过无线信号与主机通信。

* 主机

	报警主机,与探测器进行无线通信,与接警中心进行 `TCP` 网络通信,主机作为客户端主动连接接警中心。当探测器被触发或主机布撤防等事件产生时,通过网络上报至接警中心,并可以接收接警中心的远程控制命令。

* 接警中心

	运行在服务器的程序,监听客户端的 `TCP` 连接,可以处理主机发送的各种事件,可以对主机进行远程控制。


主机与接警中心之间通信使用安定宝协议 `DC05`,`DC07`,`DC09`,并根据我司需要添加了部分私有事件代码。

使用主机时,需要先配置安定宝ID、接警中心IP、端口等必要信息,主机由安定宝ID唯一标识,探测器由防区号唯一标识。网络模块+工程主机可以使用 [网络模块配置工具](https://net-mod-config-tool-1251421422.cos.ap-chengdu.myqcloud.com/%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%9D%97%E6%89%B9%E9%87%8F%E9%85%8D%E7%BD%AE%E5%B7%A5%E5%85%B7v1.8.2.195.exe) 进行配置,其他型号的主机可以使用手机APP进行配置(配置接警中心IP、端口时,手机APP内设置界面找到 **标准接警中心** )。

主机开机后以 `TCP` 协议主动连接直连型接警中心,连接成功后报告一次状态(及主机类型),然后开始定时发送心跳包(`NULL`),接收方应及时回应相同 `seq` 的 `ACK` 包;主机有事件(状态改变、产生警情)发生时上报接警中心,`id` 使用 `ADM-CID` 或 `HENG-BO`。

接警中心远程控制发送撤防命令时,密码放在 `xdata` 段内。

本端(主机或接警中心)收到除 `DUH/ACK` 包之外的其他有效数据包时,都应回应相同 `seq` 的 `ACK` 包,否则对端(接警中心或主机)会进行重发。

## 二、传输协议

使用 `ASCII` 码传输

### **格式**(以下出现的 `<>` 仅作分隔符,实际数据中不存在):

`<LF>` `<crc16>` `<length>` `<"id">` `<seq>` `<Rrcvr>` `<Lpref>` `<#acct>` `<data>` `<*xdata>` `<timestamp>` `<CR>`

### **各字段说明:**

* `LF` 固定起始符 `0x0A`
* `crc16` 固定长度 `4 Bytes`, 表示从 `id` 的左引号开始,至 `timestamp` 的最后一个字节结束(长度为 `length` )计算出的 `crc16` 值,以16进制数字的ASCII码表示
* `length` 从 `id` 的左引号开始,至 `timestamp` 的最后一个字节结束的字符串长度,以16进制数字的ASCII码表示,定长 `4 Bytes`
* `"id"` 事件类型,分为 `NULL, ACK, DUH, ADM-CID, HENG-BO` 等,分别为心跳、回应、错误、主机事件、恒博事件。除事件 `ADM-CID/HENG-BO` 外,其他三种类型的 `data` 段都为空值  `[]`。
* `seq` 序号,定长 `4 Bytes`,代表的十进制数字为主机发送命令字的序号,范围 `0001~9999`,超过 `9999` 则从1开始再次循环。`seq` 被用来判断主机发出的 `ADM-CID/HENG-BO` 类型命令字是否得到接警平台的正确处理。例:平台要对主机发出的 `NULL/ADM-CID/HENG-BO` 类型事件进行回应,回应的 `seq` 以接收到的 `seq` 为准。主机收到回应后会判断 `seq` 与之前发送的 `seq` 是否相同:相同则说明该事件已得到处理,否则会进行重发。
* `Rrcvr` 以R开头的一段十六进制数字字符串,数字长度范围`1~6`,暂时仅占位,无意义。字段总长度`2~7` Bytes。
* `Lpref`  以L开头的一段十六进制数字字符串,数字长度范围`1~6`,暂时仅占位,无意义。字段总长度`2~7` Bytes。
* `#acct` 以`#`开头,后跟有限位十六进制数字(`SIM`卡号或出厂编号或`MAC`地址或安定宝ID),表示主机的账号(有SIM卡的主机为手机号,无`SIM`卡的是出厂编号,有些主机直连时使用了安定宝ID为账号,`WiFi`主机使用 `MAC` 地址作为主机账号)
* `data` 格式为 `[]`(左右中括号,无空格,定长2Byte)或 `[#ademco_id|event gg zone]`(有空格)。当事件类型为 `NULL/ACK/DUH` 时 `data` 段为`[]`;当事件类型为 `ADM-CID/HENG-BO` 时 `data` 段格式为 `[#ademco_id|event gg zone]`:
  * `#ademco_id` 主机的安定宝ID,以 `#` 开头的4位或6位或8位十六进制数字,我司使用固定6位,如安定宝ID `16` 编码为6位是 `000010`,传输为 `#000010`。
  * `event` 定长4Bytes,事件代码,具体含义见后文。
  * `gg` 定长2 Bytes, 一般为00,当非00时有特殊含义,参考下方 *4.1 事件报告与远程控制*
  * `zone` 防区号,范围 `0~999`。`zone` 为 `0` 表示主机自身事件,如布防、撤防、防拆等。`1~999` 则为防区号,表示防区事件。定长3 Bytes。
* `*xdata` 可选的字段,一般情况下留空,仅有限几种情况需要带 `xdata`:撤防时使用 `xdata` 传输密码、索要防区信息时使用 `xdata` 做串口命令透传。具体格式参考下方 *4.2 xdata 段格式*。
* `timestamp` 时间戳字段,格式为 `_HH:MM:SS,mm-DD-YYYY`,定长 `20Bytes`

* `CR` 固定结束符,`0x0D`

## 三、事件码

### 事件码前缀有2种

* `1/3` 前缀,`1` 表示打开,`3` 表示关闭。如 `3400` 表示布防,`1400` 表示撤防。
* `E/R` 前缀,`E` 表示打开,`R` 表示关闭。如 `R400` 表示布防,`E400` 表示撤防。
* 报警时 `1/E` 前缀表示警情触发,`3/R` 表示警情恢复,如 `1387` 表示探测器受到强光干扰,`3387` 表示防区从光扰状态恢复。

### 主机状态

|事件码|含义|en|
|-----|----|--|
|3400|离家布防|ARM_AWAY|
|1400|撤防|DISARM|
|3456|留守布防|ARM_STAY|
|1456|留守布防|ARM_STAY_1456|

### 防区报警

|事件码|含义|en|
|-----|----|--|
|1120|紧急报警|EMERGENCY|
|1130|盗警|BURGLAR|
|1134|门铃|DOOR_RING|
|1110|火警|FIRE|
|1121|胁迫|DURESS|
|1151|煤气|GAS|
|1113|水警|WATER|
|1137|主机防拆|TAMPER|
|1383|防区防拆|ZONE_TAMPER|
|1570|旁路|BYPASS|

### 防区异常

|事件码|含义|en|
|-----|----|--|
|1301|主机AC掉电|AC_BROKE|
|1302|低电|LOW_BATTERY|
|1311|坏电|BAD_BATTERY|
|1387|光扰|SOLAR_DISTURB|
|1381|失效|DISCONNECT|
|1393|失联|LOST|
|1384|电源故障|BATTERY_EXCEPTION|
|1380|其他故障|OTHER_EXCEPTION|
|3301|主机AC复电|AC_RECOVER|
|3302|低电恢复|LOW_BATTERY_RECOVER|
|3311|坏电恢复|BAD_BATTERY_RECOVER|
|3387|光扰恢复|SOLAR_DISTURB_RECOVER|
|3381|失效恢复|DISCONNECT_RECOVER|
|3393|失联恢复|LOST_RECOVER|
|3384|电源故障恢复|BATTERY_EXCEPTION_RECOVER|
|3380|其他故障恢复|OTHER_EXCEPTION_RECOVER|
|3100|清除异常指示|CLEAR_EXCPTION|

### *恒博私有事件码*

|事件码|含义|en|
|-----|----|--|
|1485|485断开|SERIAL_485_DIS|
|3485|485连接|SERIAL_485_RECOVER|
|1700|链路挂起|CONN_HANGUP|
|3700|链路恢复|CONN_RECOVER|
|1701|撤防密码错误|DISARM_PWD_ERR|
|1702|分机探头异常|SUB_MACHINE_SENSOR_EXCEPTION|
|3702|分机探头恢复|SUB_MACHINE_SENSOR_RECOVER|
|1703|分机电源异常|SUB_MACHINE_POWER_EXCEPTION|
|3703|分机电源恢复|SUB_MACHINE_POWER_RECOVER|
|1704|串口透传|COM_PASSTHROUGH|
|2704|进入设置状态|ENTER_SET_MODE|
|3704|退出设置状态|EXIT_SET_MODE|
|1705|查询分机信息|QUERY_SUB_MACHINE|
|1706|写入主机信息|WRITE_TO_MACHINE|
|1707|主机类型--网络模块|I_AM_NET_MODULE|
|1717|主机类型--GPRS主机|I_AM_GPRS|
|1727|主机类型--液晶主机|I_AM_LCD|
|1737|主机类型--网线主机|I_AM_WIRE|
|1747|主机类型--WiFi主机(停用)|I_AM_WIFI|
|1757|主机类型--三区段主机|I_AM_3_SECTION|
|1767|主机类型--物联卡主机|I_AM_IOT|
|1777|主机类型--真彩主机|I_AM_TRUE_COLOR|
|1787|主机类型--物联卡主机|I_AM_GPRS_IOT|
|1797|主机类型--GRPS主机带电话功能|I_AM_GPRS_PHONE|
|1807|主机类型--NB报警接收主机|I_AM_NB|
|1817|主机类型--WiFi主机(新版)|I_AM_WIFI2|
|1709|手机用户SOS|PHONE_USER_SOS|
|1711|手机用户消警|PHONE_USER_CANCLE_ALARM|
|1712|主机进入设置状态|ENTER_SETTING_MODE|
|3712|主机退出设置状态|EXIT_SETTING_MODE|
|1710|主机恢复出厂设置|RESTORE_FACTORY_SETTINGS_710|
|1713|主机恢复出厂设置|RESTORE_FACTORY_SETTINGS|
|1756|物联卡|SIM_IS_IOT_CARD|
|2756|平台物联卡|SIM_IS_IOT_PLATFORM_CARD|
|3756|非物联卡|SIM_IS_NOT_IOT_CARD|
|1798|索要主机类型|WHAT_IS_YOUR_TYPE|
|1799|信号强度|SIGNAL_STRENGTH_CHANGED|
|1944|主机断线|OFFLINE|
|1946|主机上线|ONLINE|

### *恒博主机类型对照表*

*SMS指主机自身是否可以拨打电话、发送短信,不是指通过阿里语音打电话*
|事件码|主机类型|布防|撤防|半布防|设置|信号强度|防区|有线防区|SMS|内核|网络|型号|
|------|-------|----|----|-----|----|-------|----|-------|---|----|---|----|
|1707 主机类型--网络模块|3 网络模块主机|√|√|√|√| |1~999|1~8| |jjf|qfm|<ul><li>G250</li></ul>|
|1717 主机类型--GPRS主机|4 GPRS主机|√|√| |√|√|1~99| |√|wzq|qfm|<ul><li>4040G</li><li>5050G</li><li>5050G-4G</li></ul>|
|1727 主机类型--液晶主机|5 液晶主机|√|√|√|√|√|1~249| |√|jjf|qfm|<ul><li>BJQ560</li><li>BJQ560B</li></ul>|
|1737 主机类型--网线主机|6 网线主机|√|√| |√| |1~99| | |wzq|qfm|<ul><li>4040R</li><li>5050R</li></ul>|
|1757 主机类型--三区段主机|8 三区段主机|√|√| |√|√|1~191|61~68|√|jjf|qfm|<ul><li>G1000</li><li>G1000-4G</li></ul>|
|1767 主机类型--物联卡主机|9 物联卡主机|√|√| |√|√|1~60| | |jjf|qfm|<ul><li>2050-4GW</li></ul>|
|1777 主机类型--真彩主机|7 真彩主机|√|√| |√|√|1~68|1~8|√|jjf|qfm|<ul><li>G1000</li><li>G1000-4G</li></ul>|
|1787 主机类型--物联卡主机|2 简化物联卡主机|√|√| |√|√|1~99| | |wzq|qfm|<ul><li>5050G-4GW</li></ul>|
|1797 主机类型--GRPS主机带电话功能|10 GPRS主机可电话|√|√| |√|√|1~60| |√|jjf|qfm|<ul><li>2050</li></ul>|
|1807 主机类型--NB报警接收主机|11 NB报警接收主机| | | |√|√|1~999| | |||<ul></ul>|
|1817 主机类型--WiFi主机(新版)|12 WiFi主机新版|√|√| |√|√|1~99| | |wzq|qfm|<ul></ul>|


### *恒博主机型号示例图片*

|型号|示例图片|
|---|--------|
|2050|<img alt="2050" src="./主机类型/smartresize/HB-2050-web.png" />|
|2050-4GW|<img alt="2050-4GW" src="./主机类型/smartresize/HB-2050-4GW-web.png" />|
|4040G|<img alt="4040G" src="./主机类型/smartresize/HB-4040G-web.png" />|
|4040R|<img alt="4040R" src="./主机类型/smartresize/HB-4040R-web.png" />|
|5050G|<img alt="5050G" src="./主机类型/smartresize/HB-5050G-web.png" />|
|5050G-4G|<img alt="5050G-4G" src="./主机类型/smartresize/HB-5050G-4G-web.png" />|
|5050G-4GW|<img alt="5050G-4GW" src="./主机类型/smartresize/HB-5050G-4GW-web.png" />|
|5050R|<img alt="5050R" src="./主机类型/smartresize/HB-5050R-web.png" />|
|BJQ560|<img alt="BJQ560" src="./主机类型/smartresize/HB-BJQ560-web.png" />|
|BJQ560B|<img alt="BJQ560B" src="./主机类型/smartresize/HB-BJQ560B-web.png" />|
|G1000|<img alt="G1000" src="./主机类型/smartresize/HB-G1000-web.png" />|
|G1000-4G|<img alt="G1000-4G" src="./主机类型/smartresize/HB-G1000-4G-web.png" />|
|G250|<img alt="G250" src="./主机类型/smartresize/HB-G250-web.png" />|


### *恒博主机类型与支持的防区属性对照表*

* 防区属性是否支持失联报告

||00 匪警全局|01 匪警紧急|02 火警防区|03 胁迫防区|04 燃气防区|05 淹水防区|06 分机|07 遥控器|08 匪警半局|09 屏蔽防区|0A 门铃防区|0F 旁路防区|
|----|----|----|----|----|----|----|----|----|----|----|----|----|
|失联支持|√|√| |√| | |√| |√| | |√|

* 主机类型与支持的防区属性对照表

|事件码|类型|型号|00|01|02|03|04|05|06|07|08|09|0A|0F|
|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
|1707|3|<ul><li>G250</li></ul>|√|√|√|√|√|√|√|√|√|√|√| |
|1717|4|<ul><li>4040G</li><li>5050G</li><li>5050G-4G</li></ul>|√|√|√|√|√|√| |√| | | | |
|1727|5|<ul><li>BJQ560</li><li>BJQ560B</li></ul>|√|√|√|√|√|√|√|√|√|√|√|√|
|1737|6|<ul><li>4040R</li><li>5050R</li></ul>|√|√|√|√|√|√| |√| | | | |
|1757|8|<ul><li>G1000</li><li>G1000-4G</li></ul>|√|√|√|√|√|√| |√| |√|√|√|
|1767|9|<ul><li>2050-4GW</li></ul>|√|√|√|√|√|√| |√| |√|√|√|
|1777|7|<ul><li>G1000</li><li>G1000-4G</li></ul>|√|√|√|√|√|√| |√| |√|√|√|
|1787|2|<ul><li>5050G-4GW</li></ul>|√|√|√|√|√|√| |√| | | | |
|1797|10|<ul><li>2050</li></ul>|√|√|√|√|√|√| |√| | | | |
|1807|11|<ul></ul>|√|√|√|√|√|√| | | | |√| |
|1817|12|<ul></ul>|√|√|√|√|√|√| |√| | | | |

## 四、恒博扩展

### 4.1 事件报告与远程控制

`data` 段 `gg` 值含义:

|发送方|接收方|gg值(ascii字符)|含义|
|-----|------|--------------|----|
|主机|	接警中心	|00|	主机事件|
|主机|	接警中心	|01~03|	三区段主机的状态事件,区段号为gg|
|接警中心|	主机	|00|	对主机操作|
|接警中心|	主机	|01~03|	对三区段主机操作,区段号为gg|

说明:三区段主机有三个防区段,每个区段有一定数量的防区,区段可以各自布撤防。

### 4.2 `xdata` 段格式:`[len xdata…]`,长度可变

`len` 可以使用 `两个 hex 字节` 或 `四个 decimal char` 表示,主机只解析 `两个 hex 字节` 的 `xdata`。

* 使用两个 `hex`

    在 `[` 之后,使用 `2个hex` 表示 `xdata` 有效数据的长度,不包括 `'['、len本身和 ']'`

    例:`xdata` 为字符串 `ABC`,有效长度为 `3`,则数据的十六进制表示为:

    `0x5B 0x00 0x03 0x41 0x42 0x43 0x5D`

    `ASCII` 可读格式:

    `[\x0\x3ABC]`

* 使用四个 `decimal char`

    在 `[` 之后,使用4个decimal char表示 `xdata` 有效数据的长度,不包括 `'['、len本身和 ']'`

    例:`xdata` 为字符串 `ABC`,有效长度为 `3`,则数据的十六进制表示为:

    `0x5B 0x30 0x30 0x30 0x33 0x41 0x42 0x43 0x5D`

    `ASCII` 可读格式:

    `[0003ABC]`

### 4.3 备份恢复相关 (废弃)

`gg`: `EE` 分主机,`0` 直属防区,`CC` 未对码防区。

`xdata`: 使用7个字节,2字节表示长度(0x0, 0x3),有效数据3个字节,1字节状态或属性, 2字节物理地址。

`[len  status  addr_hi addr_lo]`

当 `gg` 为 `CC` 时,`xdata` 为空。

### 4.4 索要防区信息流程图(待定)

主机的 1704 回复防区信息数据格式与 4.3 备份恢复相关的格式相同。

![img](https://wangyapeng-me-1251421422.cos.ap-shanghai.myqcloud.com/hb/Retreive_zone_info.png)

### 4.5 主机信号强度变化

主机每隔一段时间向接警中心发送主机信号强度,数值由 `xdata` 传输。

有效数据1字节.

例:

信号强度 `27`,传输为 `0x27`

编码:`sig = ((十位数) << 4) | (个位数 & 0x0F)`

解码:`((sig >> 4) & 0x0F) * 10 + (sig & 0x0F)`

### 4.6 远程控制标识操作源

当事件码如下内容且(`gg` 为 `00`、或`gg`为`01`/`02`/`03`(三区段主机))时,使用 `zone` 标识操作源:

|事件码|	含义|
|-----|--------|
|400|	布撤防|
|456|	留守布防|
|120|	紧急报警|
|121|	胁迫|
|711|	手机用户消警|

防区号与操作源对照表:

```c
/* control source defs
 * 范围 0~255
 * 0: 主机
 * 1~50: 遥控器
 * 51~97: 智能家居
 * 98: 中转接警中心
 * 99: 直连接警中心
 * 100~199: 手机APP,末二位为手机尾号
 * 200: web用户,web端包括 网页,H5, 公众号,小程序等
 * 201~255: web分享用户
 * 特别注意:三区段主机,0 代表主机,1~255 都是遥控器
 */
```

|zone|name|source|
|----|----|------|
|0|MACHINE|主机|
|1|REMOTE|遥控器|
|50|REMOTE_MAX|遥控器MAX|
|51|SMART_HOME_ALEXA|Amazon Alexa|
|52|SMART_HOME_GOOGLE|Google Home|
|54|SMART_HOME_APPLE|Apple Homekit|
|55|SMART_HOME_SAMSUNG|Samsung Smartthings|
|56|SMART_HOME_ALI_GENIE|阿里天猫精灵|
|57|SMART_HOME_MI_AI|小米小爱同学|
|58|SMART_HOME_BAIDU|百度小度|
|97|SMART_HOME_MAX|智能家居MAX|
|98|CENTER_TRANSMIT|中转接警中心|
|99|CENTER_DIRECT|直连接警中心|
|100|PHONE_APP|手机APP|
|199|PHONE_APP_MAX|手机APP_MAX|
|200|OWNER|web用户|
|201|SHAREE|web分享用户|
|255|SHAREE_MAX|web分享用户MAX|

### 示例

* 主机000000布防

    "\n02130047\"HENG-BO\"0000R1234L6789#000000[#000000|3400 00 000]_17:15:29,12-09-2015\r"

* 主机000000心跳

    "\n93B30031\"NULL\"0000R1234L6789#000000[]_17:24:14,12-09-2015\r"

* 接警中心心跳回应

    "\nF0550030\"ACK\"0000R1234L6789#000000[]_17:27:09,12-09-2015\r"