Skip to content

Instantly share code, notes, and snippets.

@willwhui
Created November 2, 2017 10:25
Show Gist options
  • Save willwhui/5c3a04653154e84c1d6c54b852d57174 to your computer and use it in GitHub Desktop.
Save willwhui/5c3a04653154e84c1d6c54b852d57174 to your computer and use it in GitHub Desktop.
为hass接入小米空气净化器2
@willwhui
Copy link
Author

willwhui commented Nov 2, 2017

官方文档

https://home-assistant.io/components/fan.xiaomi_miio/

接入不成功(hass版本0.56)

配置:

- platform: xiaomi_miio
  name: "Xiaomi Air Purifier 2"
  host: 192.168.31.149
  token: !secret xiaomi_air_purifier_2_token

错误提示:

INFO (MainThread) [homeassistant.loader] Loaded fan from homeassistant.components.fan
ERROR (MainThread) [homeassistant.loader] Unable to find component fan.xiaomi_miio

正常的应该是类似这样的(一个小米扫地机器人):

INFO (MainThread) [homeassistant.loader] Loaded vacuum from homeassistant.components.vacuum
INFO (MainThread) [homeassistant.loader] Loaded vacuum.xiaomi_miio from homeassistant.components.vacuum.xiaomi_miio

@willwhui
Copy link
Author

willwhui commented Nov 2, 2017

排查:

拿小米机器人做测试:设置错误的ip或者token
结果:后台加载时不会报错,前端会显示卡片,但设备状态是"unavialable"。
所以初步结论是:配置正确,原因在别处。

在网上搜索了一下,推测这个错误在于compnents.fan中不存在xiaomi_miio这个东西
找到它的源代码:
https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/fan/xiaomi_miio.py
其中提到xiaomi_miio:

DEFAULT_NAME = 'Xiaomi Air Purifier'
PLATFORM = 'xiaomi_miio'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_HOST): cv.string,
    vol.Required(CONF_TOKEN): vol.All(cv.string, vol.Length(min=32, max=32)),
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
})

REQUIREMENTS = ['python-miio==0.3.0']

从它的2017年10月24日历史版本 home-assistant/core@e8f5445#diff-a05c234b40a362f0cc8e59fbd4c8a59f
可见,对xiaomi_miio的支持是最近才提供的。
同期,在工程中好几个地方都有这样的变更:

-REQUIREMENTS = ['python-mirobo==0.2.0']
+REQUIREMENTS = ['python-miio==0.3.0']

我目前安装的版本是0.56.2,发布时间是10月23日,因此安装的是"python-mirobo" 0.2.0,莫非就是这个原因?

@willwhui
Copy link
Author

willwhui commented Nov 2, 2017

强行接入(以后的hass新版本应该不会有这个问题)

@cxlwill 指点,如果将github.com工程中的新文件直接复制到对应的目录去,就可以识别了。
也就是说,把
https://github.com/home-assistant/home-assistant/tree/dev/homeassistant/components/fan
这个目录下的
xiaomi_miio.py
xiaomi_miio_services.yaml
这两个文件复制到hass设备的
/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/fan/

完成操作之后,重启hass,净化器确实被识别了!
在重启过程中,会触发python-miio的安装:

INFO (Thread-17) [homeassistant.util.package] Attempting install of python-miio==0.3.0

因此重启的过程会比平时长一些。
如果不幸没有安装成功的话,自行进入虚拟环境pip3安装一下python-miio,再重启hass,应该也是可以的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment