更新时间:2023-01-12 07:13:33下载pdf
智慧行业平台主要通过 Pulsar 主动推送各种事件数据给开发者,以满足开发者对消息实时性和消息持久化的要求。
如需对接设备消息订阅,需要通过 OEM App 或者 App SDK 的方式开发客户端。使用集智光控 App 配网的设备暂不支持推送消息到开发者。
Pulsar 是一个支持多租户、高性能的服务器到服务器之间消息通讯的解决方案。Pulsar 最初由雅虎开发,现在由 Apache 软件基金会管理。涂鸦智能基于开源的 Pulsar 系统进行了定制改进,按照涂鸦智能提供的 Pulsar SDK 可完成消息接入。
Pulsar 作为消息代理采用了 Pub/Sub(发布/订阅)的设计模式。该设计模式中,生产者将消息发布到主题,然后消费者可以订阅这些主题,处理传入消息,并在处理完成时发送确认。
当订阅被创建时(即使消息处理设备已断开连接),所有的消息都将被 Pulsar 保留。只有在消息处理设备确认消息被成功处理后,保留下来的消息才会被丢弃。
此外,一个主题可以由多个消费者订阅,并且当消费者成功处理消息时,它需要向代理发送确认,以便代理可以丢弃该消息。涂鸦智能的 Pulsar 消息分发器(Broker)为每个主题分配了多个分区,Pulsar 消息分发器将根据分区和消费者分发消息。
认证安全:
涂鸦 Pulsar 消息系统针对身份认证进行了深度定制,以满足高安全性要求。涂鸦采用动态令牌机制来增强安全,开发者可忽略实现细节,基于涂鸦提供的 SDK 即可完成认证。
数据安全:
开发者将开发者账号、授权密钥 clientId(accessId)交予智慧行业平台技术支持,开通消息订阅。
具体参考 ConsumerExample 代码,接入时需要提供以下三部分数据:
username
:开发者平台申请的云 API 授权部分的 Access ID。password
:开发者平台申请的云 API 授权部分的 Access Secret。url
(开发者根据自己的需要选择要接入的 URL):
pulsar+ssl://mqe.tuyacn.com:7285/
pulsar+ssl://mqe.tuyaus.com:7285/
pulsar+ssl://mqe.tuyaeu.com:7285/
String url = "";
String accessId = "";
String accessKey = "";
MqConsumer mqConsumer = MqConsumer.build()
.serviceUrl(url)
.accessId(accessId)
.accessKey(accessKey)
.maxRedeliverCount(3)
.messageListener(new MqConsumer.IMessageListener() {
@Override
public void onMessageArrived(Message message) throws Exception {
//write your own message processing logic
}
});
mqConsumer.start();
在获得真正的data
数据前,可以设置防篡改 MD5 签名校验。签名算法执行步骤如下:
sign
和值为空外)格式化为 key=val
。key
升序。组装后的字符串格式示例:k1=v1||k2=v2
。k1=v1||k2=v2...kn=vn||key
。sign
一致,则表明数据没有被篡改。否则视为被篡改。签名校验通过后,对数据进行解密:
accessKey
的中间 16 位代码进行解密 ,从而得到真正的设备状态数据。参数名 | 类型 | 说明 |
---|---|---|
encryptPayload | String | 消息体密文 |
sign | String | 采用指定签名算法计算出的签名 |
encryptType | String | 加密类型 |
t | Long | 13 位标准时间戳 |
v | String | 版本号 |
{
"encryptType": "aes_ecb",
"v": "1.0",
"t": 1588918073598,
"encryptPayload":"4FDEE3FE59FCD76E260******33A478EB2C2004EF4289276****",
"sign": "4b7084b3b87b550c0d967f7736e9****"
}
参数名 | 类型 | 说明 |
---|---|---|
bizCode | String | 业务类型 |
eventType | String | 事件类型 |
data | JSON | 消息数据 |
业务类型说明
bizCode | 描述 |
---|---|
device | 设备事件推送 |
voice | 语音业务推送 |
construction | 施工业务推送 |
{
"bizCode": "device",
"eventType": "dp_report",
"data": {}
}
eventType | 描述 |
---|---|
bind | 设备绑定 |
unbind | 设备解绑 |
reset | 设备重置 |
online | 设备上线 |
offline | 设备下线 |
dp_report | 设备状态上报 |
name_update | 设备名称变更 |
{
"data":{
"devId":"02200434dc4f221a****",
"deviceName":"****插座****(wifi)_0",
"gwId":"",
"location":{
"child":{
"id":"1256152666585710592",
"name":"****测试房间****"
},
"id":"1256148753241358***",
"name":""
},
"namespace":"BgdBXzUhIg5x77770LL1OfpD****",
"ownerId":"139960xx",
"position":"****书房****",
"productId":"qCY4YFq02AP0i***",
"sub":false,
"uid":"bay1588324079695k***",
"uuid":"02200434dc4f221a6***"
},
"bizCode":"device",
"eventType":"bind"
}
{
"data":{
"devId":"02200434dc4f221***",
"namespace":"****开发者对应的****namespace"
},
"bizCode":"device",
"eventType":"unbind"
}
{
"data":{
"devId":"02200434dc4f221***",
"namespace":"****开发者对应的****namespace"
},
"bizCode":"device",
"eventType":"reset"
}
{
"data":{
"devId":"02200434dc4f221a***",
"namespace":"****开发者对应的****namespace",
"time":1589019224062
},
"bizCode":"device",
"eventType":"online"
}
{
"data":{
"devId":"02200434dc4f221a6***",
"namespace":"****开发者对应的****namespace",
"time":1589019224062
},
"bizCode":"device",
"eventType":"offline"
}
{
"data":{
"devId": "002dj00118fe34***",
"productId": "开发者平台定义产品对应的产品ID",
"dataId": "145************",//全局唯一ID,标志单数据上报
"namespace":"开发者对应的namespace",
"status": [
{
"code": "switch_1",
"value": "true",
"time": 1589767589137
}
]
},
"bizCode":"device",
"eventType":"dp_report"
}
{
"data":{
"devId":"02200434dc4f221a***",
"deviceName":"****插座****",
"namespace":"****开发者对应的****namespace"
},
"bizCode":"device",
"eventType":"name_update"
}
eventType | 描述 |
---|---|
voice_nlu | 语音识别结果推送 |
voice_room_bind | 音箱房间绑定结果推送 |
{
"data":{
"devId":"6cd40b4ed084ac264bm***",
"namespace":"BgdBXzUhIg5x77770LL1OfpDw*****",
"nlu":"[{\"entities\":[{\"value\":\"电视\",\"entity\":\"deviceName\"}], \"domain\":\"mediaControl\",\"confidence\":1,\"text\":\"让电视暂停播放\",\"intent\":\"pause\"}]",
"productId":"fabze***",
"uid":"bay1588324079695k***",
"uuid":"f572ecc09e19d***"
},
"bizCode":"voice",
"eventType":"voice_nlu"
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈