在本文中,我想谈谈我在开发所谓的SmartThings设备处理程序方面的经验。 任务是添加基于Z-Wave协议的通用设备
-Z-Uno以及与其连接的子设备的处理。

开发入门花了我很多时间,但是在
启发了对大多数文档
的仔细研究后,进一步的开发不再需要太多的工作。 因此,决定撰写此文章是为了帮助俄语用户的工作。
整个开发过程在GroThy语言SmartThings IDE Web应用程序中进行。 从移动设备执行测试更加方便,但是,可以在同一开发环境中创建设备模拟器。 在测试图形外壳的情况下,已经需要使用SmartThings Classic移动应用程序(
Android和
iOS )。
插入式设备是一个板,可让您向Z-Wave中的几乎所有设备添加控制。 此外,连接的设备可以是不同的编号(最多32个)。 因此,在软件级别,还必须处理所有类型的连接设备,并控制输出到应用程序。
处理类型列表:
- 开关二进制-只有两个位置的设备:打开/关闭
- 切换多级-可以关闭或打开的设备具有不同的含义。 例如,二聚体。
- 多级传感器-发送非二进制值的传感器。 例如,温度传感器。
- 仪表-计数器等设备
- 通知-二进制传感器将属于这种类型。 例如,一个簧片开关。
- 温控器-负责温控器工作的独立团队
文件结构
可以区分两个逻辑块:
- 有关处理程序的描述和元信息。 这包括有关设备,如何绘制UI以及其他信息的信息。 它是通过
metadata()
方法分配的。

- 处理程序方法是处理程序逻辑。 他们负责与设备的“通信”。
另外,我们可以区分parse()方法,该方法解释从设备接收的命令。
我将在系列文章中更详细地描述每个块的目的和内容。
元数据
从方法名称可以看到,其中包含元信息。
让我们按顺序考虑此块中包含的内容:
定义()
在此方法中,参数分别指示三件事:处理程序的名称,名称空间和作者的名称。
- 以后在发布和创建子设备时将使用处理程序的名称。
- 当按名称搜索处理程序时,使用名称空间来确保找到正确的名称空间,例如,在具有相同名称的处理程序中。 SmartThings建议在github上使用您的昵称。
- 作者姓名将用您的姓名填写。
definition(name: "Your device", namespace: "yournamespace", author: "your name") {}
可以在方法的主体中声明以下变量:
attribute, capability, command, fingerprint
。 此外,我们将更详细地考虑什么是什么以及何时应用。
连接和指纹
我们连接设备。 在我们的案例中,将使用SmartThings V2 Hub和
Z-Uno 。
在添加新的Z-Wave或ZigBee设备时,集线器将尝试识别他们尝试连接的设备类型,并开始寻找最相关的处理程序。 他将通过“指纹”进行选择。 如果中心在自定义处理程序中找不到匹配项,它将尝试使用最接近的标准模板之一。
在处理程序本身中设置“指纹”以指示其支持的设备类型。 官方文档说,对于Z-Wave设备和ZigBee设备,它们将有所不同,我们将考虑Z-Wave的实现。
Z-Wave协议设备存储有关其制造商,设备类型,功能等的信息。 在所谓的设备“访问”期间,ST会在Z-Wave原始描述中收集此信息。 这样一行的示例:
zw:Ss type:2101 mfr:0086 prod:0102 model:0064 ver:1.04 zwv:4.05 lib:03 cc:5E,86,72,98,84 ccOut:5A sec:59,85,73,71,80,30,31,70,7A role:06 ff:8C07 ui:8C07
每个键的值用于填写“指纹”。 可以在
此处找到每个项目的详细说明。 我们将考虑将在处理程序中使用的那些。
为了找到包含信息的行,您需要转到“我的设备”选项卡,然后单击我们感兴趣的设备(在此之前,必须将设备添加到网络中)。
mfr是包含制造商ID的16位值。 制造商及其ID的列表可在
此处找到。
prod-包含产品类型ID的16位值-唯一的设备类型ID。
模型是一个包含产品ID的16位值。
inClusters-一个8位的值,用于确定是否需要特定的命令类。 例如,如果我们需要表明我们的处理程序将与MultiChannel CC一起使用,则需要编写其代码0x60。 可在
此处找到SmartThings
CC的可用列表。
这四个键足以使集线器准确了解此处理程序属于哪个设备。 有关如何与我一起使用的示例:
fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60"
设备可以具有大量参数,在这种情况下,它可以成功连接到此处理程序,但是,如果其中至少一个与声明的指纹不匹配,则设备将忽略此处理程序。
Smartthings建议在指纹中添加有关制造商(mfr)和型号(产品,型号)的信息,以排除处理器选择不明显的情况。 例如,当默认使用的模板或示例之一的指纹与您的模板或指纹匹配时。
代码中的位置
metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... }
计划了完整的文章周期,直到发布为止。 希望这些信息对您的发展有所帮助。