沐风牧草 发表于 2022-7-6 11:21:36

Win环境下Hass开发环境部署与调试

本帖最后由 沐风牧草 于 2022-7-6 11:21 编辑

背景:
近期新家准备入住,开始考虑智能家居系列。发现了HASS这个宝藏平台开始研究,在家里的服务器部署了hass之后运行了部分功能,确实很好用,但发现有很多喜欢的插件随着版本更新不能使用,作者也没有维护了。因此想要自行改装,也想以后自行编写插件。于是开始学习hass的开发教程。
本人的知识水平如下:
1.英语仅过四级,英文文档重度依赖翻译软件
2.java开发,对python一窍不通
3.熟悉前端知识,能进行简单开发
4.win重度爱好者(家里NAS系统都是win系统)
5.习惯IDEA,不喜VSCode
6.对docker仅了解其概念和作用,未深入学习
起初我折腾的开发环境是VS+Docker,这种方案确实非常省事,但是有几个问题:
1.我对VS开发工具不熟悉
2.我对docler不熟悉
3.docker部署时各种网络导致的包安装失败(原因大家都知道了),切换源也有各种问题
总结来说,部署看起来很方便,但实际有问题的时候操作很不方便

于是开始考虑IDEA + WSL的开发环境方案,并且折腾了很久才搞懂怎么debug:

官网的WSL开发环境配置写的很详细了,一步一步跟着做,中间可能会出现一些问题,可以参考我下面的一些问题和解决。
本人对python和linux配置不是很熟悉,如有描述不妥之处还望指出
官方安装步骤(WSL部署方案)使用Idea进行开发:
【new project】选择python,project SDK选择虚拟机器的sdk(注意这里hass启动时使用的是venu虚拟机中的py jdk)


下一步,项目地址选择远程机器的代码路径

此时打开的项目,打开Terminal就是和打开虚拟机控制台是一样的效果了,可以直接通过命令启动项目,修改代码。

如何debug:
1.idea配置debug configurations,增加Python Debug Server

由于我是本地WSL的虚拟机部署,这里ip直接写的回环地址,如果是远程机器,这里写本地机器的实际网卡ip,例如168.203.110.203,当然前提是保证远程机器能访问到本地机器上。端口号随便写一个未被占用的。这个操作实际上是在本地启动了一个监听服务器,启动后会等待远程机器作为client链接到本地服务器实现调试。
2.在远程开发服务器上安装pydevd_pycharm包。注意hass在wsl中运行时,是使用了venu虚拟,因此这个包的安装要在venu下,而不能直接在Ubuntu。相关命令如下:
source venv/bin/activate
pip install pydevd-pycharm~=213.7172.25# 此处版本以idea上添加 Python Debug Server时提示的为准安装好后可以进入python中进行验证,不报错说明安装成功:
source venv/bin/activate # 进入虚拟目录
python3 #执行py命令
import pydevd_pycharm # 尝试导入pydevd_pycharm包
3.在hass主配置文件 config/configuration.yaml 中增加配置如下:
debugpy:
    start: true
    wait: true
在hass的debugpy组件__init__.py中增加如下代码:
import pydevd_pycharm

pydevd_pycharm.settrace('127.0.0.1', port=2223, stdoutToServer=True, stderrToServer=True)   # 此处ip就是本地开发环境的地址,端口就是Python Debug Server配置的端口,这个代码在配置Python Debug Server时其实已经生成好了以上操作比较骚,其实是利用hass官方为vscode准备的调试工具,强行把pydevd_pycharm监听插进去了
4.以上操作完成,先启动Python Debug Server,再启动hass(debug模式):
source venv/bin/activate
hass -c /home/lith/hass/config --debug启动时可能出现的问题:
a.debug控制台报警告信息,解决方法没找到,但不影响后续调试

b.发现在Terminal控制台的日志停住了,切换到Debug工具栏,发现已经被断点拦截了,放行,启动成功,后续就可以实现断点调试啦



使用vscode进行开发:
vscode远程debug Python参考
按照官方安装步骤执行完成后,打开装好的wsl虚拟机ubuntu,输入命令:
code此时vscode会自动打开并进行初始化配置,待配置完成后可以看到左下角连上了wsl

打开资源管理器,此时可能还是空白的,点击【打开文件夹】,选择虚拟机中的代码文件夹hass
随便打开一个py文件,会建议安装prettier插件和python插件,之前安装的都是本机,此时提示的是在wsl中安装。根据提示进行安装。
按F5,此时项目会根据launch.json启动调试,此时就可以打断点调试啦。


WSL部署hass开发环境的报错与解决
执行script/setup中的Dockerfile.dev时报错:using the flag --use-deprecated=legacy-resolver
解决:删除了Dockerfile.dev文件中的两处--use-deprecated=legacy-resolver配置

pip安装包超时:
解决:虚拟机下设置源:
1.Linux/Mac添加修改pip.conf配置文件
mkdir ~/.pip
touch pip.conf
vim ~/.pip/pip.conf2.配置pip.conf文件:

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

trusted-host = https://pypi.tuna.tsinghua.edu.cn# trusted-host 此参数是为了解决地址不受信任问题3.如果经过以上配置依然出现超时问题,可能是使用sudo时使用的非当前用户的pip配置,导致pip源还是默认的。尝试为hass文件夹赋予权限,然后不使用sudo执行命令
有如下日志才说明使用了自定义的pip:


apt-get安装超时:
解决:1.修改sources.list文件
# 先备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 修改:
sudo vi /etc/apt/sources.list2.为(阿里源)【其中focal代表当前系统版本的系统代号,可通过lsb_release -c查看】:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse3.更新软件列表:
sudo apt-get updatePackage 'homeassistant' requires a different Python: 3.8.10 not in '>=3.9.0'解决:安装新版本
apt install python3.9修改默认版本:
sudo ln -f /usr/bin/python3.9 /usr/bin/python3执行script/setup时报错:Failed building wheel for ciso8601ERROR: Failed building wheel for ciso8601解决:Prepare to move to Python 3.9 venv, build fails ciso8601 - Installation - Home Assistant Community (home-assistant.io)
执行命令:
sudo apt install python3.9-dev
sudo apt install python3.9-venv运行 hass -c config时报错:
Unable to install package pyotp==2.6.0: ERROR: Could not install packages due to an OSError: Permission denied: '/home/lith/hass/venv/lib/python3.9/site-packages/pyotp'
解决:
给hass目录赋予管理员权限:
sudo chown -R lith:lith /home/lith/hass #注意替换用户和目录





neroxps 发表于 2022-7-6 12:11:51

本帖最后由 neroxps 于 2022-7-6 12:16 编辑

人生苦短,我选 docker 远程开发。
唯一的坑就是docker 的插件需要本地安装 docker for windows(其实就是为了 docker cli 工具),现在的版本好像不需要 docker for windows 了,至少不需要启动,之前折腾翻车是因为我给 github 的 ssh 配置了 ProxyCommand connect 导致 SSH 不通。

沐风牧草 发表于 2022-7-6 12:43:24

neroxps 发表于 2022-7-6 12:11
人生苦短,我选 docker 远程开发。
唯一的坑就是docker 的插件需要本地安装 docker for windows(其实就是 ...

我主要是对docker不是特别熟悉,最开始是以docker for windows作为开发环境尝试过,首次配置实在是太慢了,重试了有几十次,花了一个星期才算部署好了一套环境,后来觉得wsl更简单一点,没有docker的黑盒

沐风牧草 发表于 2022-7-6 12:45:01

neroxps 发表于 2022-7-6 12:11
人生苦短,我选 docker 远程开发。
唯一的坑就是docker 的插件需要本地安装 docker for windows(其实就是 ...

你说不用启动时什么意思,我上周试过还是要先启动docker for win的呀

neroxps 发表于 2022-7-6 16:29:45

沐风牧草 发表于 2022-7-6 12:43
我主要是对docker不是特别熟悉,最开始是以docker for windows作为开发环境尝试过,首次配置实在是太慢了 ...

我是通过 openvpn 链回家里的服务器上的 docker 调试。
现在不需要启动 docker for windows,其实他依赖的是 ssh 和 docker-cli 这几个满足就好了,docker tcp 写上家里服务器的 docker 就好了

    "docker.host": "tcp://10.89.1.3:2375",
    "terminal.integrated.env.windows": {
      "DOCKER_CERT_PATH":null,
      "DOCKER_TLS_VERIFY":null,
      "DOCKER_HOST":"tcp://10.89.1.3:2375",
    },

DOCKER_TLS_VERIFY 和 DOCKER_CERT_PATH 很烦人,他一直会提示找不到,我终端启动干掉这两个环境变量,不然终端无法控制。

neroxps 发表于 2022-7-6 16:31:34

沐风牧草 发表于 2022-7-6 12:43
我主要是对docker不是特别熟悉,最开始是以docker for windows作为开发环境尝试过,首次配置实在是太慢了 ...

至于网络问题,homeassistant 绕不开的问题了,高度依赖 github ,家里还是需要部署路由网络顺畅的方案才行。
现在 docker 国内镜像都半死不活了。

tc0077 发表于 2022-8-2 11:06:40

谢谢分享~~! 支持@@NB!!

艾诺 发表于 2022-9-5 22:23:30

支持:):):):):):):)

cdl511 发表于 2023-3-18 13:07:16

感谢楼主分享:$
页: [1]
查看完整版本: Win环境下Hass开发环境部署与调试