你好,我是郭朝斌。
在学完了这门课程的前十几讲之后,你已经对物联网有了一个从整体到细节的全面了解。我想,你现在应该迫不及待地想要动手实践了吧?
在正式进入实战篇之前,我想以智能家居领域为例,带你了解一下开源平台。
为什么选择智能家居这个领域呢?最重要的原因当然是因为实战篇的动手项目是智能家居领域的。而另一个原因是,智能家居的生态环境比较开放,很有活力,而且也更贴近我们的日常生活。
在第9讲,我提到过和工业物联网相关的一些开源项目。相比之下,工业物联网领域更加封闭,如果不是行业从业人员,你很难理解它的功能需求。
那么,什么是平台,平台有什么用呢?就拿智能家居平台来说好了,它给各种智能家居产品提供了一个统一的接入系统,让用户可以管理和控制产品,同时也为各种智能家居产品之间的联动提供了条件。
如果没有智能家居平台,那么各种智能家居产品就是一个个孤立的单品,既不能远程控制,也不能实现联动功能。
如果你买过小米的智能产品,应该接触过小米的米家平台,它就是一个典型的智能家居平台。国内类似的还有阿里巴巴的天猫精灵、京东微联和海尔U+等。国外知名的智能家居平台有苹果的Apple HomeKit、亚马逊的Amazon Echo和谷歌的Google Home等。
不过,刚才提到的这些都是商业公司运营的平台,它们使用的技术和通信协议都是公司制定的,能够选择的产品也只能是已经接入平台的产品。作为开发实践者,我们可以定制的部分非常少。
所以在这一讲,我想介绍一下智能家居的开源平台生态。
一方面,开源平台能为你提供一个现成的基础,你可以在这个基础上快速地搭建出自己的智能家居系统。而且这些平台不但可以提供丰富的特性,一般也会提供各种定制能力,方便你基于自己的需求灵活地调整。
另一方面,就算你在工作中不直接使用这些开源平台,你也可以从它们的架构设计和实现逻辑中汲取灵感。
在介绍完智能家居的开源生态之后,我还会选择其中一个开源平台,带你在树莓派开发板上运行起来,这样你也可以初步体验一下智能家居软件。
那么你觉得智能家居的开源平台多吗?我告诉你,其实非常多。这也从侧面反映出智能家居是一个非常被看好的领域。
在这一讲中,把所有的开源项目都讲一遍是不现实的,所以我精心挑选了5个热度比较高的项目介绍,供你参考。
首先要说的就是Home Assistant。由于支持丰富的硬件和软件组件,能够实现自由灵活的配置和定制开发,所以它是现在热度最高的开源平台。大量极客用户组成了庞大而活跃的社群,他们贡献了很多基于Home Assistant的开源组件和丰富的使用资料。
这些组件要怎么配置呢?在Home Assistant中,你需要通过configuration.yaml配置文件来定义你需要使用的组件以及组件之间的联动方式等。
从文件的扩展名你应该可以看出,它的配置文件使用的是YAML语言。这种语言是专门为配置文件设计的,写起来比JSON要简单得多。
另外,Home Assistant是基于Python 3语言实现的,理论上支持在任何有Python 3的系统环境中运行,当然也包括树莓派。它对于树莓派的支持非常好。
虽然是开源软件,但是我们也需要注意开源许可协议。Home Assistant的代码采用的是Apache License 2.0协议。
第2个要讲的是Domoticz,它是一个开源的家居自动化平台,可以帮你实现对智能家居设备和传感器的控制和监测等目的。除了它原生支持的设备,你还可以使用很多开源插件。当然,你也可以选择用Python语言开发自己的插件,从而支持自己特有的设备。
Domoticz主要是通过Web界面来进行自定义和配置。它还同时提供了iOS和Android两大系统的App供你查看和控制设备。
Domoticz是基于C++语言开发的。跟Python语言开发的软件不同,它还需要编译不同的安装包,这显然不够方便。不过,Domoticz官方已经为Windows和Linux系统准备了二进制安装包,包括使用ARM架构芯片的树莓派,也已经有了编译好的可执行文件。
Domoticz代码采用的是GNU General Public License v3.0(GPLv3)开源协议。
第3个要讲的是openHAB。它的出发点是提供一个家庭自动化的总线,所以在设计上尽量抽象而模糊设备本身,便于你根据需求添加设备和插件。在openHAB中,插件是通过Bindings来实现设备和openHAB内核的交换信息的。
交互界面方面,openHAB也提供了丰富的选择,包括原生的iOS和Android平台的App以及Web页面和Windows 10应用程序等。
openHAB是基于Java语言开发的。除了常见的电脑平台,它还支持用Docker镜像的方式安装使用。另外,它还专门提供了openHABian系统的镜像文件,所以在树莓派上使用openHAB软件是非常方便的。
openHAB代码采用的是Eclipse Public License 2.0开源协议。
第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开源协议。
不知道你是否还记得,我在加餐的书单推荐中提到过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个开源的智能家居平台的特性总结为一个表格,方便你随时参考。
这5个比较有代表性的智能家居开源平台,对于树莓派的支持都不错的。现在,我们就开始动手,在树莓派上安装一个开源平台,体验一下通过智能家居系统监测设备数值的过程。
使用哪个平台呢?我们就选择Gladys Assistant吧。它的优势是Web页面在手机上体验不错,不需要你去搜索或者编译手机上的App了。
其他几个开源平台的安装和使用方法都差不多。你掌握了一个,那么利用镜像文件安装其他几个也不成问题。
首先我介绍一下需要准备的器材有哪些:
树莓派板子在启动的时候,会从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,所以要在上面的页面中选择“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的编辑界面。
当然,现在传感器没有数值显示。
接下来,我们打开一个终端命令窗口,输入下面的命令:
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,然后体验了一下使用过程。
在实战篇,等你掌握了开发智能硬件的基本方法,可以将这一讲中的模拟设备替换为真实的温度传感器设备。期待你的动手实践。
而且之后,等你熟悉树莓派开发板的使用方法,你也可以在树莓派上尝试一下其它几个开源平台。它们的基本功能都比较接近,你可以根据自己喜好,或者熟悉的编程语言选择。
最后,我给你留一个思考题吧。
在这一讲的动手实验环节,我们是通过访问http://gladys.local 来查看Gladys Assistant的Dashboard等Web应用界面的。为什么我们可以通过gladys.local 域名来访问树莓派开发板呢?为什么有的老版本电脑系统不支持呢?这是使用了什么网络协议?
欢迎你在留言区写一写自己的答案,也欢迎你将这一讲分享给对智能家居 DIY感兴趣的朋友,大家一起交流学习。
评论