Webhook
如果开发者不能对接 MQTT 服务,可以使用 Webhook 推送的方式接收实时数据的推送。Webhook 的功能是将传感器数据和事件消息通过 HTTP POST 命令实时发送到指定的 URL(服务器),为保护您的数据安全,请使用 HTTPS URL。
SENSORO 服务器在 5 秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空字符串,SENSORO 服务器不会对此作任何处理,并且不会发起重试。
一、填写服务器配置
登陆 IoT 云平台官网后,在平台官网的 开发者
- 消息推送设置
,填写开发者 Webhook 地址, 其中 URL 必须支持 POST 请求方法,因为数据是通过 POST 的方式推送。
在平台官网 高级功能
- 开发者
, 得到对应的 AppID, AppKey 和 AppSecret。
- AppID 作为应用唯一标示符
- AppKey 作为消息加密解密秘钥
- AppSecret 作为消息签名密钥
同时,开发者可选择消息加解密方式:
模式的选择与服务器配置在提交后都会立即生效,开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择安全模式需要提前配置好相关加解密代码。
注: 推送数据包括三种内容: 传感器上报的实时数据、传感器状态改变相关数据、传感器下行任务的结果
二、传感器数据推送(传感器上报的实时数据)
当 终端
向云平台上传数据包时,SENSORO 服务器将 JSON 数据包 POST 请求到开发者填写的 Webhook 地址。
标准设备上只有一个传感器,所以推送的数据包中只有一种传感器数据,以下请求示例枚举所有传感器类型的数据.
注意
:
1. α 开发者套件或者 α 传输模块推送的传感器数据只有 `customer` 字段, 需要对 customer 做数据解析。
2. α 开发者套件默认解析规则如下:
第 0 个字节: 前缀,解析时跳过
第 1~4 个字节: 温度数据,float型小端模式
第 5~8 个字节: 湿度数据,float型小端模式
第 9~12 个字节: 光线数据,float型小端模式
请求参数举例
Request: {
appId: '123456789ABC',
sn: '0117C9XXXX',
type: 'text', // 消息类型, text 普通消息
deviceType: 'node',
createdTime: '',
msgId: '', //消息 id
band: 'SE433', // 频段
rssi: -50, // 信号强度
snr: 11.5, // 信噪比
data: { // 明文
battery: Int, //电池电量
temperature: float,
light: float,
humidity: float
},
encryptData: '' // 安全模式开启后的加密密文
}
参数说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
appId |
是 |
String |
123456789ABC |
系统分配给应用的唯一标示符, 可在云平台 开发者 -基本设置 获取 |
sn |
是 |
String |
1122334455667788 |
终端设备标示符, 即升哲传感器或者传输模块的唯一序列号 |
type |
是 |
String |
text |
表明此数据包是传感器数据推送消息 |
deviceType |
是 |
String |
chip |
设备类型 |
createdTime |
是 |
Number |
1490611396441 |
云平台接收到消息的时间 |
msgId |
是 |
Number |
587c90931755e87f7fb41361 |
消息 Id,为避免重复, 传感器或传输模块上传的每条数据 id 不同 |
band |
是 |
String |
SE433 |
设备所属频段取值范围: ['SE433', 'US915', 'SE915', 'SE470', 'SE780', 'EU868', 'EU433', 'AS923'] |
rssi |
是 |
Number |
-50 |
信号强度, 取值范围:[-127,127] |
snr |
是 |
Number |
11.2 |
信噪比,取值范围:[-20, 20] |
data |
是 |
Object |
{ co2: 20, interval:60 } |
包含各设备类型特有字段 |
hardwareVersion |
是 |
String |
C2 |
表明此数据包是传感器数据推送消息 |
firmwareVersion |
是 |
String |
1.2 |
表明此数据包是传感器数据推送消息 |
注: 以下各表中 .
表明包含层级。
- 1.设备类型: α 芯片 和 α 模块, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
chip |
取值范围: module or chip |
data.customer |
是 |
String |
'10080018003202100538c601' |
用户自定义传感器数据 |
- 2.设备类型: α 传感器, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
node |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.temperature |
是 |
Number |
20 |
温度值 (°C) |
data.humidity |
是 |
Number |
20 |
湿度值 (%) |
data.light |
是 |
Number |
20 |
光线值 (Lux) |
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
co |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.co |
是 |
Number |
20 |
一氧化碳浓度(ppm) |
threshold.co.alarmHigh |
是 |
Number |
20 |
一氧化碳浓度紧急报警阈值(ppm) |
- 4.设备类型: α 二氧化碳, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
co2 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.co2 |
是 |
Number |
20 |
二氧化碳浓度 (ppm) |
threshold.co2.alarmHigh |
是 |
Number |
20 |
二化碳浓度紧急报警阈值(ppm) |
- 5.设备类型: α 二氧化氮, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
no2 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.no2 |
是 |
Number |
20 |
二氧化氮浓度(ppm) |
threshold.no2.alarmHigh |
是 |
Number |
20 |
二化氮浓度紧急报警阈值(ppm) |
- 6.设备类型: α 二氧化硫, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
so2 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.so2 |
是 |
Number |
20 |
二氧化硫浓度(ppm) |
threshold.so2.alarmHigh |
是 |
Number |
20 |
二化硫浓度紧急报警阈值(ppm) |
- 7.设备类型: α 天然气, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
ch4 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.ch4 |
是 |
Number |
20 |
甲烷浓度(ppm) |
threshold.ch4.alarmHigh |
是 |
Number |
20 |
甲烷浓度紧急报警阈值(ppm) |
- 8.设备类型: α 臭氧, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
o3 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.o3 |
是 |
Number |
20 |
臭氧浓度(ppm) |
threshold.o3.alarmHigh |
是 |
Number |
20 |
臭氧浓度紧急报警阈值(ppm) |
- 9.设备类型: α 氨气, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
nh3 |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.nh3 |
是 |
Number |
20 |
氨气浓度(ppm) |
threshold.nh3.alarmHigh |
是 |
Number |
20 |
氨气浓度紧急报警阈值(ppm) |
- 10.设备类型: α TVOC, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
tvoc |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.ch2o |
是 |
Number |
20 |
甲醛浓度 |
threshold.ch2o.alarmHigh |
是 |
Number |
20 |
甲醛浓度紧急报警阈值(ppm) |
- 11.设备类型: α PM, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
pm |
设备类型取值固定为示例值 |
interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.pm1 |
是 |
Number |
20 |
空气质量 pm1 (ug/m3) |
data.pm2_5 |
是 |
Number |
20 |
空气质量 pm2.5(ug/m3) |
data.pm10 |
是 |
Number |
20 |
空气质量 pm10(ug/m3) |
threshold.pm1.alarmHigh |
是 |
Number |
20 |
pm1 紧急报警阈值(ug/m3) |
threshold.pm2_5.alarmHigh |
是 |
Number |
20 |
pm2.5 紧急报警阈值(ug/m3) |
threshold.pm10.alarmHigh |
是 |
Number |
20 |
pm10 紧急报警阈值(ug/m3) |
- 12.设备类型: α 液化石油气, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
lpg |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.lpg |
是 |
Number |
20 |
液化石油气浓度(ppm) |
threshold.lpg.alarmHigh |
是 |
Number |
20 |
液化石油气浓度紧急报警阈值(ppm) |
- 13.设备类型: α 烟雾, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
smoke |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.smoke |
是 |
Number |
1 |
传感器是否报警(1:报警,0:正常) |
- 14.设备类型: α 倾角, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
angle |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.angle |
是 |
Number |
20 |
温度值 |
- 15.设备类型: α 温湿度, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
humi_temp |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.temperature |
是 |
Number |
20 |
温度值 (°C) |
data.humidity |
是 |
Number |
20 |
湿度值 (%) |
threshold.temperature.alarmHigh |
是 |
Number |
200 |
温度紧急报警阈值(°C) |
threshold.temperature.alarmLow |
是 |
Number |
20 |
温度紧急报警阈值(°C) |
threshold.humidity.alarmHigh |
是 |
Number |
200 |
湿度紧急报警阈值(%) |
threshold.humidity.alarmLow |
是 |
Number |
20 |
湿度紧急报警阈值(%) |
- 16.设备类型: α 跑冒滴漏, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
leak |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.leak |
是 |
Bool |
false |
是否跑冒滴漏 |
- 17.设备类型: α 灯井, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
cover |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.cover |
是 |
Bool |
true |
井盖是否存在 |
data.level |
是 |
Bool |
true |
液位是否到达标定位置 |
- 18.设备类型: α 温湿光, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
op_node |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.temperature |
是 |
Number |
20 |
温度值 (°C) |
data.humidity |
是 |
Number |
20 |
湿度值 (%) |
data.light |
是 |
Number |
20 |
光线值 (Lux) |
threshold.temperature.alarmHigh |
是 |
Number |
200 |
温度紧急报警阈值(°C) |
threshold.temperature.alarmLow |
是 |
Number |
20 |
温度紧急报警阈值(°C) |
threshold.humidity.alarmHigh |
是 |
Number |
200 |
湿度紧急报警阈值(%) |
threshold.humidity.alarmLow |
是 |
Number |
20 |
湿度紧急报警阈值(%) |
threshold.light.alarmHigh |
是 |
Number |
200 |
光线紧急报警阈值(Lux) |
threshold.light.alarmLow |
是 |
Number |
20 |
光线紧急报警阈值(Lux) |
- 19.设备类型: α 追踪器, 特有字段及
deviceType
取值说明
参数说明 |
是否必有 |
类型 |
示例值 |
说明 |
deviceType |
是 |
String |
tracker |
设备类型取值固定为示例值 |
data.interval |
是 |
Number |
60 |
设备传输周期 |
data.battery |
否 |
Number |
90 |
剩余电量百分比 |
data.customer |
是 |
Number |
10080018003202100538c601 |
原始数据 |
data.gps.latitude |
否 |
Number |
20 |
纬度值 |
data.gps.longitude |
否 |
Number |
20 |
经度值 |
data.gps.altitude |
否 |
Number |
20 |
高度值 |
返回参数说明
参数 |
是否必有 |
类型 |
示例值 |
说明 |
messages |
× |
String |
'success' |
返回参数,可返回空字符串 |
三、任务事件推送(传感器下行任务的结果)
任务下发修改 终端
上传数据周期时,任务完成时的事件推送。
请求参数举例
Request: {
appId: '123456789ABC',
sn: '0117C9XXXX',
taskId: 123,
type: 'event', //event: 事件消息
createdTime: timestamp,
msgId: '', //消息 id
resultCode: 0, //0 成功,1,失败
resultData: {}
}
参数说明
参数 |
是否必有 |
类型 |
示例值 |
说明 |
appId |
√ |
String |
|
系统分配给应用的唯一标示符,可在云平台 开发者 -基本设置 获取 |
sn |
√ |
String |
1122334455667788 |
终端设备标示符, 即升哲传感器或者传输模块的唯一序列号 |
taskId |
√ |
String |
|
下行任务的唯一 Id |
type |
√ |
String |
event |
当为终端执行云端下发任务的返回值时, type值为'event' |
createdTime |
√ |
Timestamp |
|
云平台接收到消息的时间 |
msgId |
√ |
Number |
|
消息 Id, 为避免重复, 传感器或传输模块上传的每条数据 id 不同 |
resultCode |
√ |
Number |
0 |
任务执行结果, 0 表示成功, 1 表示失败 |
resultData |
× |
Object |
|
任务回执消息详情 |
返回参数说明
参数 |
是否必有 |
类型 |
示例值 |
说明 |
messages |
× |
String |
'success' |
返回参数,可返回空字符串 |
四、传感器状态改变相关数据推送
根据设备何时上报数据及上报数据的内容,使得设备具有多种状态,当设备状态改变时,推送此种消息。
请求参数举例
Request: {
appId: '123456789ABC',
sn: '0117C9XXXX',
type: 'statusChanged',
createdTime: timestamp,
msgId: '', //消息 id
band: 'SE433',
snType: 'device',
normalStatus: 0
}
参数说明
参数 |
是否必有 |
类型 |
示例值 |
说明 |
appId |
√ |
String |
|
系统分配给应用的唯一标示符,可在云平台 开发者 -基本设置 获取 |
sn |
√ |
String |
1122334455667788 |
终端设备标示符, 即升哲传感器或者传输模块的唯一序列号 |
taskId |
√ |
String |
|
下行任务的唯一 Id |
type |
√ |
String |
event |
当为终端执行云端下发任务的返回值时, type值为'event' |
createdTime |
√ |
Timestamp |
|
云平台接收到消息的时间 |
msgId |
√ |
Number |
|
消息 Id, 为避免重复, 传感器或传输模块上传的每条数据 id 不同 |
snType |
√ |
String |
device |
基站(station)或终端设备(device) |
normalStatus |
√ |
Number |
0 |
设备当前状态 |
normalStatus 取值及含义:
normalStatus |
名称 |
说明 |
-1 |
未激活 |
从未上报过数据 |
0 |
正常 |
设备正常上报数据并且上报数据未超出阈值 |
1 |
报警 |
超过设备的报警阈值 |
2 |
紧急报警 |
- |
3 |
超时未上报 |
连续8倍周期未上报数据 |
4 |
离线 |
超时超过两天 |
返回参数说明
参数 |
是否必有 |
类型 |
示例值 |
说明 |
messages |
× |
String |
'success' |
返回参数,可返回空字符串 |
五、接收响应
当开发者服务器接收到请求后,请响应 2xx 的 HTTP 状态码。如果接收到其他 HTTP 状态码,SENSORO 会尝试重新推送 3 次,失败 3 次后将不再推送此条数据。
六、验证消息是否来自 SENSORO
为了验证消息体的合法性,开发者可用以验证消息体是来自 SENSORO 请求真实性,并对验证通过的消息体进行解密。
消息签名具体在 API权限检验
- 消息体签名。
七 、推送消息加密
选择安全模式,开发者在接收消息需要进行消息加解密, 接收事件不需要加密。通过 API 主动调用接口(修改终端配置和下行终端数据)时,不需要进行加密。
消息加密具体在 API权限校验
- 消息体加密。