我如何将新设备添加到SmartThings Hub,第1部分

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



开发入门花了我很多时间,但是在启发了对大多数文档仔细研究后,进一步的开发不再需要太多的工作。 因此,决定撰写此文章是为了帮助俄语用户的工作。

整个开发过程在GroThy语言SmartThings IDE Web应用程序中进行。 从移动设备执行测试更加方便,但是,可以在同一开发环境中创建设备模拟器。 在测试图形外壳的情况下,已经需要使用SmartThings Classic移动应用程序( AndroidiOS )。

插入式设备是一个板,可让您向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的1​​6位值。 制造商及其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" } ... } 


计划了完整的文章周期,直到发布为止。 希望这些信息对您的发展有所帮助。

Source: https://habr.com/ru/post/zh-CN427923/


All Articles