npm 包 homebridge-logic-board 使用教程

阅读时长 10 分钟读完

随着智能家居的发展,人们对家居设备的要求越来越高。homebridge-logic-board 是一个基于 node.js 的 npm 包,可以帮助开发者快速地将家居设备接入 HomeKit,支持自定义逻辑和触发器。本文将详细介绍如何使用 homebridge-logic-board,包括安装、配置以及实现自定义逻辑和触发器的方法。

安装

在开始之前,需要先安装 Node.js 和 Homebridge。Homebridge 是一个基于 Node.js 的智能家居网关,它允许用户使用 iOS 设备控制非 HomeKit 认证的设备。要安装 Homebridge,可以运行以下命令:

安装 Homebridge 后,可以使用以下命令安装 homebridge-logic-board:

安装成功后,可以通过运行以下命令来验证是否已成功安装 homebridge-logic-board:

配置

在安装 homebridge-logic-board 之后,需要在 Homebridge 的 config.json 文件中做一些配置。以下是一个示例配置:

-- -------------------- ---- -------
-
  --------- -
    ------- -------------
    ----------- --------------------
    ------- ------
    ------ ------------
  --
  -------------- -
    -
      ------------ -------------
      ------- -------- ----- -------
      ----------- -
        -
          ------- ----- -- ------ ---- -------
          ------- -------
          -------- -----------
          --------- -
            -
              ---------- ------------
              ----------------- -----
              -------- ----
            -
          -
        -
      --
      ------------- -
        -
          ------- --- ---------
          ------- --------
          -------- -----------------------------
          ----------- ----
          ------------ -------
        -
      -
    -
  --
  ------------ --
-

在配置中,需要指定以下内容:

  • accessory:必须是 LogicBoard,代表此配置是 homebridge-logic-board 的配置。
  • name:此逻辑板的名称。
  • triggers:触发器列表,用于触发一些操作。
  • conditions:条件列表,用于决定触发器是否可以触发。

triggersconditions 中的每个对象都有以下属性:

  • name:名称,可以是任何字符串,用于在 HomeKit 中标识触发器或条件。
  • type:类型,可以是 time(时间型)或 event(事件型)。
  • value:值,在时间型触发器中表示时间,在事件型触发器中表示事件路径(详见后文)。
  • action:如果是触发器,需要指定一个 action 数组,每个元素都代表一个操作。每个操作由以下三个属性组成:
    • service:服务类型,例如 LightbulbSwitch 等。
    • characteristic:特征类型,例如 OnBrightnessContactSensorState 等。
    • value:特征值,例如 true50contact 等。
  • 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 方法中,我们找到了对应的 ServiceCharacteristic,并将值设为对应的 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

纠错
反馈