目录
- 1. 前言
- 2. 搭建Homeassistant 家庭助手
- 2.1 环境要求:Pytho3 & pip3
- 2.1.1 Python系列之包管理工具pip3
- 2.1.2 pip3 常用命令
- 2.2 安装&启动HA
- 2.2.1 安装homeassistant依赖的python库
- 2.2.2 启动Hass
- 2.2.3 整理搭建问题
- 2.2.3.1 AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK
- 2.2.3.2 error while attempting to bind on address ('::', 8123, 0, 0): address already in use
- 2.2.3.3 多次重复安装,还是失败
- 2.2.3.4 一直下载失败
- 2.2.3.5 pip3.9 找不到对应目录
- 2.2.3.6 hass启动过程中提示 libXXXX.so.3: cannot open shared object file: No such file or directory
- 3. 关联巴法云MQTT设备云
- 3.1 巴法云创建主题 light002
- 3.2 homeassistant配置规则映射
- 3.2.1 .homeassistant文件夹创建 mqtts.yaml
- 3.2.2 修改 configuration.yaml 文件
- 3.2.3 找到mqtt设置,配置连接信息
- 3.2.4 概览添加巴法云 light灯
- 3.2.5 整理搭建问题
- 4. 设置树莓派开机自启动hass
- 4.1 生成一个home-assistant.service文件
- 4.2 给home-assistant.service创建一个链接
- 4.3 使用 systemctl 命令设置自启动
- 5. 总结
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2022-10-29 ❤️
- ❤️ 本篇更新记录 2022-10-29 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥
1. 前言
Home Assistant
是一个开源的智能家居系统软件,主要有两大功能:
- 能接入所有平台的智能设备,打破不同厂商之间的壁垒,即使是不支持联网的传统家电,也可以通过 DIY 一些传感器和开关将其整合到 HA 中;
- 可以自由地编程与控制,完全定制自动化场景,满足一切需求,万物互联,如你所愿。
基于HA可以连接各种外部设备(智能设备、摄像头、邮件、短消息、云服务等),手动或按照自己的需求自动的连接这些设备,构建随心所欲的智慧空间。
Home Assistant 是一个基于
Python 3
开发的开源家庭自动化平台。可以跟踪和控制家庭中的所有设备,并实现自动化控制。 可以完美的运行在Raspberry Pi
。
HomeAssistant官方支持以下几种安装方式:
- Home Assistant Operating System
官方推荐的安装方式,HassOS
是专门优化出的支持Home Assistant的操作系统,能够管理Home Assistant Core进程,并预安装了加载项。 - Home Assistant Container
基于Docker容器安装。 - Home Assistant Core
在系统python环境或python虚拟环境中安装。也是我们本篇的重点。 - Home Assistant Supervised
相对繁琐的安装方式,可在常规linux系统上使用。
2. 搭建Homeassistant 家庭助手
2.1 环境要求:Pytho3 & pip3
分别输入命令:
- python3 -V
- pip3 -V
测试表明,不换速度也很快哈哈哈
。我们这里可以先试试不换的效果。
pip是Python的一款软件安装包,在安装HA前需对其换国内镜像源,树莓派输入命令::
- 备份
sudo cp pip.conf pip.conf.bak
- 修改源
sudo nano pip,conf
打开文件后,用一下命令内容覆盖原有内容(
测试表明,不换速度也很快哈哈哈
):
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://www.piwheels.org/simple
ctrl+o
保存,之后
回车
确认,然后
ctrl+x
退出。
2.1.1 Python系列之包管理工具pip3
pip3(Python3 Install Package
)是python3用来管理包的工具,可以用来安装、升级、卸载第三方库,当然也可以查看包信息,更加可以发布自己所写的包到Pypi。
pip3的用法,在命令行直接输入命令pip3,回车后,会有很命令的选项说明与帮助:
默认情况下树莓派系统自带了pip3工具,当然如果没有也没有关系,我们给它下一个。
- 安装setuptools工具
- wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz
- tar -zxvf setuptools-19.6.tar.gz
- cd setuptools-19.6/
- python3 setup.py build
- python3 setup.py install
- 安装pip3
- wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-20.3.4.tar.gz
- tar -zxvf pip-20.3.4.tar.gz
- cd pip-20.3.4/
- python3 setup.py build
- python3 setup.py install
ln -s /usr/local/bin/pip3 /usr/bin/pip3
ln -s /usr/local/bin/pip /usr/bin/pip
最后面这两条命令很关键,有些下载不到就是因为这个目录不对。
- 查看pip3版本
- pip3 -V
2.1.2 pip3 常用命令
- 安装包
- pip3 install <包名> <包名> <包名> <包名>
- pip3 install --upgrade <包名> <包名> <包名> <包名>
- 查看已安装包
pip3 list
- 查看已安装包信息、安装位置
pip3 show <包名>
也可以看到 homeassistant依赖了非常多的包。
- 卸载包
pip3 uninstall <包名>
2.2 安装&启动HA
2.2.1 安装homeassistant依赖的python库
- sudo pip3 install sqlalchemy
- sudo pip3 install pillow
- sudo pip3 install aiohttp-cors
输入命令:
sudo pip3 install homeassistant
因为homeassistant会依赖很多包,所以如果遇到某一个包下载失败,可以使用命令:
sudo pip3 install <包名>
如果在安装第三方库时出现报错"These Packages Do Not Match The Hashes From The Requirements File.问题,通常是因为网速问题导致的下载错误,导致对应的哈希值不匹配。
解决方法:需要在pip时,添加"–upgrade"参数即可。通常这时下载还会报错timeout,因此多加一个"–default-timeout=100000" 更为保险(timeout的赋值可以视情况变化)。
- sudo pip3 install --upgrade <包名>
经验总结:
通过Python安装的方式,最麻烦的就是各个库版本问题以及依赖问题。需要慢慢一个个解决。最好的方式还是直接安装 homeassistant 的OS系统,树莓派可支持该系统。
- 如果一直无法成功,也可以尝试删掉.homeassistant文件,看看会不会是旧版本影响。
2.2.2 启动Hass
输入命令
hass --open-ui
(启动成功会帮我我们自动打开web)
或者
hass -v (会打印启动过程中的日志)
上面这个图还是有问题的,解决方法看 2.2.3.6
小节
随便输入一个账号密码。博主这里是:
- dpjcn
- 123456
2.2.3 整理搭建问题
2.2.3.1 AttributeError: module ‘lib’ has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK
AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
解决思路:主要原因是系统当前的python和pyOpenSSL版本不对应。
卸载再重装pyOpenSSL。
- pip3 uninstall pyOpenSSL
- pip3 install pyOpenSSL
2.2.3.2 error while attempting to bind on address (‘::’, 8123, 0, 0): address already in use
- 端口占用问题,提示我 8123端口有人用了。
2022-10-30 06:29:46.292 ERROR (MainThread) [homeassistant.components.http] Failed to create HTTP server at port 8123: [Errno 98] error while attempting to bind on address (‘::’, 8123, 0, 0): address already in use
解决方法:找到对应端口,kill掉对应PID
就两条命令:
- netstat -anp | grep 8123
- sudo kill -9 <PID号>
2.2.3.3 多次重复安装,还是失败
- 如果发现安装过多次,最好是删掉历史配置文件。
我们也顺便看看文件夹里面有什么文件。
2.2.3.4 一直下载失败
- 如果一直下载失败,最好换成国内镜像源。
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://www.piwheels.org/simple
2.2.3.5 pip3.9 找不到对应目录
原因:安装的时候没有做到sysemlink关联。可以查看目录
/usr/local/bin/pip3
和/usr/bin/pip
以及/usr/local/bin/pip3.9
ln -s /usr/local/bin/pip3 /usr/bin/pip3
ln -s /usr/local/bin/pip /usr/bin/pip
ln -s /usr/local/bin/pip3.9 /usr/bin/pip3.9
2.2.3.6 hass启动过程中提示 libXXXX.so.3: cannot open shared object file: No such file or directory
解决思路:
输入三条命令:
- sudo apt-get install libatlas-base-dev
- pip3 uninstall numpy # remove previously installed version
- apt install python3-numpy
3. 关联巴法云MQTT设备云
上面说了那么多,那么我们怎么把物联网设备关联到homeassistant。
这里我们选择巴法云mqtt来配置。
参考官方文档:
3.1 巴法云创建主题 light002
3.2 homeassistant配置规则映射
这里主要是处理.homeassistant
文件下的 configuration.yaml
文件。
3.2.1 .homeassistant文件夹创建 mqtts.yaml
输入命令
sudo touch mqtts.yaml
sudo nano mqtts.yaml
填入以下内容:
GNU nano 5.4 mqtts.yaml
#客户端ID
client_id: xxxxxxxx
light:
- name: "巴法云Light"
# 订阅主题
state_topic: "light002"
# 发布命令的主题
command_topic: "light002"
# 命令格式 on 开灯 和 off 关灯
payload_on: "on"
payload_off: "off"
xxxxxxxx 是自己在巴法云上面的私钥。保存一下这个文件。
3.2.2 修改 configuration.yaml 文件
输入命令
sudo nano configuration.yaml
填入以下内容:
GNU nano 5.4 configuration.yaml
# Loads default set of integrations. Do not remove.
default_config:
# Text to speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
mqtt: !include mqtts.yaml
保存文件之后,重启一下树莓派。
sudo reboot
3.2.3 找到mqtt设置,配置连接信息
3.2.4 概览添加巴法云 light灯
- 找到我们的巴法云灯
操作一下开关看看,是不是状态也同步到巴法云那边。
这样接入就是OK了。
3.2.5 整理搭建问题
- 一些老版本的文档用其他的配置,会导致失败。
2022-10-30 08:36:56.637 WARNING (MainThread) [homeassistant.components.mqtt.mixins] Manually configured MQTT light(s) found under platform key ‘light’, please move to the mqtt integration key, see https://www.home-assistant.io/integrations/light.mqtt/#new_format
2022-10-30 08:36:56.665 WARNING (MainThread) [homeassistant.components.mqtt] The ‘broker’ option near /home/pi/.homeassistant/configuration.yaml:14 is deprecated, please remove it from your configuration
2022-10-30 08:36:56.675 WARNING (MainThread) [homeassistant.components.mqtt] The ‘port’ option near /home/pi/.homeassistant/configuration.yaml:14 is deprecated, please remove it from your configuration
2022-10-30 08:36:56.764 WARNING (MainThread) [homeassistant.components.mqtt.mixins] MQTT integration is not setup, skipping setup of manually configured MQTT light
2022-10-30 08:37:09.782 WARNING (MainThread) [homeassistant.setup] Setup of default_config is taking over 10 seconds.
解决思路:新旧版本问题。
4. 设置树莓派开机自启动hass
4.1 生成一个home-assistant.service文件
这里我们参考其他软件,直接复制一个,比如参考pm2.
输入命令:
sudo cp pm2-pi.service home-assistant.service
修改文件内容:
sudo nano home-assistant.service
[Unit]
Description=Home Assistant
After=network.target
[Service]
Type=simple
User=pi
ExecStart=/usr/local/bin/hass
[Install]
WantedBy=multi-user.target
保存文件。
课外知识:我们也看看/usr/local/bin/hass内容是什么?
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from homeassistant.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
这里是直接执行一个脚本。目测也没有停止命令。
4.2 给home-assistant.service创建一个链接
输入命令:
sudo ln -s /etc/systemd/system/home-assistant.service /etc/systemd/system/multi-user.target.wants/home-assistant.service
4.3 使用 systemctl 命令设置自启动
输入命令:
sudo systemctl start home-assistant
这次我们重启一下看看。
sudo reboot
等几分钟,我们再用浏览器访问一下或者命令行查看一下。
输入命令:
netstat -anp | grep 8123
留个小问题?要屏蔽自启动要怎么做?
- systemctl命令
- 直接干掉链接文件
5. 总结
虽然用docker或者 hass os系统的方式可以免除这些操作坑,但作为一个爱好者还是希望能拆拆坑。从头到尾在树莓派官方推荐系统上安装Homeassistant 并且解决所遇到的所有问题(包括各种依赖包、链接文件、下载等等),同时也是为了折腾linux下的一些学习经验。