• 【树莓派不吃灰】搭建Homeassistant 开源智能家居平台平台(非Hass OS搭建方式),记录搭建过程的各种坑


    在这里插入图片描述

    • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件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安装和卸载以及常用命令

    • 安装包
    • 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
      1. 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
      1. 端口占用问题,提示我 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
    2.2.3.3 多次重复安装,还是失败
      1. 如果发现安装过多次,最好是删掉历史配置文件。
        在这里插入图片描述

    我们也顺便看看文件夹里面有什么文件。
    在这里插入图片描述

    2.2.3.4 一直下载失败
      1. 如果一直下载失败,最好换成国内镜像源。

    [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

    解决思路:

    Troubleshooting ImportError

    在这里插入图片描述
    在这里插入图片描述
    输入三条命令:

    • 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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    保存文件之后,重启一下树莓派。

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    保存文件。

    在这里插入图片描述
    课外知识:我们也看看/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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里是直接执行一个脚本。目测也没有停止命令。

    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下的一些学习经验。

  • 相关阅读:
    span标签的作用
    ffmpeg下载地址
    【Intel 黑客松大赛】基于YOLO的杂草-农作物检测分类系统
    5+非肿瘤+WGCNA+PPI+实验,简单WGCNA分析思路,干湿结合
    深度神经网络和人工神经网络区别
    ES6中的一些新特性
    计算机网络 - NAT技术
    html基础入门
    Elementor Pro许可证
    CVPR最佳论文:谷歌基于Spectral Volume从单图生成视频
  • 原文地址:https://blog.csdn.net/weixin_44614230/article/details/127593587