IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 智能家居系列之Home Assistant -> 正文阅读

[系统运维]智能家居系列之Home Assistant

智能家居系列之Home Assistant

智能家居话题本身就是一个技术领域,它的目的是让智能家居变得更加简单,更加实用。

系列定位

本系列的定位是智能家居入门系列。

背景

最近看了下家中的智能家居设备有一些,不能说太少,但也有几十个吧,买的时候就知道有Home Assistant可以整合各种品牌的设备,所以设备的牌子也不少,之前也体验过HA,当时通过Mac 体验的,体验并不是很好,因为电脑需要经常的携带,还是要用一个家中的常供电的设备;就找了找,发现加中国有一个坚果的安卓手机(16年的设备),那就用这个入门吧。

必要准备条件

  1. 一台可安装linux 系统的设备(如安卓手机、笔记本电脑、智能路由器)

  2. Linux Deploy

  3. BusyBox

  4. Tabby(SSH 客户端跨平台)

  5. Root 工具(King Root)

  6. 一点点耐心

系统安装

  1. 发行版GNU/Linux选择debian;架构选择armhf;发行版本选择buster;用户名和用户密码自行设置,简单一些;初始化选择启用;ssh选择启用;源改为:https://mirrors.aliyun.com/debian;空间大一点设置成8192MB。

2.之后点击左上角,选择“设置”,关闭“屏幕常亮”,钩选锁定wifi和CPU唤醒;在“环境”一栏点击“更新环境”,更新一下deploy运行的环境。

3.点击右上角,选择“安装”,之后就是耐心等待,安装完成之后会显示"<<deploy",之后点击右上角的“配置”。

4.运行完成之后点击最下面的“启动”,看到starting extra/ssh … done,以及下一行的<<< start就是启动成功了。

软件安装

  1. 用ssh方式登录到手机。

windows下可以用Tabby软件,win10可以直接用shell终端,macos下可以用自带的终端terminal,或者下载一个terminus。

使用操作自带的终端应用的话,可以直接使用命令ssh 用户名@ip地址:端口号(端口一般默认都是22,所以也可以不输入)。

  1. 登录之后用命令:

sudo su -

直接使用超级用户权限,方便操作。

3.安装python,按顺序输入以下命令

1)先更新一下apt-get组件

sudo apt-get update

sudo apt-get upgrade

上面这两条命令是更新一下系统的相关组件。

2)安装依赖库

sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev virtualenv curl wget cargo libjpeg-dev zlib1g-dev daemonize vim -y

这一条命令是安装一些必要的依赖环境,-y的意思是直接点yes确认,免得每个包都来一遍。

3)创建用户及给用户分配网络权限(独立执行软件)

sudo adduser --system homeassistant

sudo addgroup homeassistant

sudo usermod -G dialout -a homeassistant

这三条命令分别是新建用户(homeassistant)和用户组。

sudo usermod -aG aid_inet root

sudo usermod -aG aid_inet homeassitant

4)配置visudo

4)分别给root和homeassistant设置初始化密码

sudo passwd root

设定root用户的密码,方便以后用scp方式登录的时候使用。

5)安装高版本的python,按顺序输入以下命令

源码安装python,采用不覆盖现有环境的方式

    wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz


    tar xvf Python-3.9.13.tgz

    cd Python-3.9.13/

    sudo ./configure --prefix=/usr/lib/python3.9.13 --with-openssl=/usr/bin/openssl 

    make -j 2

    sudo make altinstall

通过软连接配置python3.9.13为默认的python版本

sudo mv /usr/bin/python /usr/bin/python.bak
sudo mv /usr/bin/python3 /usr/bin/python3.bak

sudo ln -s /usr/lib/python3.9.13/bin/python3.9 /usr/bin/python3

配置环境

sudo mv /usr/bin/virtualenv /usr/bin/virtualenv.bak

sudo ln -s /usr/lib/python3.9.13/bin/virtualenv /usr/bin/virtualenv
sudo pip3 install --upgrade virtualenv

通过软连接配置pithon3.9.13的pip3 为默认的pip版本


curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py

sudo ln -s /usr/lib/python3.9.13/bin/pip3.9 /usr/bin/pip3
sudo ln -s /usr/lib/python3.9.13/bin/pip3.9 /usr/bin/pip

验证pip3是否安装成功

pip3 -V
pip -V 
  1. 安装sqlite3390100
wget https://www.sqlite.org/2022/sqlite-autoconf-3390100.tar.gz
tar zxvf sqlite-autoconf-3390100.tar.gz
cd sqlite-autoconf-3390100
./configure
make -j 2
sudo make install

验证sqllite安装后的位置

ls -l /usr/local/lib/*sqlite*
ls -l /usr/local/include/*sqlite*

重新编译python3.9.13 使用sqlite3


cd sqlite-autoconf-3390100

cp sqlite3 /usr/bin/sqlite3

# 并且由于sqlite3的版本可能与高版本python有所不同,为了不产生不必要冲突,对python3.9重新编译

cd Python-3.9.13/

LD_RUN_PATH=/usr/local/lib ./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"  --prefix=/usr/lib/python3.9.13

LD_RUN_PATH=/usr/local/lib make

make -j 2

sudo make install

验证sqlite3是否安装成功

python3
import sqlite3
sqlite3.sqlite_version
  1. 建立虚拟环境
virtualenv -p python3 /srv/homeassistant

sudo mkdir /srv/homeassistant

sudo chmod 777 /srv/homeassistant

sudo chown homeassistant:homeassistant  /srv/homeassistant/

source /srv/homeassistant/bin/activate

8)在设置好后的来环境下安装homeassistant,在(homeassistant) root@ localhost:~#后边的复制下面的代码

pip3安装器的源更换为清华的国内源,这样安装会快一些。

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装homeassistant

pip3 install --upgrade pip
pip3 install --upgrade setuptools
pip3 install netdisco
pip3 install --upgrade homeassistant

运行的最后一条就是安装homeassistant,然后就是漫长的等待。等再次看到(homeassistant) root@ localhost:~#就是安装好了。

  1. 启动homeassistant

1.第一次启动使用命令:

hass

就会启动homeassistant系统。第一次启动的时间比较久,所以需要耐心等待。过个5到10分钟,就可以在浏览器中输入手机的IP地址加端口8123(默认端口),如:

http://192.168.1.24:8123

看看能否进入到系统页面。

能进入页面的话,第一步就是创建用户名和密码,进行下一步的设置。

2.在后台开启homeassistant用户进程

因为deploy是一种chroot容器,与真正在计算机不太一样,无法用常规方式做开机启动,这也是我在一开始的设置里就说要勾选INIT enable的原因。

先参考项目文档,往下找找到python environment的脚本,备用。从文档中复制,自己创建文件后编辑。

sudo touch /etc/init.d/hass-daemon
sudo vim /etc/init.d/hass-daemon

#!/bin/sh
### BEGIN INIT INFO
# Provides:          hass
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Home\ Assistant
### END INIT INFO

# /etc/init.d Service Script for Home Assistant
# Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh
PRE_EXEC="source /srv/homeassistant/bin/activate;"
# Typically /usr/bin/hass
HASS_BIN="/srv/homeassistant/bin/hass"
RUN_AS="homeassistant"
PID_DIR="/var/run/hass"
PID_FILE="$PID_DIR/hass.pid"
CONFIG_DIR="/home/$RUN_AS/.homeassistant"
LOG_DIR="/var/log/homeassistant"
LOG_FILE="$LOG_DIR/home-assistant.log"
FLAGS="-v --config $CONFIG_DIR --log-file $LOG_FILE --log-rotate-days 7"
DAEMONIZE="daemonize -c /srv/homeassistant -e $LOG_FILE.stderr -o $LOG_FILE.stdout -p $PID_FILE -l $PID_FILE -v"

start() {
  create_piddir
  if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then
    echo 'Service already running' >&2
    return 1
  fi
  echo -n 'Starting service... ' >&2
  local CMD="$PRE_EXEC $DAEMONIZE $HASS_BIN $FLAGS"
  su -s /bin/bash -c "$CMD" $RUN_AS
  if [ $? -ne 0 ]; then
    echo "Failed" >&2
  else
    echo 'Done' >&2
  fi
}

stop() {
  if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then
    echo 'Service not running' >&2
    return 1
  fi
  echo -n 'Stopping service... ' >&2
  kill $(cat "$PID_FILE")
  while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done;
  rm -f $PID_FILE
  echo 'Done' >&2
}

install() {
  echo "Installing Home Assistant Daemon (hass-daemon)"
  update-rc.d hass-daemon defaults
  create_piddir
  mkdir -p $CONFIG_DIR
  chown $RUN_AS $CONFIG_DIR
  mkdir -p $LOG_DIR
  chown $RUN_AS $LOG_DIR
}

uninstall() {
  echo "Are you really sure you want to uninstall this service? The INIT script will"
  echo -n "also be deleted! That cannot be undone. [yes|No] "
  local SURE
  read SURE
  if [ "$SURE" = "yes" ]; then
    stop
    remove_piddir
    echo "Notice: The config directory has not been removed"
    echo $CONFIG_DIR
    echo "Notice: The log directory has not been removed"
    echo $LOG_DIR
    update-rc.d -f hass-daemon remove
    rm -fv "$0"
    echo "Home Assistant Daemon has been removed. Home Assistant is still installed."
  fi
}

create_piddir() {
  if [ ! -d "$PID_DIR" ]; then
    mkdir -p $PID_DIR
    chown $RUN_AS "$PID_DIR"
  fi
}

remove_piddir() {
  if [ -d "$PID_DIR" ]; then
    if [ -e "$PID_FILE" ]; then
      rm -fv "$PID_FILE"
    fi
    rmdir -v "$PID_DIR"
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  install)
    install
    ;;
  uninstall)
    uninstall
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|install|uninstall}"
esac

保存配置文件之后接着执行下面的命令

sudo chmod +x /etc/init.d/hass-daemon
sudo update-rc.d hass-daemon defaults
sudo service hass-daemon install

最后可以手动尝试启动服务

sudo /etc/init.d/hass-daemon start

启动脚本中定义了日志输出,可以通过下面的命令查看日志

tail /var/opt/homeassistant/home-assistant.log

另外需要注意的是,官方文档中的启动脚本是指定了配置文件的路径的

CONFIG_DIR=“/var/opt/homeassistant”

如果需要编辑配置文件需要到该目录下编辑。

当然也可以修改会默认的目录下面

CONFIG_DIR="/home/homeassistant/.homeassistant

如果,到这里hass能正常启动说明服务安装成功了,现在添加到开机启动项。

首先在设置里面确认INIT的设置是/etc/rc.local目录。

然后继续在Tabby中输入命令

sudo vim /etc/rc.local

这里字有点多,我把我的代码贴出来分享给大家。


#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other value on error.

# In order to enable or disable this script just change the execution bits.

#

# By default this script does nothing.



sudo /etc/init.d/hass-daemon start

exit 0

然后ctrl+x保存退出就可以了。
这里可能要注意一下,rc.local可能是新建的文件,那需要赋予可执行权限

sudo chmod +x /etc/rc.local

在手机的deploy软件下点停止再启动,看下rc.local是不是正常启动,过一会就能通过浏览器访问到homeassistant了。

一般用户到这里就可以结束了,对于喜欢折腾的朋友可以继续看,我要做微信访问和内网穿透访问以及远控手机。

本片作为一个入门的到这里,后续看情况继续新增篇幅。

常见问题

  1. ssh 无法启动
Arch Linux extra/ssh start failed

解决办法:设置镜像源为aliyun,然后重新安装。

  1. 网络不通

可以用apt下载却不能用ping wget curl之类的
给用户分配网络权限

sudo usermod -aG aid_inet root

sudo usermod -aG aid_inet homeassitant
  1. python版本过低

自带版本过低,用源码安装高版本的python

  1. sqlite3版本过低

自带版本过低,用源码安装高版本的sqlite3

  1. 无rust编译环境
cryptography rustc not found

apt 安装cargo

  1. rc.local 无法自动启动
linuxdeploy rc.local faild permission denied

缺少执行权限

  1. 无法安装Pillow
The headers or library files could not be found for jpeg,

apt 安装 libjpeg-dev

参考资料

linux-deploy
busybox
linuxdeploy
ha对python版本要求
armel armhf arm64 armv7l 区别
同一wifi环境手机电脑不能互相ping通
同一wifi环境手机电脑不能互相ping通
Arch Linux extra/ssh start failed
域名解析
域名解析问题
linux 快捷指令
域名解析排查
pypi 清华镜像源配置
pip 软件源配置
python 设置
docker 安装homeassistant 不推荐
安装 rust
python3.7 升级 python3.9
安装python3.9 sqlite3
installsqlite3
pillow
接入天猫精灵和小爱同学
电信申请公网的办法
中国移动公网ipv6
ipV6访问网页的方式

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:20:33  更:2022-07-20 19:20:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:54:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码