You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jetlinks-doc/iot-docs/best-practices/rule-engine-device-same-gro...

147 lines
3.7 KiB

2 years ago
# 当房间开门时,打开对应房间的空调
原理:
1. 利用`ReactorQL节点`来订阅设备的开门事件.
2. 利用`设备指令`节点选择相同分组内的另外一个设备.
## 创建智能门锁设备
1. 进入系统: `设备管理`-`设备产品`-`新建`。
![进入设备产品](images/rule-engine/into-device-product.png)
2. 输入产品信息以及相关信息。
![创建智能门锁设备](images/rule-engine/create-lock-product.png)
3. 点击`确定`进行保存。
4. 配置MQTT认证信息。
![mqtt认证配置](images/rule-engine/mqtt-auth.png)
5. 配置物模型。
![物模型](images/rule-engine/lock-open-event.png)
6. 应用配置。
![应用配置](images/rule-engine/deploy-lock-product.png)
7. 创建设备实例。
![创建设备](images/rule-engine/create-lock001.png)
8. 激活设备。
![激活设备](images/rule-engine/active-device-lock001.png)
::: tip 注意:
新建产品启用需要发布,此处直接点击`应用配置`按钮,则会自动发布该产品。
:::
## 创建智能空调设备
参考[创建智能门锁设备](#创建智能门锁设备)。
创建产品:
![创建智能空调设备](images/rule-engine/create-ac-product.png)
配置物模型:
![智能空调设备物模型](images/rule-engine/ac-open-function.png)
创建设备实例:
![创建智能空调设备](images/rule-engine/create-device-ac001.png)
分别激活设备产品、设备实例。
## 创建房间分组
1. 创建分组
![创建分组](images/rule-engine/create-device-group.png)
2. 关联智能门锁和智能空调。
![绑定设备](images/rule-engine/bind-device.png)
## 创建规则实例
### 创建ReactorQL节点
1. 在工作区中拖入`监听HTTP`节点。
![创建ReactorQL节点](images/rule-engine/reactorQL-node.png)
使用方式可参考工作区右侧的`节点帮助`。
2. 双击节点进入编辑页。
![update-ReactorQL](images/rule-engine/update-ReactorQL-lock.png)
使用SQL如下:
```sql
select
t.deviceId deviceId
from "/device/t-lock/*/message/event/open-door" t
```
### 创建设备指令
1. 在工作区中拖入`设备指令`节点。
![创建ReactorQL节点](images/rule-engine/device-command-node.png)
使用方式可参考工作区右侧的`节点帮助`。
2. 双击节点进入编辑页。
![update-ReactorQL](images/rule-engine/update-device-command-node.png)
选择设备输入:
```text
same_group(deviceId),product('t-smart-ac')
```
消息内容输入:
```json
{
"messageType": "INVOKE_FUNCTION",
"functionId":"open",
"inputs": []
}
```
配置完成后[启动规则](../basics-guide/course/rule-engine-nodered.md#保存)。
## 模拟器设备消息
1. 此处通过mqtt.fx来模拟智能门锁lock001(以下简称客户端lock001)
![mqttfx-lock001](images/rule-engine/mqttfx-lock001.png)
和智能空调ac001(以下简称客户端ac001) 。
![mqttfx-ac001](images/rule-engine/mqttfx-ac001.png)
点击按钮`Connect`连接平台,连接成功后,设备应为在线状态。
::: tip 注意:
同一台机器无法开启两个mqtt.fx客户端时,请在两台机器上模拟两个设备,或者启用jetlinks源码中的[模拟器](https://github.com/jetlinks/jetlinks-community/tree/master/simulator)。
:::
2. 在客户端ac001中订阅功能调用topic:`/invoke-function`。
![subscribe](images/rule-engine/subscribe-function.png)
3. 在客户端lock001中推送开门的事件,topic为`/open-door`。
![push-event](images/rule-engine/push-event.png)
4. 客户端ac001收到功能调用消息表示此规则应用成功。
![invoke-function](images/rule-engine/invoke-function.png)