你好,我是郭朝斌。

在学完了这门课程的前十几讲之后,你已经对物联网有了一个从整体到细节的全面了解。我想,你现在应该迫不及待地想要动手实践了吧?

在正式进入实战篇之前,我想以智能家居领域为例,带你了解一下开源平台。

智能家居:生态开放

为什么选择智能家居这个领域呢?最重要的原因当然是因为实战篇的动手项目是智能家居领域的。而另一个原因是,智能家居的生态环境比较开放,很有活力,而且也更贴近我们的日常生活。

在第 9 讲,我提到过和工业物联网相关的一些开源项目。相比之下,工业物联网领域更加封闭,如果不是行业从业人员,你很难理解它的功能需求。

那么,什么是平台,平台有什么用呢?就拿智能家居平台来说好了,它给各种智能家居产品提供了一个统一的接入系统,让用户可以管理控制产品,同时也为各种智能家居产品之间的联动提供了条件。

如果没有智能家居平台,那么各种智能家居产品就是一个个孤立的单品,既不能远程控制,也不能实现联动功能。

如果你买过小米的智能产品,应该接触过小米的米家平台,它就是一个典型的智能家居平台。国内类似的还有阿里巴巴的天猫精灵、京东微联和海尔 U+ 等。国外知名的智能家居平台有苹果的 Apple HomeKit、亚马逊的 Amazon Echo 和谷歌的 Google Home 等。

开源平台:方便定制

不过,刚才提到的这些都是商业公司运营的平台,它们使用的技术和通信协议都是公司制定的,能够选择的产品也只能是已经接入平台的产品。作为开发实践者,我们可以定制的部分非常少。

所以在这一讲,我想介绍一下智能家居的开源平台生态。

一方面,开源平台能为你提供一个现成的基础,你可以在这个基础上快速地搭建出自己的智能家居系统。而且这些平台不但可以提供丰富的特性,一般也会提供各种定制能力,方便你基于自己的需求灵活地调整。

另一方面,就算你在工作中不直接使用这些开源平台,你也可以从它们的架构设计和实现逻辑中汲取灵感。

在介绍完智能家居的开源生态之后,我还会选择其中一个开源平台,带你在树莓派开发板上运行起来,这样你也可以初步体验一下智能家居软件。

热度比较高的开源平台

那么你觉得智能家居的开源平台多吗?我告诉你,其实非常多。这也从侧面反映出智能家居是一个非常被看好的领域。

在这一讲中,把所有的开源项目都讲一遍是不现实的,所以我精心挑选了 5 个热度比较高的项目介绍,供你参考。

  1. Home Assistant

首先要说的就是Home Assistant。由于支持丰富的硬件和软件组件,能够实现自由灵活的配置和定制开发,所以它是现在热度最高的开源平台。大量极客用户组成了庞大而活跃的社群,他们贡献了很多基于 Home Assistant 的开源组件和丰富的使用资料。

这些组件要怎么配置呢?在 Home Assistant 中,你需要通过 configuration.yaml 配置文件来定义你需要使用的组件以及组件之间的联动方式等。

从文件的扩展名你应该可以看出,它的配置文件使用的是YAML 语言。这种语言是专门为配置文件设计的,写起来比 JSON 要简单得多。

另外,Home Assistant 是基于 Python 3 语言实现的,理论上支持在任何有 Python 3 的系统环境中运行,当然也包括树莓派。它对于树莓派的支持非常好。

虽然是开源软件,但是我们也需要注意开源许可协议。Home Assistant 的代码采用的是Apache License 2.0协议。

  1. Domoticz

第 2 个要讲的是Domoticz,它是一个开源的家居自动化平台,可以帮你实现对智能家居设备和传感器的控制和监测等目的。除了它原生支持的设备,你还可以使用很多开源插件。当然,你也可以选择用 Python 语言开发自己的插件,从而支持自己特有的设备。

Domoticz 主要是通过 Web 界面来进行自定义和配置。它还同时提供了 iOS 和 Android 两大系统的 App 供你查看和控制设备。

Domoticz 是基于 C++ 语言开发的。跟 Python 语言开发的软件不同,它还需要编译不同的安装包,这显然不够方便。不过,Domoticz 官方已经为 Windows 和 Linux 系统准备了二进制安装包,包括使用 ARM 架构芯片的树莓派,也已经有了编译好的可执行文件。

Domoticz 代码采用的是GNU General Public License v3.0(GPLv3)开源协议。

  1. openHAB

第 3 个要讲的是 openHAB。它的出发点是提供一个家庭自动化的总线,所以在设计上尽量抽象而模糊设备本身,便于你根据需求添加设备和插件。在 openHAB 中,插件是通过 Bindings 来实现设备和 openHAB 内核的交换信息的。

交互界面方面,openHAB 也提供了丰富的选择,包括原生的 iOS 和 Android 平台的 App 以及 Web 页面和 Windows 10 应用程序等。

openHAB 是基于 Java 语言开发的。除了常见的电脑平台,它还支持用 Docker 镜像的方式安装使用。另外,它还专门提供了 openHABian 系统的镜像文件,所以在树莓派上使用 openHAB 软件是非常方便的。

openHAB 代码采用的是Eclipse Public License 2.0开源协议。

  1. Gladys Assistant

第 4 个要讲的是Gladys Assistant。它是一个刚刚重新设计和开发的智能家居平台。它原生支持 Z-Wave、MQTT 和小米等设备接口,并且在平台中嵌入了自己的 NLP(自然语言处理)对话引擎。你可以在平台上定义复杂的场景模式。

Gladys Assistant 的主要交互界面是 Web 页面。不过这些 Web 界面在手机上的体验也非常好,因为它是基于 PWA(Progressive Web App)实现的。PWA 技术使 Web 应用在手机的体验基本和原生 App 一致。

Gladys Assistant 使用 JavaScript 语言实现的。它对于树莓派的支持非常不错,提供了基于 Raspbian 的系统镜像。另外,通过 Docker 的方式对 MacOS 和 Windows 系统也提供了支持。

Gladys Assistant 代码采用的是 Apache License 2.0开源协议。

  1. WebThingsIO

不知道你是否还记得,我在加餐的书单推荐中提到过WoT标准。这里我要介绍的WebThingsIO项目正是 Mozilla 在领导开发的一个基于 WoT 理念的开源实现。

其中,WebThings Gateway 是一个智能家居网关软件(也就是控制中心)实现,你可以使用它提供的 Web 界面来实现对设备的查看和控制。它也支持定义联动的规则,还提供了用插件方式来扩展对其他设备的支持。

WebThings Gateway 主要是使用 JavaScript 语言实现的。它为树莓派专门制作了系统镜像文件,你可以直接烧录使用。对于常用的 Linux 系统,也可以直接通过软件包管理器安装使用。

WebThings Framework 是一个软件组件集合,你可以基于这些组件来开发支持Web Thing API的硬件设备。它有不同的编程语言实现,包括 Node.js、Python(包括 MicroPython)、Java、Rust、C++(Arduino 实现)。

WebThingsIO 的代码采用的是Mozilla Public License 2.0开源协议。

这里,我把这 5 个开源的智能家居平台的特性总结为一个表格,方便你随时参考。

Gladys Assistant 具体使用:动手实践

这 5 个比较有代表性的智能家居开源平台,对于树莓派的支持都不错的。现在,我们就开始动手,在树莓派上安装一个开源平台,体验一下通过智能家居系统监测设备数值的过程。

使用哪个平台呢?我们就选择 Gladys Assistant 吧。它的优势是 Web 页面在手机上体验不错,不需要你去搜索或者编译手机上的 App 了。

其他几个开源平台的安装和使用方法都差不多。你掌握了一个,那么利用镜像文件安装其他几个也不成问题。

第一步:准备器材

首先我介绍一下需要准备的器材有哪些:

  1. 树莓派 Raspberry Pi 4B,要求内存 2GB 以上,但是 8GB 内存版本要谨慎选择,因为有些开源平台软件对 Arm 64bit 芯片支持不够好。
  2. 供电电源,要求支持 3A 以上电流。
  3. Micro SD 卡,也叫 TF 卡,存储容量最好在 16GB 以上。在选择的时候,你要关注读写速度等级,比如 U3 表示最低写入速度是 30MB/s。同时你也要关注应用性能等级,它定义了 Micro SD 卡进行随机读写的性能,最好是选择 Application Performance Class 2(卡面上标识 A2 图标)。在卡上存储应用程序和应用程序数据时,这个性能指标非常重要。

  1. Micro SD 卡读卡器。有些电脑自带这个接口,如果没有的话,你可以买一个便宜的使用。
  2. 普通网线。如果你希望以有线的方式使用树莓派,可以准备一根。同时,我也会介绍树莓派接入 Wi-Fi 的方式。

第二步:烧录系统镜像

树莓派板子在启动的时候,会从 SD 卡读取操作系统镜像文件,完成操作系统的引导启动工作。所以我们接下来要在 SD 卡上烧录系统镜像。

具体怎么烧录呢?我们可以使用一个免费的烧录工具,Etcher。它支持 MacOS、Windows 和 Linux 三种主流的电脑系统,你可以从官方网站上下载和安装。也可以点击这个链接下载最新版。

然后,下载树莓派的系统镜像文件。树莓派有官方的操作系统镜像 Raspbian 可以选择,但是为了避免手动在 Raspbian 系统中安装 Gladys Assistant 软件的麻烦,我们直接选择官方提供的已经配置好 Gladys Assistant 的 Raspbian 镜像文件。

从这个链接中下载好镜像文件,并且解压缩得到"img"扩展名的文件。然后把 Micro SD 卡插入读卡器,或者直接插入你的电脑接口中。运行 Etcher 软件,按照步骤把镜像文件烧录到存储卡中。

树莓派支持网线接口,不过,如果你希望树莓派接入家里的 Wi-Fi 热点,而不是使用网线访问网络,那么就需要在 Micro SD 卡中增加一个配置文件。

这个配置文件的文件名必须是 wpa_supplicant.conf。你可以在电脑上使用自己熟悉的文本编辑器创建这个文件,并且在文件中输入下面的内容:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
ssid=“你的 Wi-Fi 热点 SSID 名称”
psk=“你的 Wi-Fi 热点密码”
key_mgmt=WPA-PSK
}

注意,将 Wi-Fi 热点的 SSID 和密码替换为你家里的 Wi-Fi 路由器的真实情况。

然后将这个文件拷贝到 Micro SD 卡的根目录。这时,你就可以把 Micro SD 卡插入树莓派开发板了。

第三步:启动系统

烧录好镜像文件,准备好 Micro SD 卡后,你可以把 Micro SD 卡从读卡器取出,插入树莓派的对应接口中。

接着,接上电源线(如果你使用网线方式,记得也将网线接入树莓派板的网口上)。这时树莓派将自动启动运行,需要等待一段时间。

过一会儿之后,在你的电脑上,打开浏览器,输入 “http://gladys.local” 来访问树莓派上的 Gladys Assistant 系统,如下图所示。

如果你使用的电脑系统是比较老的 Windows 版本,可能无法通过这种方式访问树莓派,而是需要将“gladys.local”替换为树莓派的 IP 地址。

怎么获取到树莓派的 IP 地址呢?你可以使用一些网络分析软件,比如 Android 手机上安装 Network Scanner,iOS 手机上安装 iNet 来扫描网络。

那么,为什么不给树莓派接一个显示器,而要通过你的电脑上的浏览器来访问呢?这是因为 Gladys Assistant 为了简化镜像,没有提供可视化的桌面环境。其实你只要熟悉了操作方法,就会发现这样的设计是非常方便的,因为你不需要为树莓派再准备个显示器了。

第四步:在 Gladys Assistant 上添加设备

因为我们是第一次配置 Gladys Assistant,所以要在上面的页面中选择“Create local account with your Email”,来创建一个本地账号。

创建完账号后,其他的步骤不是必填项,你根据喜好填写就行了。房屋配置部分,你可以创建一个名称为 bedroom 的房间,后面会用到。最后,你应该可以看到这个 Dashboard 页面。

接下来,我们来添加一个设备,来体验一下 Gladys Assistant 的功能。

那么,添加什么设备呢?我们还没有讲到实战篇的具体项目呢。不过,我们可以用电脑来模拟一个设备。你还记得第 8 讲介绍的 MQTT 协议吗?Gladys Assistant 系统支持 MQTT 通信协议的设备。所以,我们可以通过电脑终端的命令行来模拟一个设备,发送 MQTT 消息给 Gladys Assistant,让 Gladys Assistant 来展示这个设备。

首先,我们在 Gladys Assistant 上准备 MQTT Broker。选择 Dashboard 上部的标签页“Integrations”,点击 MQTT 标签。

进入 MQTT 设置界面后,你现在需要点击左边的 Setup,开始安装 MQTT Broker。我们通过默认选项,即使用 Docker 的方式来完成。

这个过程需要几分钟时间。完成后,你就可以看到 MQTT Broker 的用户名和密码。我将密码改成了 geektimetest,为了便于记忆,你也可以选择一个自己的密码。同时,你需要将用户名和密码记录下来,因为后面模拟设备发送 MQTT 消息时会用到。

接着,我们点击左边的 Device,切换到 MQTT 设备页面。点击右上角的 New 打开创建页面。设备名称我们可以选择 Temperature Sensor,External ID 填写 mqtt:bedroom:temperature-sensor。字符串中 bedroom 是和下一项房间填写的信息一致的。

然后,我们为设备添加特性(Features)。这里,我们选择 Temperature 类型。

选择完类型后,我们点击 Add feature,开始设置具体的特性参数。你可以按照下图的内容来设置自己的参数。其中,external ID 填写 mqtt:bedroom:temperature-sensor:temperature 字符串。最下面的 MQTT Topic,你需要记录下来,后面发送消息时需要用到。

点击下部的保存(Save)和返回(Back),然后我们可以看到创建完成的 MQTT 设备。

在模拟发送 MQTT 消息之前,我们还需要编辑一下 Dashboard 界面。你需要点击左上角切换回 Home 标签页,然后点击右上角的 Edit 按键。在编辑界面的 Column 1 选择 Devices in room 类别。然后依次选择 bedroom 和我们刚创建的设备 Temperature Sensor 传感器。

点击页面右下角的 Save,保存 Dashboard 的编辑界面。

当然,现在传感器没有数值显示。

第五步:模拟 MQTT 设备

接下来,我们打开一个终端命令窗口,输入下面的命令:

hbmqtt_pub -d –url mqtt://gladys:geektimetest@gladys.local:1883 -t gladys/master/device/mqtt:bedroom:temperature-sensor/feature/mqtt:bedroom:temperature-sensor:temperature/state -m 25.2

其中,gladys:geektimetest 是用户名和密码,它们以分号相连。gladys.local 是树莓派的域名。-t 后面的消息主题就是你刚才记录的 MQTT Topic 字符串。-m 后面是温度数值。

执行这个命令后,你再打开 Gladys Assistant 的 Dashboard 界面,这时你就可以看到设备卡片显示出来了刚才发送的温度数值。

小结

总结一下,在这一讲中,我介绍了智能家居开源平台的生态,并且带你动手在树莓派上安装了 Gladys Assistant,然后体验了一下使用过程。

  1. 智能家居平台为各种智能家居产品提供了一个统一的接入系统,让用户可以管理和控制产品,同时也为各种智能家居产品之间的联动提供了条件。
  2. 了解开源的智能家居平台有两大好处,一是你可以基于它们快速地搭建智能家居系统,另一个是你可以在工作中借鉴它们的设计思想和架构。
  3. 开源的智能家居平台有很多,热度比较高的平台有 5 个,分别是 Home Assistant、Domoticz、openHAB、Gladys Assistant 和 WebThingsIO。
  4. 利用开源平台,在树莓派开发板上搭建智能家居系统的一般步骤包括:准备器材,烧录系统镜像,启动系统,添加设备,接收和显示设备信息等。

在实战篇,等你掌握了开发智能硬件的基本方法,可以将这一讲中的模拟设备替换为真实的温度传感器设备。期待你的动手实践。

而且之后,等你熟悉树莓派开发板的使用方法,你也可以在树莓派上尝试一下其它几个开源平台。它们的基本功能都比较接近,你可以根据自己喜好,或者熟悉的编程语言选择。

思考题

最后,我给你留一个思考题吧。

在这一讲的动手实验环节,我们是通过访问http://gladys.local 来查看 Gladys Assistant 的 Dashboard 等 Web 应用界面的。为什么我们可以通过 gladys.local 域名来访问树莓派开发板呢?为什么有的老版本电脑系统不支持呢?这是使用了什么网络协议?

欢迎你在留言区写一写自己的答案,也欢迎你将这一讲分享给对智能家居 DIY 感兴趣的朋友,大家一起交流学习。