1.3.2 智能家居控制

优质
小牛编辑
139浏览
2023-12-01

更新时间:2019-05-28 11:40:28

目标

当前模板可以让您学习如何根据设备上报的属性控制另外的设备。相比把业务代码写入嵌入式设备,在云端可以更容易修改您的业务逻辑。

说明

有一个智能门,可以根据门磁检测门是打开还是关闭,并且屋内一侧有PIR传感器可以检测室内是否有人。我们需要实现以下的逻辑:持续监听智能门的上报。如果监听到智能门打开,判断室内是否有人——如果此时室内有人,判定用户要出门离开,发出指令关闭智能灯;如果此时室内没人,判定用户回家,发出指令打开智能灯。如果此时门关闭的时候保持原有的灯开关状态。

创建产品

本次需要创建两个产品——一个智能门(包含人体检测,开关检测两个布尔型属性),一个智能灯(开关状态一个布尔型属性)

  1. 创建一个智能门产品。

    |640x

  2. 为智能门产品添加两个布尔型功能。

    |640x

  3. 为智能门产品实例化一个设备。

    |640x

  4. 同理创建一个智能灯设备,添加一个布尔型功能,并实例化一个设备。

    |640x

    |640x

创建服务

由于本服务配置项较多,因此请在合适的时候点击顶部“服务”下拉菜单选择“保存”或点击快捷键Ctrl/Cmd + S保存您的编辑操作。我们也会每分钟为您自动保存一次。

  1. 新建一个服务,命名为“智能家居控制”。

    |640x

  2. 在左侧栏节点列表中“输入”类选择“设备触发”节点,右侧栏配置项分别选择“智能门”产品,创建的设备名以及选择监听“属性上报”。

    |640x

  3. 添加一个“路径选择”节点,条件节点相当于一个switch功能。并且把设备触发节点与路径选择节点连接起来。

    |640x

    |640x

  4. 修改右侧栏配置项——把这个条件节点改名字为“监听门开关”;把数据源设置为“设备触发”+“开门”;把路径1的第二个选择框设置为“=”“数值”“1”(表示开门),把路径2的第二个选择框设置为设置为“=”“数值”“0”,删除第三条路径。下面将介绍这一步的配置项的原理:

    |640x

    |640x

动态输入
数据在节点间传递的对象是payload,每次从外部接受输入都是通过修改payload来实现的。比如一个设备触发节点,接收到的信息如下图:

|640x

此时payload下相当于添加了deviceContext,props等子对象。对于我们关心的设备属性来讲,它在payload下面的props子对象里。再往下一层则是具体的属性名。物联网平台的设备属性上报规则,属性名下还会有time时间戳的值以及属性真正的值value。因此,假设你需要动态关联某个属性(如门开关状态DoorOpen)的动态值。需要用payload.props.DoorOpen.value来进行调用。对于条件节点来说,payload在第一个配置项选择了,因此输入框需要写入props.DoorOpen.value。
但是在第三个节点开始,payload的输入跟第一个节点不一定有关系,所以此时建议用query.props.DoorOpen.value保证调用的数据来自触发节点。

数据源——2019年6月更新
为了减少上述payload/query等变量对用户理解带来的困扰,这个版本我们把一些结构化的数据做成了表单项供用户选择。可以在数据源下拉列表查看来自其他节点的结构化数据并选择其中的单条数据。

路径
每个路径即每个条件分支,从路径1开始执行判断。如果满足条件1,则直接流转到路径1,并且不再执行余下判断(类似switch里面的break)。因此即使有条件重叠,也只会执行一条路径。同样,当所有条件都不满足时,不执行任何路径,相当于服务调用不成功。
对于我们关心的开门关门而言,在产品里功能定义是布尔型。而在传递的时候,实际传递是数字(而非字符)0和1。

|640x

  1. 同上原理所述,把业务逻辑分支也用条件节点搭建出来。

    |640x

  2. 最后加上设备节点。设备节点是以产品/设备维度去查询设备信息/下发指令的功能节点。每个项目内创建/导入的产品对应一个设备节点。我们之前添加了智能灯,将其拖到画布内。然后选择之前创建的灯的deviceName。第二个框选择“设备动作执行”(原设备指令下发)的操作类型,最后把“打开”属性设置为true(代表开灯)。这样就完成了一个路径的设备节点配置了。

    |640x

最终成果如图:

|640x

调试与验证

  1. 部署这个服务。

    |640x

  2. 点击启动使服务生效。

    |640x

  3. 点击调试前往虚拟设备页面进行调试。

    |640x

  4. 激活智慧门的虚拟设备配置属性进行上报。注意需要同时前往智能灯的虚拟设备页面激活智能灯才能接受指令。

    |640x

  5. 上报后返回服务开发查看日志。可以看到日志出现了。

    |640x

  6. 前往智能灯的设备详情,可以看到开关被设置为1(打开)了。

    |640x