先上来聊点家常,这个玩意搞了我一周有的,成本便宜的,喜欢动手的同学可以试试,第一次写博客,内容排版等很乱,大家多多包涵。
一、准备条件
硬件设备:NanoPi NEO3 、sonoff26智能插头
软件环境:MobaXterm_Personal_20.2.exe
平台: homeassistant (0.113.0)
小伙伴们硬件设备树莓派啊,sonoff其他设备均可以,软件环境可以用putty当然其他的也不错,我用的这个可视化好处在于不单单是一个黑窗口,上传下载文件等等用起来挺方便的,唯一不足的是好像不太支持中文,我也查过些许资料,最后还是失败了,如果有小伙伴们用这个能实现中文,请赶紧戳我吧!废话不多说,直接入主题!!!!
二、设置sonoff设备的一些属性
1.基础属性设置
将sonoff设备连入局域网,一般买的时候会有教程,我这里是智能插头,打开易微联手机app,点击快速添加,添加设备,按照提示输入家里的wifi账号密码,即可进行自动匹配,这时候在主页会看到如下图片
点击进入可以在智能插座上插入用电器,然后点击开关看看是否生效,然后点开设置属性,打开局域网控制,将固件版本升级至3+,最好是最新版本,获取设备ID,这个后面在configuration文件中需要。
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即可。
五、大功告成
参考链接:https://bbs.hassbian.com/thread-9357-1-1.htmlhttps://bbs.hassbian.com/thread-9689-1-1.htmlhttps://github.com/AlexxIT/SonoffLAN