这是智能家居折腾记录的第二期,本篇介绍米家产品通过本地或云端连接至Home Assistant,并通过Home Bridge桥接至HomeKit,可以通过HomeKit管理和创建自动化。

同时介绍将苹果 HomePod Mini 与Home Assistant 联动,实现媒体 AirPlay 和tts (text to speech) 的功能。

本篇完成于第五期之后,图片和资源可能会用到4、5期的内容。请跳转翻看

网络拓扑

米家直连Wi-Fi产品接入HA

我使用的为 Xiaomi Miot Auto 集成用于连接米家产品,安装于HACS,可以在HACS集成中搜索 Xiaomi Miot Auto 安装。1

HACS第三方集成

配置-->设备与服务-->集成-->添加集成 添加此集成,配置中输入米家账号密码,连接模式选择 Auto 会自动侦测并使用本地或云端方式接入Home Assistant。添加新设备后,可以在此页面勾选 更新设备列表 刷新。

配置Miot Auto集成

使用无线网络接入米家的设备,如插座 chuangmi.plug.v3、小米台灯1s yeelink.light.lamp4 可以自动通过此集成接入Home Assistant。

可以将设备添加到Home Assistant 面板

小米台灯
服务器插座

蓝牙Mesh产品板载BLE直连至HA

对于小米温湿度传感器等使用蓝牙Mesh工作的设备,无法直连小米服务器,只能通过手机或支持蓝牙Mesh的网关(多模网关、小爱音箱Pro等)连接WLAN网络,在没有上述设备的中转服务下,通过Home Assistant服务器的板载BLE也可以将蓝牙Mesh设备连接至Home Assistant。

  • 此方法已经过时,不详细介绍,请参考以下页面:

HA官方文档-mitemp-bt:https://www.home-assistant.io/integrations/mitemp_bt/

智能家居homeassistant添加小米蓝牙温湿度计2代的教程:https://zhuanlan.zhihu.com/p/510881613

写文时我已经找不到我当时使用BLE添加米家设备的文章来源了。实测我使用的旧笔记本改造的服务器,它的板载BLE信号覆盖基本能满足全房需求,但是数据取回时间不太稳定,有时间隔1秒取回,有时隔了半天也不更新数据,总之没有蓝牙网关用着可靠,故此方法不推荐长期使用。

蓝牙、Zigbee产品通过多模网关接入HA

我使用小米的多模网关来连接米家生态的蓝牙Mesh产品,如单火墙壁开关、温湿度传感器;Zigbee产品,如无线按钮,这样物联网终端能直连米家云端,并通过集成接入Home Assistant。

使用小米Gateway集成的连接方式需要破解小米网关,且对新版本支持较差,现在已不推荐使用。

使用 Xiaomi Miot Auto 集成能够自动发现通过网关连接的设备:

米家设备列表

空调伴侣 接入HA 【2022/7/12 更新】

小米空调伴侣2,能够红外遥控空调,具有功率检测的功能。由于米家放弃ZigBee,1代兼有ZigBee网关功能的空调伴侣停产。

空调伴侣在米家APP配置完成后,也可以使用 Xiaomi Miot Auto 集成连接至HA,但是截止到2022.7.12 ,此集成对空调的支持仍有些小问题。

显示室温

空调伴侣没有温度传感器,因此接入HA后不会显示 current_temperature ,将空调实体(climate)接入HomeKit后会显示室温为 21 摄氏度

参考GitHub问题: 无法获取空调伴侣设定的当前空调的工作温度 · Issue #686 · al-one/hass-xiaomi-miot · GitHub

可以再添加 Xiaomi Miot Auto 集成,选择自定义集成,选择好要设置的空调实体,在bind_sensor绑定温度实体,重启后HA和HomeKit中均会显示室温与设定温度。

控制风速

在米家APP中配置好空调后,米家APP中可以正常调整设备风速(高中低档),而HA和HomeKit中调整风速后均无反应。

参考GitHub问题:小米空調fan_mode問題 · Issue #682 · al-one/hass-xiaomi-miot · GitHub

在配置文件中配置translations以修复风速问题:

# configuration.yaml
xiaomi_miot:
  translations:
    fan_control.fan_level:
      low: low
      medium: medium
      middle: middle
      high: high
      auto: auto

或者等待集成后续版本的更新推送。

HomeKit桥接

配置Home Bridge可以将接入Home Assistant的设备桥接至Home Kit,这样能使用HA、Home Kit两套系统控制智能家居,也能配合HomePod使用Siri管理包括米家设备在内的智能家居。

在集成中搜索HomeKit,出现两个集成,上面的是HomeKit桥接,将HA中设备虚拟成HomeKit桥接,供HomeKit终端连接控制;下面的是将HomeKit设备连接至HA。2

对于只支持HomeKit的智能家居设备,若想通过HA系统控制,可以使用HomeKit控制器先连接至HA,再桥接回HomeKit。

HomeKit集成

桥接设置

在HomeKit配置中,可以选择集成模式和包含或排除的实体类型。bridge模式用于将HA中的实体桥接至HomeKit,配件模式用于将摄像头、门锁、遥控器、电视等等配件连接至HomeKit。

桥接设置

包含的实体中选择要桥接的实体,需要注意的是,在“包含的域”中选择了某种类型,在“包含的实体”中未选择相应类型的实体,默认会把该类型下的所有实体纳入桥接。

配件

根据HA官方文档2media_player, remote, lock, and camera domains 需要通过配件模式连接至HomeKit。

When exposing a Camera, Activity based remote (a remote that supports activities), Lock, or Television media player (a media_player with device class tv) to HomeKit, mode must be set to accessory, and the relevant include filter should be setup to only include a single entity.

将配件模式下包含相应的实体,会自动创建该设备的HomeKit Accessory和包含此配件的Bridge,若已有Bridge,可以删除自动创建的Bridge,再在Bridge中手动添加此配件。

配置完成后再通知栏回出现配对的二维码,使用家庭App扫描添加即可。

homekit_pairing_example

家庭面板

HomePod

自iOS 16起,iPad不再支持设置为HomeKit的家庭中枢,为此我购入了HomePod Mini,作为家庭中枢,能够执行自动化操作和远程访问控制。

HomePod可以作为媒体播放器自动检测并接入HA,显示为Apple TV,能够使用Airplay播放音频,且在2022年6月更新后能够原生支持HomePod上的tts播放。

HomePod面板

媒体

媒体播放器可以播放HA中的音视频文件,媒体文件默认在 /media ,位置与configuration配置文件路径一致。我使用的HA是Home Assistant Supervised,docker容器中的 /media 默认映射到主机的 /usr/share/hassio/media 路径,因此可以向宿主机的此路径下存放媒体文件以供播放。

但由于我的HA服务器的根目录单独分区,与home目录不再同一分区,且根目录仅存放软件之用,空间不大,因此打算将此目录换成home目录分区下的路径。遗憾的是向 /usr/share/hassio/media 路径下添加指向home目录中的软链接并不会被HA读取。

根据下面提供的方法:

https://community.home-assistant.io/t/media-folder-location/231755/17

I was also having the same issue with the supervised container installation. I found a solution with a simpler approach.

The supervised container for homeassistant mounts /usr/share/hassio/media to /media within the container. See the output of docker inspect -f '{{ .Mounts }}' homeassistant command.

So, in /etc/fstab, I added my “bind” mount point over /usr/share/hassio/media. My example line if /etc/fstab is here:

/home/media /usr/share/hassio/media none defaults,bind 0 0

When the docker container is started, it now sees the contents of /home/media where /usr/share/hassio/media is located, and that is what is /media within the homeassistant container.

可以将宿主机中的 /usr/share/hassio/media 目录与用户家目录挂载点相绑定,编辑 fstab:

sudo vim /etc/fstab
# HA media bind
/home/gakki /usr/share/hassio/media none defaults,bind 0 0

重启服务器后,HA容器自动开启并挂载此路径,这样打开媒体路径就访问的是用户的家目录了:

媒体浏览

TTS

Text-to-Speech (TTS) 可以将文本转换成声音在媒体播放器中播放出来,HA也可以使用自动化实现自动播报。3

HA默认有谷歌翻译的tts,但可能由于我的服务器在国内,谷歌的tts基本上无法使用。因此可以考虑使用微软的tts服务。

在HACS中搜索集成 Microsoft Edge TTS 安装,在 configuration.yaml 中添加默认配置:

# configuration.yaml
tts:
  - platform: edge_tts
    language: zh-CN # Default language or voice (Optional)

edge tts支持多种嗓音,可以在HACS集成介绍页面点击 list of voices 查看。

重启HA后即可使用。

调用tts

作为Windows的音响

可以使用TuneBlade,将HomePod通过AirPlay作为Windows的音频输出。由于HomePod使用Wi-Fi接入2.4G网络,在实时模式下会经常出现干扰丢包问题,使用AirPlay做播放器的延迟还是一个大问题。

参考资料