随着智能家居的发展,人们对家居设备的要求越来越高。homebridge-logic-board 是一个基于 node.js 的 npm 包,可以帮助开发者快速地将家居设备接入 HomeKit,支持自定义逻辑和触发器。本文将详细介绍如何使用 homebridge-logic-board,包括安装、配置以及实现自定义逻辑和触发器的方法。
安装
在开始之前,需要先安装 Node.js 和 Homebridge。Homebridge 是一个基于 Node.js 的智能家居网关,它允许用户使用 iOS 设备控制非 HomeKit 认证的设备。要安装 Homebridge,可以运行以下命令:
npm install -g homebridge
安装 Homebridge 后,可以使用以下命令安装 homebridge-logic-board:
npm install -g homebridge-logic-board
安装成功后,可以通过运行以下命令来验证是否已成功安装 homebridge-logic-board:
npm ls -g | grep homebridge-logic-board
配置
在安装 homebridge-logic-board 之后,需要在 Homebridge 的 config.json
文件中做一些配置。以下是一个示例配置:
-- -------------------- ---- ------- - --------- - ------- ------------- ----------- -------------------- ------- ------ ------ ------------ -- -------------- - - ------------ ------------- ------- -------- ----- ------- ----------- - - ------- ----- -- ------ ---- ------- ------- ------- -------- ----------- --------- - - ---------- ------------ ----------------- ----- -------- ---- - - - -- ------------- - - ------- --- --------- ------- -------- -------- ----------------------------- ----------- ---- ------------ ------- - - - -- ------------ -- -
在配置中,需要指定以下内容:
accessory
:必须是LogicBoard
,代表此配置是 homebridge-logic-board 的配置。name
:此逻辑板的名称。triggers
:触发器列表,用于触发一些操作。conditions
:条件列表,用于决定触发器是否可以触发。
triggers
和 conditions
中的每个对象都有以下属性:
name
:名称,可以是任何字符串,用于在 HomeKit 中标识触发器或条件。type
:类型,可以是time
(时间型)或event
(事件型)。value
:值,在时间型触发器中表示时间,在事件型触发器中表示事件路径(详见后文)。action
:如果是触发器,需要指定一个 action 数组,每个元素都代表一个操作。每个操作由以下三个属性组成:service
:服务类型,例如Lightbulb
、Switch
等。characteristic
:特征类型,例如On
、Brightness
、ContactSensorState
等。value
:特征值,例如true
、50
、contact
等。
threshold
:如果是条件,需要指定一个 threshold,代表条件的阈值。比较运算符可以是<
、<=
、=
、>
和>=
。
实现自定义逻辑和触发器
在配置完毕后,可以通过编写 JavaScript 代码来实现自定义逻辑和触发器。以下是一个例子:
-- -------------------- ---- ------- -------------- - ----- --------------- - ---------------- ------- - -------- - ---- --------- - ------------ --------------- - ------------------ ------------- - ---------------- -- --------------------------- -- ------------- -------- - -- -- - ----- ---- - --- ------- ------ --------------------------------------------------------------- -- - -- -------------- ----- - ------ ------ - -- ------------------ ---------------------------- - ----- - ----- ------ --------- --------- - - ---------- ------ ------ - ---- -------- -- -- ----- -------- ----- ----------- - --------------------------- -- ------ ------ -------------------- ----------- --------------- ---- ------- -- ---------------- ------ ---------- --- ------ -------- ------ ------ - - -- -------------- ---------------------- - ----- - ----- ------ - - -------- -- ------------ ------- - --------------- -- -------- ------ ----------------- -------- --------------- ----- -- -- - ----- --------- - ---------------------- ----- -- -------------------- --- ------- -- -- ----------- - ----- -------------------- - ---------------------------- ------------------------------ ----------- ---------------------------- - --- - -- -------- ---------- ---- --------- ------------- - ----- -------- - --- -- ------ ------- ----- --------- ----- ----- - --- ----------------------------- ------------------------------------------- -- ---- ----------- --------- -------- ---------- ---------------- - -------- --------------------- ------ --------- - -- ------------------ -- -- ---------------------------- -------------------- - ----- ----- - ---------------- --- ----- - ----- --- - --- ------ ---- -- ------ - ----- - ------------ - ------ ------ - ----- --- - ------ ---------- - - --
在此例子中,我们定义了一个 CustomAccessory
类,它继承自 homebridge-logic-board 的 Accessory
类,并实现了自己的 getServices
方法。此类有以下属性:
log
:用于记录日志。name
:逻辑板的名称。conditions
:条件列表,来自config
参数。triggers
:触发器列表,来自config
参数。now
:一个函数,返回当前时间的字符串表示(例如"19:01:23"
)。
此类有以下方法:
foo()
:一个用于测试的方法,返回字符串"bar"
。evaluateCondition(condition)
:给定一个条件,返回条件是否满足。详见config.json
中的conditions
属性。handleTrigger(trigger)
:执行一个触发器中的操作。详见config.json
中的triggers
属性。getServices()
:返回一个由 Service 和 Characteristic 组成的数组,用于让 homebridge 使用这个 accessory。
在以上例子中,我们添加了一个 Lightbulb
服务。在 handleTrigger
方法中,我们找到了对应的 Service
和 Characteristic
,并将值设为对应的 value
。
在 getServices
方法中,我们创建了一个 Lightbulb
service,并添加了一个 getter,让 accessories
数组可以被 homebridge 访问,因为 homebridge 需要通过 accessories
来获取所有的 service。
最后,我们实现了一个自定义函数 getSensorValue
,用于根据事件路径获取特定的 event。例如,在 evaluateCondition
方法中,我们得到了 value
属性,这是一个事件路径,例如 state.huesensor.lightlevel
。该函数可以通过递归地获取 value
属性中的元素来获取特定的 event 的值。
总结
homebridge-logic-board 提供了一种简单的方式,可以让开发者将非 HomeKit 认证的设备接入 HomeKit,支持自定义逻辑和触发器。使用 homebridge-logic-board,开发者可以在其自己的 JavaScript 文件中编写自定义方法,并通过逻辑板在 HomeKit 中控制非常规设备。本文详细介绍了 homebridge-logic-board 的安装和配置方法,并提供了一个完整的 JavaScript 代码示例,介绍了自定义方法的实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600566a981e8991b448e2e06