Polyinterface是一个开源项目,它为智能家居设备提供了一个通用的接口,开发人员可以使用它来开发自己的智能家居设备。 Polyinterface是用Python编写的,它还有一个与之对应的npm包- polyinterface。
在这篇文章中,我们将对polyinterface npm包进行详细介绍,包括:
安装polyinterface
创建一个基本的Polyglot节点
构建Polyglot节点的配置文件
创建一个新的设备
设备状态与控制
安装polyinterface
首先,我们需要使用npm安装polyinterface。在终端中输入以下命令:
npm install polyinterface --save
安装完成后,我们就可以开始使用polyinterface了。
创建一个基本的Polyglot节点
Polyglot是一个开源的家庭自动化控制系统,它可以控制多个智能设备。让我们来创建一个最基本的Polyglot节点。
首先,我们需要创建一个名为myNode的节点对象,并将其传递给Polyglot构造函数:
const Polyglot = require('polyinterface'); const polyglot = new Polyglot('myNode');
接下来,我们需要为节点添加一个自定义的控制器:
-- -------------------- ---- ------- ----- ---------- ------- ------------------- - -------------------------- -------- -------- ----- - -------------------- -------- -------- ------ ------------- - ------- - --------------------- ---- - - ----------- - - -------------------- -------------------- ----- ------------- --- --------------
这里我们定义了一个Controller类,它扩展了Polyglot.Controller。 这个类包含了一个名为“hello”的函数,这个函数向控制台输出“hello from My Controller”。我们将这个类实例化并添加到我们的Polyglot对象中。
现在我们可以启动我们的控制器并查看控制台以确认一切正常运行:
polyglot.start();
通过运行上述代码,我们可以看到控制台中输出了“hello from My Controller”。
构建Polyglot节点的配置文件
接下来我们需要使用Polyglot构建节点的配置文件。
在前面我们已经实例化了一个Polyglot对象。现在需要重写“getConfig”函数来提供我们的节点的配置信息:
-- -------------------- ---- ------- ----- ---------- ------- ------------------- - --- ----------- - ------ - ------- ---------- ----- ------------ ------- -------------------------- -- ----- -------- - ------------- - ---------- ------------- ------- --- ------------ ------- ------------- --------- ----- --------- --- ------------ ---- - - - - - ----------------- ----- ------ --- -------------- - - ---------- --------- ------- --- ------ ------------- --- --------- -------------- ----------- - ------- --- ------ ----- --------- --------- --------- --------------------- ----------------- - - - --- -------------------- -------------------- ----- ------------- --- -------------- -----------------
getConfig返回了我们节点的配置信息。这个函数返回了当前节点的基本信息、该节点连接的IP地址和端口、连接的控制器类型、该节点包含的设备等等。
接下来,我们需要告诉Polyglot我们的节点配置信息所在的位置。在这里,我们需要通过配置文件指定用于访问该信息的端口号,从而使请求能够成功被处理。 我们还定义了我们的节点的配置信息。通过运行上述代码,我们可以启动一个Polyglot节点,它可以通过RESTful API或Web Socket API与其他设备进行通信。
创建一个新的设备
现在我们已经有了一个最基本的Polyglot节点,接下来我们将创建一个新的设备。我们需要为每个设备创建一个新的类。这个类表示一个单独的设备,它将负责处理该设备的各种状态和命令。
下面是一个示例类,它代表一个灯泡设备。该设备有一个开关状态,当灯泡打开时,“on”为true,否则为false。
-- -------------------- ---- ------- ----- ----------- ------- ------------- - -------------------------- -------- -------- ----- - -------------------- -------- -------- ------ ------------ - -------------- -------- -------- ---------- - -- - -------- - --------------------- - -------- - --------------------- - ---------- - ---------- - ---- --------------------- - --- - - - -- --------------------- - - -------------------- --------------------- ------ -------- ---------- --------------------------- -- -- - ----------------------------- ------------------------------ --- -------------------------- ------- -------- -- - -- ------ -- -------------- - -------------------------------------- - ---- -- ------ -- --------------- - --------------------------------------- - --- -----------------
这个类重写了Polyglot.Node的构造函数和onInit函数。构造函数负责为我们的设备设置驱动程序。该驱动程序是Polyglot节点-服务器的标准驱动程序。 onInit方法用于初始化设备,例如,定期查询设备的状态等。
设备必须发送每次状态变化时的信息(例如,开了一盏灯)以便节点可以更新它的状态。我们在这里使用了reportDrivers方法来更新设备的状态信息。
设备需要有一个方法来处理发送给它的指令以及设置设备的状态。在这里,我们定义了一个setOn方法,它接受一个“val”参数,并将“on”属性设置为true或false。
现在我们需要订阅一个主题(这里为“myLights/on”),这个订阅是一种发送指令(例如,打开灯)的方式。我们还需要在Polyglot节点上定义一个处理指令的函数(在这里为setOn方法)。
设备状态与控制
现在我们已经创建了一个设备,并成功与Polyglot节点进行了通信。现在,我们还需要使用RESTful API 或 Web Socket API通过Polyglot节点与其他设备进行通信。
在这里,我们将讨论如何向节点发送命令,以及如何监视设备状态的变化。对于这个示例,我们将使用RESTful API。
我们需要使用以下节点状态信息URL来获取节点状态信息:
http://localhost:8080/nodes/myNode
要查看灯泡的状态信息,您可以使用以下命令:
http://localhost:8080/nodes/myNode/Light/ST/0
为了更改灯泡的状态,我们可以使用以下命令:
http://localhost:8080/nodes/myNode/Light/ST/0?value=1
在这里,我们将“value”参数设置为1。这样我们就能把灯开了。
结论
本文介绍了如何使用Polyinterface npm包控制智能家居设备,包括如何创建一个基本的Polyglot节点以及如何创建和控制一个设备。 使用Polyinterface,您可以很容易地开发各种类型的智能家居设备,并将它们集成到一个通用的自动化控制系统中。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600672683660cf7123b36661