为初代镭豆增加 HomeKit 支持

新一代镭豆产品上市之后,我发现新款“呼吸之间”应用为了支持 HomeKit 大变样,导致我的一代镭豆永远无法在 App 里正常工作。跟厂商投诉过两次,每一次都得到热情似火的反馈,但每一次都没有解决问题。一怒之下,决定放弃原厂应用。不就是查一下全家各个房间的 PM 2.5 污染水平吗?我的山寨 Web 界面也挺好用的。

只是这个 Web 界面跑在我家内网的一台服务器上,我还没来得及给它做端口转发,导致我不在家的时候没办法查看数据。虽然可以去 InitialState 吧,但总觉得要点好多次屏幕不方便……于是我开始想,要是能把初代镭豆通过 Homebridge 增加 HomeKit 支持就好了。

需求很简单,就是从网上抓数据,然后模拟成一个空气质量设备。但实现很麻烦,毕竟 Homebridge 插件需要用 nodejs 来写。我虽然会用 Javascript 写浏览器跑马灯特效,但我完全不懂 nodejs 怎么写。还好我认识一位热心肠的高手,正好又发现了一个功能类似(从网上抓数据并模拟空气质量设备)的插件,于是就把需求、参考例子和数据源提供过去。高手不愧是高手,只用了半天就把插件写出来。手工安装之后,工作起来简直就是完美。

Laser Egg with HomeKit

腆着脸去问高手能不能发布出来,高手很大方地给了授权,于是就有了这个 Github 项目,以及这个 npm 组件。以下基本上就是此项目的 readme,TL:DR;

用法

  1. 首先你需要安装 Homebridge,需要帮助的话请访问 Homebridge 的页面
  2. 然后通过这个指令安装本插件:npm install -g homebridge-laser-egg
  3. 最后修改 config.json 配置文件增加镭豆设备。

配置

首先需要取得正确的 ID,在我之前那篇文章里提到的方法似乎已经过时,毕竟虽然简单粗糙但可用的“呼吸之间”应用已经升级为漂亮但无法正常工作的 Kaiterra 了……
每一款镭豆都有一个独立的 UDID,但他们的 API 却在使用另一个称为 Laser Egg ID 的 ID。因此,你需要调用一次厂商的 API 来获取 laser_egg_id 才可以,详细步骤如下:

  1. 打开“呼吸之间”应用(又名 Kaiterra),点击 详情 图标,看上去是一个带有 > 的圆形。
  2. 点击 配置 图标,看上去是一个带有齿轮的圆形。
  3. 设备信息 部分,你能看到蓝色的 复制 字样,点击它就可以将 UDID 字符串复制到剪贴板。
  4. 通过 Safari 访问以下链接: http://api-ios.origins-china.cn:8080/topdata/getTopByTimeId?timeId=YOUR_UDID_HERE请将链接中的 YOUR_UDID_HERE 换成上一步复制到的 UDID 字符串。
  5. 此时你应该能看到一组 JSON 数据,跟在 "id": 之后的那串数字就是 laser_egg_id。请将它复制下来,接下来的配置过程中会用到。

如果有困难,可以参考 Github 项目里的 readme files 文件夹里的截屏,那里有详细的指导。

配置示例

以下是一个配置文件的部分,假设你家有两台镭豆。

{
   "accessories":[
      {
         "accessory":"laser-egg",
         "name":"Laser Egg 1",
         "laser_egg_id":"12345",
         "polling":"5"
      },
      {
         "accessory":"laser-egg",
         "name":"Laser Egg 2",
         "laser_egg_id":"12346",
         "polling":"5"
      }
   ]
}

如果跟我一样有四台镭豆,就直接复制数组吧。记得遵循 JSON 的数据格式,不要忘记数组后面的半角逗号。
以下是各个字段的含义,所有字段都是必须填写的。

  1. accessory HomeKit 配件的名称,这里必须使用 “laser-egg” (全部为小写字母)。
  2. name 设备的名字(或昵称),这将显示在 Home 应用里。请不要设置得过长,以免被截断之后难以确认设备的位置。
  3. laser_egg_id 这将告诉插件应该去获取哪一个镭豆的数据。
  4. polling 数据抓取的间隔,以分钟为单位。我们认为五分钟已经足够,请不要滥用数据接口。

希望这个项目可以帮到大家,让各位早期用户的投资可以得到一定的保护。

此外,题图中的那个界面实际上是来自 Elgato 的 Eve 应用,因为苹果自己的 Home 应用不能读取具体的测量数值,我也不知道为什么这么残废……

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.