先上来聊点家常,这个玩意搞了我一周有的,成本便宜的,喜欢动手的同学可以试试,第一次写博客,内容排版等很乱,大家多多包涵。

一、准备条件

硬件设备:NanoPi NEO3 、sonoff26智能插头
软件环境:MobaXterm_Personal_20.2.exe
平台: homeassistant (0.113.0)
小伙伴们硬件设备树莓派啊,sonoff其他设备均可以,软件环境可以用putty当然其他的也不错,我用的这个可视化好处在于不单单是一个黑窗口,上传下载文件等等用起来挺方便的,唯一不足的是好像不太支持中文,我也查过些许资料,最后还是失败了,如果有小伙伴们用这个能实现中文,请赶紧戳我吧!废话不多说,直接入主题!!!!

二、设置sonoff设备的一些属性

1.基础属性设置

将sonoff设备连入局域网,一般买的时候会有教程,我这里是智能插头,打开易微联手机app,点击快速添加,添加设备,按照提示输入家里的wifi账号密码,即可进行自动匹配,这时候在主页会看到如下图片

易微联 python 接口控制 易微联 api文档_linux


点击进入可以在智能插座上插入用电器,然后点击开关看看是否生效,然后点开设置属性,打开局域网控制,将固件版本升级至3+,最好是最新版本,获取设备ID,这个后面在configuration文件中需要。

易微联 python 接口控制 易微联 api文档_ubuntu_02


易微联 python 接口控制 易微联 api文档_其他_03

2. 获取devicekey

i)因为我们要通过局域网API连入HA,所以需要设备的key,我们回到app,在刚刚快速添加界面选择兼容模式配对,注意配对方式与上面不同,按照提示步骤将其匹配。
ii)匹配成功后手机或者电脑连接wifi网络ITEAD-10000,密码是12345678
iii)在浏览器中打开  http://10.10.7.1/device,获取devicekey保存本地

三、配置configuration

github国际友人做的插件https://github.com/AlexxIT/SonoffLAN.

1、下载插件

将链接中custom_components/sonoff下载解压到你的/.homeassistant/custom_components下。我使用的是插件v2.3.1版本

2、 设置配置文件

在你的configuration.yaml中配置下面内容

sonoff:
  username: '+86XXXXXXXXXXX' #你的手机号码,+86代表地区中国
  password: 'your password'  #str格式
  reload: always  #重启HA时刷新设备列表
  default_class: switch #可选
  devices: 
    1000b11cfa: #设备的id 
      devicekey: your devicekey #上面获取的devicekey
      device_class: switch #可选

四、 好戏开始

1、报错1

本以为我会很顺利的成功将sonoff设备接入homeassistant,然后并没有我想的那么简单。

2020-09-17 15:51:40 ERROR (MainThread) [homeassistant.bootstrap] Error setting up integration sonoff - received exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/setup.py", line 68, in async_setup_component
    return await task  # type: ignore
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/setup.py", line 137, in _async_setup_component
    await async_process_deps_reqs(hass, config, integration)
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/setup.py", line 322, in async_process_deps_reqs
    await requirements.async_get_integration_with_requirements(
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/requirements.py", line 77, in async_get_integration_with_requirements
    await async_process_requirements(
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/requirements.py", line 124, in async_process_requirements
    if pkg_util.is_installed(req):
  File "/usr/local/lib/python3.8/dist-packages/homeassistant/util/package.py", line 54, in is_installed
    return version(req.project_name) in req
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2978, in __contains__
    return self.specifier.contains(item, prereleases=True)
  File "/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/specifiers.py", line 703, in contains
    item = parse(item)
  File "/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/version.py", line 31, in parse
    return Version(version)
  File "/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/version.py", line 200, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object

进入sonoff,查看一些信息,看了挺多帖子,都没有标注username,password都要以字符串形式,然后连接wifi获取的devicekey的txt文件上面是apikey,要注意,在configuration文件中要改成devicekey,踩了太多坑,希望后面的小伙伴能顺利一点。

2、 报错2

本以为这些格式等小问题改完能成功搞定,结果又报错啦

2020-09-21 09:18:21 ERROR (MainThread) [homeassistant.setup] Setup failed for sonoff: Unable to import component: cannot import name 'get_random_bytes' from 'Crypto.Random' (/usr/local/lib/python3.8/dist-packages/Crypto/Random/__init__.py)

于是我按照上述路径查看是否没有这个包,我发现确实有这个包,但是还是报错,为什么会这样呢?查阅大量资料得知Crypto这个三方包很奇怪,再Python上此包叫做pycrypto,几年前此包已经停更了,然后有有了它的拓展版本pycryptodome,所以直接安装:pip install pycryptodome,(我是在linux环境下,直接安装pycryptodome,目录下的包直接是Crypto、pycryptodome-3.6.6.dist-info)如果是Windows用户,安装完此包,去找下路径 …\python\python38\lib\site-packages,然后找到文件夹crypto更改成Crypto即可。

五、大功告成

易微联 python 接口控制 易微联 api文档_其他_04

参考链接:https://bbs.hassbian.com/thread-9357-1-1.htmlhttps://bbs.hassbian.com/thread-9689-1-1.htmlhttps://github.com/AlexxIT/SonoffLAN