资讯中心

智能家居初探小记

发布时间:2024-01-12 资讯中心 1 次浏览

  十月中旬,临近搬家,机缘之下得到了Bosch2022 AIoT 奖学金,以此为契机,购入了一批家居物联网配件,在新家里进行了一番折腾。为期15天,体验了米家的生态,初步学习了HomeAssistant平台(后面简称HA)的使用,并把米家的设备桥接到了苹果的HomeKit里,在此做一些记录,也希望有机会能够抛砖引玉,为未来想要尝试智能家居的小伙伴排一些坑,在配置和设计上提供一些思路。

  由于厨房灯、阳台灯、走廊灯、外卫灯、入户灯为非智能灯具,故采用智能开关控制。客厅的落地灯和主卧的床头灯也非智能灯具,通过米家智能插座3控制通断。

  在装修时,已经购买了欧普的智能吸顶灯,分布于客厅、餐厅、主卧、次卧、书房和多功能房,安装后调试发现一个问题,如果用传统的开关进行通断,灯的色温、亮度会按预设的四个模式进行变换,不能让灯记住上一次开灯时的色温亮度并保持(厂商称之为记忆功能),但是连入米家APP,在软件上进行开关,灯色是可以记忆的,为此给各个房间配置了小米无线开关来控制灯的亮灭(没必要使用智能开关,因为智能开关的本质还是控制物理线路的通断),废弃原本安装好的传统开关(小坑,有点亏)。

  主卧、次卧、书房、多功能房四室,需要做灯光控制,每个房间配备一个人体传感器和一个门窗传感器;开放空间为厨房、餐厅、客厅、阳台,从北至南连贯一体,考虑以后能加装人体存在传感器(等等党终将胜利,期待子擎的Pro版人在传感器),暂时未作灯光控制。

  除大门外的入户厅使用小米人体传感器2,其余房间均使用青萍人体传感器。一开始小米和青萍的各买了一个测试:青萍耗电更多(青萍两块纽扣电池,米家一块)、探测角度更小(青萍120°,米家130°),但是CD时间短(青萍可以5秒检测一次,米家只能30秒检测一次)、光照感应可调节(青萍可调整光强触发阈值和实时监测环境光照强度,米家只能看到环境光亮/暗没有光强数值)、安装更方便(青萍是半圆磁吸底座,小米是支架安装底座),所以考虑后来补了几个青萍人体传感器,米家人体传感器2就放在大门外面,用来触发门外的入户灯。

  就性能和稳定能力而言,小米的中枢网关、多模网关2都比多模网关1性能好,不过中枢网关无Zigbee协议支持,需要多模网关作为子网关,使结构更复杂,目前的简单应用不需要这么复杂;多模网关2不再支持接入苹果Homekit,考虑到之后接入苹果生态的尝试,所以最终选择了多模网关1。

  家里智能箱放置电信的光猫、通往各个房间的交换机和搭载了软路由系统Openwrt的R2S。R2S在家庭网络系统中不仅是核心路由器的角色(放在多功能房和书房的无线路由器只负责实现无线信号覆盖,不负责IP分配,也就是不开启DHCP功能),在之后还会利用其上的Docker,部署智能家居控制中心HomeAssistant 和 内网测速服务器Iperf3 等附加服务。

  R2S已经玩了有一年多了,之前的一个出给了学弟,如今又买了一个。曾经试过恩山论坛的不少Openwrt固件,都会有各种不稳定的问题,哪怕天天定时重启也会发生两三天后断连的情况,本次使用的是Github biliwala的固件biliwala/nanopi-openwrt,这个系列的固件功能精简,但是我所需要的功能应有尽有,相对可靠稳定,最不需要操心和折腾(广告屏蔽功能有坑,开了直接上不了网,干脆不开了)。

  烧录方式格外的简单:准备一张TF卡、一个读卡器,电脑上下载BalenaEtcher烧录软件,读卡器接上TF卡插入电脑USB。下载好固件包解压出img文件,打开BalenaEtcher,选择该img文件,选择烧录对象为TF卡,烧录,Bingo~

  由于Openwrt是另一个有点复杂的系统,需要另行介绍,在此按下不表,日后有缘再续。

  目前很成熟的智能家居生态平台有华为、小米和苹果,华为平台不支持接入HA,苹果平台需要钞能力,小米平台设备最容易获得、最具性价比、可以接入HA,目前可玩性最高,所以最终选择的产品都是支持米家生态的产品。

  不同产品怎么接入米家APP,产品说明书上都清楚明白,在此就不赘述了,假设购买的设备已将全部连接入米家APP,直接开始自动化配置的操作。

  米家的自动化在有了多模网关之后,可以部分实现**本地化自动控制**(哪怕断了互联网,只要家庭内部的局域网还在运作,自动化就仍旧能运行),但是由于目前米家的限定过于严格,只有极其简单的规则才可以本地化(具体规则可参考视频怎么样让米家自动化本地运行)。比如说,“人体传感器检验测试到有人移动就开灯”是能轻松实现本地控制(设备-网关-设备)的,但是“人体传感器检验测试到有人移动,如果灯关着就开灯”已经需要经过云端了(设备-网关-米家服务器-网关-设备)。从感应到触发开灯的延时变长暂且不说,就这几年米家服务器几次崩溃,就导致了所有使用米家APP做自动化的家庭/公司无法让智能设备正常联动(所以步子也不能迈大了,好歹保留些可以物理控制 手动控制的方案)。

  为了保障家中设备在没有外网后依然可以正常联动,也为了在自动化配置上拥有更多灵活性(米家自动化毕竟是低代码平台,连个中间变量都不能引入,对于程序员老哥们并不是很舒畅),决定在R2S上用Docker容器的方式部署HA。

  由于我这回部署的位置相对特殊,是在网关上,所以要做一步网络桥接,让之后搭建的容器可当作网络中的一个子设备,拥有独立的IP,否则在之后设备接入苹果Homekit时会有问题(一开始我没注意踩坑了),如果在非网关上安装HomeAssistant,可以跳过这个步骤。

  当运行了一小段时间后,打开浏览器,输入自己设置的ip:8123(我这里是192.168.1.119:8123)就能够正常的看到已经在运行的HomeAssistant网页了。按引导进行简单的配置就能进入控制台了。

  有了平台,就好比有了一部新手机,肯定要安设一些应用,在手机上能够最终靠应用商店安装应用,HACS就是HA平台的应用商店。安装好后能安装各种前端插件和集成包,为了把米家设备连入HA,需要下载Xiaomi Gateway3 和 Xiaomi MIoT Auto集成包。

  清除浏览器缓存后(本步骤不可省略),登入HA控制台,单击左下角的管理员账户,下拉找到“高级模式”,开启高级模式。

  左下角配置-设备与服务,右下角添加集成,搜索 “HACS” ,一路点击安装。

  再次登入HA控制台,就能够正常的看到左侧栏目中增加了HACS条目,至此HACS安装完成。

  下载好集成包后重启HA,单击左下角配置-设备与服务,右下角添加集成,分别完成三个集成包的安装。

  Xiaomi Gateway 3 目的是连接所有需要多模网关联动的设备,主要是各种开关、门窗传感器和人体传感器等。

  在这里有个坑,米家的智能多模网关的固件版本和能否正常接入HA有直接关系,Github上该集成的官方描述XiaomiGateway3提供了更完整的信息,目前(2022.11)最合适的多模网关固件版本为v1.5.0_0102。需要将多模网关设置到对应固件版本号,才可以顺畅的进行自动化配置,下一小节会介绍如何刷写多模网关固件。

  Xiaomi MIoT Auto 用于连接绝大部分完全支持本地自动化控制的设备,比如各种灯、智能插座等。

  Xiaomi MIoT 用于接入一些必须要联网才能控制的设备,在Xiaomi MIoT Auto集成中,这些设备无法正常使用,如小爱音箱、扫地机器人。

  第一次添加 XiaomiGateway3 集成,能够正常的看到自己多模网关的IP地址,再一次选择添加 XiaomiGateway3 集成,就可以将多模网关连入了。根据官方文档的指引,我们应该在最后一栏输入以下代码:

  这一步激活了多模网关的telnet功能,为我们向其中刷写固件提供了可能性。

  使用MobaXterm或其他支持Telnet连接的软件登入多模网关的IP,用户名为admin。

  使用everything等软件,将我的电脑作为一个临时的HTTP服务器。

  打开浏览器,找到固件包的文件路径,将对应文件wget到多模网关里,在这里,我的电脑的IP是192.168.1.121,自己电脑的IP能够最终靠ipconfig(Windows)或ifconfig(Linux)查询到。

  至此,已完成多模网关的固件更新,再次打开HA平台的XiaomiGateway3 集成,重载多模网关或干脆删除后重新加入多模网关,一段时间后,就能够正常的看到多模网关连接的所有设备,已经连入HA成为一个个实体了。

  HA控制台中, 左下角配置-场景自动化中,可以设计各种自动化规则,网上也有很多人用NodeRed来编辑规则,我一时懒得学了,就选择直接在 场景自动化里手码了。

  在这里有一点需要说明,在配置自动化的过程中,可以尽量使用“调用服务”的方法完成设备的控制,一方面能有更丰富的控制选项,比如灯光的调色调亮,另一方面在重载各个设备或者集成重新接入时,不容易丢失设备实体名称,如果用“设备”的方法控制,在换一个容器重新载入设备的时候就会因为名称实体发生明显的变化而丢失所有和“设备”有关的自动化规则信息,算是一个小坑吧。

  入户前厅是电梯到家门口的一个小空间,这个空间四四方方非常规整,不存在什么视觉死角,要实现的功能也最简单,人来亮灯-人在保持-人走熄灯,算是作为起步练手了。

  在HA界面中能够最终靠低代码的方式 友善地完成自动化规则的编写,但不利于展示,在此直接展示在config文件夹下automations.yaml文件中的成品。

  工作空间指多功能房和书房,这两个空间内会有人长期驻留,但是动作微小,人体传感器难以察觉;也也许会出现人经过一下去一些东西就走的情况,另外,不同时间段可以配置不同的灯光效果。为了适应上述需求,引入了一个人员状态开关,设计了六条自动化规则。在此以书房为例以总结注释的形式展示运作过程。

  为了规避在房间外走动误触发状态,将人体传感器安排在房间内墙壁上方的一角,书房门外部走道不在人体传感器的检验测试范围内,实测从进入书房到调整状态,再到书房灯光控制逻辑触发开灯,延时在1秒左右,正好快要走到书房的书桌前,尚可接受。

  由于人体传感器对有人移动敏感,对无人移动不敏感,实测不管是小米人体传感器还是青萍人体传感器,都需要在房间没人后90秒到120秒才会触发不再检测到有人的状态,相当于自身加了一个两分钟左右的延迟,可惜这个延迟并不能够进一步缩短,不过也算实现了人走熄灯的功能。

  在环境条件中加了书房门为开启状态的条件,也就是说,如果我长期在房间内工作,可以关上房门,表示房间有人,这样即使我动作微小,人体传感器检验测试不到我的移动,也能保持亮灯而不触发本条自动化。

  为解决之前所述物理开关通断会强行改变灯光色温亮度问题,使用无线开关控制灯的亮灭,本条规则非常符合直觉,就是最简单的单击开关顶灯。

  3.2.2已经实现了自动化的人走熄灯,不过需要人走后90秒到120秒才会触发,因此设计了双击手动离开的规则,双击无线开关后,会先关闭人来灯亮的检测(3.2.1),延时十秒后,关闭书房人员状态,再开启人来亮灯(3.2.1)和人走熄灯(3.2.2)的自动化规则。

  书房人来检测(3.2.1) 和 书房人走检测(3.2.2)一定要通过关门锁定书房人员状态,如果想在房间内办公,又想开着门通风,那人体传感器势必会误判无人,因此,只有临时手动关闭书房人走检测,才能保持书房人员状态为开启(有人)状态。本条规则需要与上一条双击手动离开联合使用,就可以在离开房间后,重新开启“书房人走”规则。

  如果长按后无灯光变化,难以知晓长按是否成功执行,因此在此设计让房间灯光闪烁两下再恢复原态。

  此自动化 与 单击 双击 长按 无线开关 配合,既实现了夜间人来灯亮人走灯熄,又为白天开关灯、开关门等不同情景提供了可以变通的可行性。

  在此写了一个简单版本,实际上,可通过多层的条件判断,实现不同的灯光自动化效果,比如根据不同时间段设置不一样灯光亮度变化,也可设为不同灯的亮灭规则。

  休息空间指主卧与次卧,在深夜休息时,人在房间内却不要开灯,而未睡时又需要开灯照明 ,因此,在人员状态的基础上又引入了灯光状态开关和睡眠状态开关,灯光状态开关在正常照明时无需使用,在睡眠状态开关开启时作为起夜灯光开关的标志。在正常模式下(未睡眠情况),休息空间情况与工作空间基本无异,由人来检测、人走检测、无线开关单击开关灯、无线开关双击离开、无线开关长按关闭人走检测和灯光控制六项自动化规则构成。其中,灯光控制结合了灯光状态开关和睡眠开关的状态,除了夜晚固定的亮灯模式外,在每日22:00之后或者睡眠状态开关被开启之时,可开启夜灯模式。

  在上述自动化规则的基础上,又引入了进入睡眠、结束睡眠的自动化检测,还有每日22:00自动进入睡眠状态、每日9:00自动解除睡眠状态的定时规则,以增加自动化执行的稳定性。

  本规则执行的条件较为严格,经过一段时间的测试,还是定时进入睡眠状态(深夜状态)更为稳定可靠,不过在此也先写下设计的规则,待日后进一步优化。

  离家、归家相关自动化,需要记录共同生活的亲属的在家情况方可判断,在网上查阅到两种方式都能轻松实现成员是否在家的检测,分别是网络连接和地理围栏。

  对于苹果设备使用地理围栏的触发方式更简单,直接安装HomeAssistant APP,就可以实现设备地理位置的检测,安卓设备要安设 GPSLogger 等第三方软件才能轻松实现(Home Assistant 通过GPSLogger实现手机定位)。

  网络连接方式相对来说比较稳定,虽然存在20秒左右的延迟(连接上家里局域网后,需要20秒左右,才能激发为在家状态),但可靠性还能接受。使用这种方法需要在HA平台安装Nmap集成(Home Assistant判断是否在家配置最简单且相对来说比较稳定的方法)。

  为了实现离家 归家的状态自动判断,引入“家里有人-预备”和“家里有人-确认”两个状态开关,通过“离家检测”、“回家预备检测”、“回家预备状态清空”、“回家确认”、“回家异常”五个自动化规则,实现状态的触发和设备的联动。

  本文记述了购买设备、平台安装、自动化规则设置的一系列流程,然而HA圈内玩法众多,如何美化中控界面、怎么样去使用Node-Red实现更复杂高效的自动化流程,仍然有许多值得深挖玩味的地方,奈何一时时间有限,待日后另行研究记述。


  • 在线客服
  • 联系电话
    181-1877-6570
  • 二维码

    扫一扫
    加好友