AqaraHub开源项目mqtt介绍

1) 参考网站

https://github.com/Frans-Willem/AqaraHub/blob/master/documentation/mqtt-topics.md

2)zigbee 背景知识

zigbee指定了很多不同的簇,通常每一个设备都会用到其中的一个或者多个簇。例如:

  • "On/Off" 对于一个简单的状态切换设备

  • "Window Covering" 自动窗帘

  • "Temperature Measurement" 温度传感器

每一个簇都有自己的属性,例如"Temperature Measurement"簇中拥有"MeasuredValue"属性;"On/Off" 簇中拥有"On/Off"属性。

有些命令是从设备发送给网关,我们叫做输入命令("Incoming commands");有些命令从网关发送给设备,我们叫作输出命令(Outgoing commands)。

例如输出命令可以是对于"On/Off"属性可以进行"Toggle";对于"Window Covering"属性进行"Go To Lift Percentage"。输入命令可以是"IAS Zone" 簇中的"Zone Status Change Notification"。

除此之外,还有一个通用命令或全局命令列表,这些命令对所有集群都是有效的,并且没有明确定义为适用于特定的方向。例如,“报告属性”在属性更改时从设备发送到网关,或“发现属性”从网关发送到设备。

最后,一个设备可能有一个或多个可以发送和接收这些命令或属性的“端点”。多个端点的一个例子是双开关,其中左边的是端点1,右边的是端点2。对于大多数目的,将端点视为子设备就足够了。

3)Aqarahub项目如果处理命令

为了让AqaraHub正确地处理簇或命令,应该在cluster.info文件中定义它。小米Aqara设备使用的大多数集簇和命令及其参数应该已经存在,但是其他平台的可能不存在。对于任何缺少的簇、命令、属性或命令参数,可以使用“Zigbee集群库规范”的副本谷歌,并使用它来扩展cluster.info文件。如果您扩展这个文件,在Github上发出下拉请求将非常感谢。

注意:由于MQTT使用'/'分隔主题,因此将从AqaraHub的MQTT输入和输出中的集群、命令和属性名称中删除此字符。

4)输入命令(Incoming commands )

输入命令从设备到网关,然后将会触发网关将对应的消息推送给对应的mqtt主题。mqtt主题的格式如下,消息以json的格式放在mqtt负载处。

AqaraHub/[device-id]/[endpoint-id]/in/[cluster name]/[command name]

同样的,上报属性命令也会触发网关将对应的消息推送给对应的mqtt主题。mqtt主题的格式如下,消息以json的格式放在mqtt负载处。

AqaraHub/[device-id]/[endpoint-id]/in/[cluster name]/Report Attributes/[attribute name]

例如:

当按下一个aqara按钮时,AqaraHub将下面的json文件推送到AqaraHub/00158d000152d7b2/1/in/OnOff/Report Attributes主题,消息内容如下:

{
    "reports": [{
            "Attribute data": 
            {
                "type": "bool",
                "value": true
            },
            "Attribute identifier": "OnOff"
    }]
}

同时,因为这是一个报告属性命令,它同样会推送到AqaraHub/00158d000152d7b2/1/in/OnOff/Report Attributes/OnOff,推送消息内容如下:

{
    "type": "bool",
    "value": true
}

另一方面,一个水浸传感器不会以属性的方式上报,而是推送到AqaraHub/00158d0001bb8d6d/1/in/IAS Zone/Zone Status Change Notification ,推送消息为

{ 
    "Delay":0, 
    "Extended Status":[false,false,false,false,false,false,false,false], 
    "Zone ID":255,
    "Zone Status":   [true,false,false,false,false,false,false,false,
        false,false,false,false,false,false,false,false] 
}

注意:在水泄漏检测器的情况下,我们所追求的只是“区域状态”中的许多区域中的第一个区域。

5)输出命令(Outgoing commands)

输入命令是从网关发送到设备,可以将对应的json 发送到对应的mqtt主题上。同样的,如果你没有参数可以发送了一个空消息。输出命令有2种方式。1种是将消息推送到对应的全路径主题,一种是将子主题写到json里面。

例如:

我们要操作窗帘。

方式1:

将下面json推送到AqaraHub/00158d000152d7b2/1/out/Window Covering/Go to Lift Percentage主题。

{
    "Percentage Lift Value": 50
}

方式2:

将下面json推送到AqaraHub/00158d000152d7b2/1/out/Window Covering主题。

{
    "command": "Go To Lift Percentage",
    "arguments": 
    {
        "Percentage Lift Value": 50
    }
}

这两种方式是等同的。

原文AqaraHub开源项目mqtt说明,我是抄过来的。建议大家看看原文。

你可能感兴趣的:(zigbee,通讯)