Project Things Gateway 是一个平台,使用标准化的基于 HTTP 的 API 将所有 IoT 设备整合到一个统一的框架下。目前,该平台仅支持有限数量的设备,我们需要您的帮助来扩展我们的覆盖范围!为新设备添加支持非常简单,我们将引导您完成操作。最棒的是:您可以使用您喜欢的任何编程语言!
高级概念
插件
插件 是一组代码,Gateway 运行这些代码以获得新功能,通常是新的适配器。这松散地模拟了 Firefox 中的 插件系统,其中每个插件都以新颖有趣的方式增加了 Gateway 的功能。
适配器
适配器 是一个对象,它管理与一个或多个设备的通信。这可能是非常细粒度的,例如一个适配器对象与一个 GPIO 引脚进行通信,也可能更广泛,例如一个适配器与 WiFi 上的任何数量的设备进行通信。您决定!
设备
设备 就是它,一个硬件设备,例如智能插座、灯泡或温度传感器。
属性
属性 是设备的单个属性,例如其开/关状态、能耗或颜色。
支持的语言
到目前为止,插件是用 Node.js、Python 和 Rust 编写的,Gateway 平台提供了官方的 JavaScript 和 Python 绑定。如果您想直接跳到主题,可以查看 示例列表。但是,您可以自由地使用您选择的任何语言开发插件,前提是以下内容:
- 您的插件是 正确打包的。
- 您的插件包捆绑了所有 Gateway 平台上不存在的必需依赖项。
- 如果您的包包含任何已编译的二进制文件,则必须为 armv6l 架构编译它们。 所有 Raspberry Pi 系列 都与该架构兼容。最简单的方法是在 Raspberry Pi 1/2/Zero 上构建您的包。
实现:深入细节
评估您的目标设备
首先,您需要考虑您要定位的设备。
- 您的插件将与一个还是多个设备通信?
- 插件将如何与设备通信?是否需要单独的硬件加密狗?
- 例如,Zigbee 和 Z-Wave 适配器需要单独的 USB 加密狗才能与设备通信。
- 这些设备有哪些属性?
- 您是否可以宣传现有的 Thing 类型?
- 是否有可以用来与您的设备对话的现有库?
- 您会惊讶于有多少 NPM 模块、Python 模块、C/C++ 库等存在用于与 IoT 设备通信。
关键是要充分了解您要支持的设备。
从示例开始
最简单的开发方法是从一个 现有插件 (列在下面)开始。您可以下载、复制粘贴或 git 克隆其中一个到
/home/pi/.mozilla-iot/addons/
或者,您可以在其他机器上进行开发。只需确保您在 Raspberry Pi 上进行测试。
之后,您应该编辑package.json文件,以适合您的需求。特别是,name 字段需要与您刚刚创建的目录的名称匹配。
接下来,开始编辑代码。插件生命周期的关键部分是设备创建和属性更新。设备创建通常作为发现过程的一部分发生,无论是通过 SSDP、探测串行设备还是其他方式。在发现设备后,您需要构建它们的属性列表,并确保您处理属性更改(可能是通过您获得的事件,或者您可能需要轮询您的设备)。您还需要处理来自用户的属性更新。
重新启动 Gateway 进程以测试您的更改
$ sudo systemctl restart mozilla-iot-gateway.service
彻底测试您的插件。您可以在 UI 中通过“设置->插件”菜单启用它。
发布您的插件!
运行./package.sh或您必须执行的其他任何操作来打包您的插件。将包托管在某处,例如在 Github 上作为发布。然后,向 addon-list 存储库提交拉取请求或问题。
注意
- 您的插件将在单独的进程中运行,并通过 nanomsg IPC 与 Gateway 进程通信。希望这对您来说无关紧要。
- 如果您的插件进程死亡,它将自动重新启动。
示例
Project Things 团队构建了多个插件,这些插件可以作为良好的起点和参考。
Node.js
- 示例适配器:https://github.com/mozilla-iot/example-adapter
- 虚拟事物适配器:https://github.com/mozilla-iot/virtual-things-adapter
- Zigbee 适配器:https://github.com/mozilla-iot/zigbee-adapter
- Z-Wave 适配器:https://github.com/mozilla-iot/zwave-adapter
- 飞利浦 Hue 适配器:https://github.com/mozilla-iot/philips-hue-adapter
- GPIO 适配器:https://github.com/mozilla-iot/gpio-adapter
Python
- TP-Link 适配器:https://github.com/mozilla-iot/tplink-adapter
Rust
- MQTT 适配器(正在进行中):https://github.com/hobinjk/mqtt-adapter
参考
其他文档、API 参考等,请参见此处
- Web Thing API 规范:https://iot.mozilla.org/wot/
- Node.js 适配器 API:https://github.com/mozilla-iot/wiki/wiki/Adapter-API
- 适配器 IPC API:https://github.com/mozilla-iot/wiki/wiki/Adapter-IPC
- 插件打包:https://github.com/mozilla-iot/wiki/wiki/Add-On-System-Design
- Python 插件绑定:https://github.com/mozilla-iot/gateway-addon-python
- 插件列表:https://github.com/mozilla-iot/addon-list
在我们软件中发现错误?告诉我们!我们很乐意收到问题,或者更好的是,向相应的 Github 仓库提交拉取请求。
关于 James Hobin
25 级电脑巫师,致力于保持物联网的自由和开放。
关于 Michael Stegeman
Michael 是 Mozilla 的软件工程师,负责 WebThings。
4 条评论