『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3696|回复: 8

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

[复制链接]

1

主题

48

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
344
HASS币
10
发表于 2022-7-6 11:21:36 | 显示全部楼层 |阅读模式
本帖最后由 沐风牧草 于 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)
df707127-afcd-45ac-ba1c-a2ee6e0b5b41.png
5225cef3-4a1f-43ff-8df9-47feafda3f60.png
下一步,项目地址选择远程机器的代码路径
06135f81-0ecc-4342-bfb3-7a7175ac0670.png
此时打开的项目,打开Terminal就是和打开虚拟机控制台是一样的效果了,可以直接通过命令启动项目,修改代码。

如何debug:

1.idea配置debug configurations,增加Python Debug Server
c18c284d-b2f8-4691-a34d-b0310161327d.jpg
由于我是本地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包
5e9518f2-667c-4999-a4f4-4d3c233d7de6.jpg
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控制台报警告信息,解决方法没找到,但不影响后续调试
4bff5425-fa2c-49a3-9cdd-ed63f33d0ee6.jpg
b.发现在Terminal控制台的日志停住了,切换到Debug工具栏,发现已经被断点拦截了,放行,启动成功,后续就可以实现断点调试啦
85de6fda-dda3-4fbf-8546-4d3612bbb032.jpg
36936312-a72a-4028-8c59-4768433d6636.jpg

使用vscode进行开发:
vscode远程debug Python参考
按照官方安装步骤执行完成后,打开装好的wsl虚拟机ubuntu,输入命令:
code
此时vscode会自动打开并进行初始化配置,待配置完成后可以看到左下角连上了wsl
886b6370-1964-4fcf-82ea-8f5f8d1b7ab4.jpg
打开资源管理器,此时可能还是空白的,点击【打开文件夹】,选择虚拟机中的代码文件夹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.conf
2.配置pip.conf文件:
[global] 
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn  # trusted-host 此参数是为了解决地址不受信任问题
3.如果经过以上配置依然出现超时问题,可能是使用sudo时使用的非当前用户的pip配置,导致pip源还是默认的。尝试为hass文件夹赋予权限,然后不使用sudo执行命令
有如下日志才说明使用了自定义的pip:
3e980b7b-c055-4a95-b082-430bd9dad960.jpg

apt-get安装超时:
解决:1.修改sources.list文件
# 先备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 修改:
sudo vi /etc/apt/sources.list
2.为(阿里源)【其中focal代表当前系统版本的系统代号,可通过[size=0.875]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 multiverse
3.更新软件列表:
sudo apt-get update
Package '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 ciso8601
ERROR: 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时报错:
[homeassistant.util.package] Unable to install package pyotp==2.6.0: ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/home/lith/hass/venv/lib/python3.9/site-packages/pyotp'
099ab226-0519-4ab2-b8ba-b6359589bd59.png
解决:
给hass目录赋予管理员权限
sudo chown -R lith:lith /home/lith/hass #注意替换用户和目录






评分

参与人数 3金钱 +35 HASS币 +10 收起 理由
springboy + 5 高手,这是高手!
+ 20 + 10 感谢楼主分享!
jjcs + 10 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 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 不通。
Nero
回复

使用道具 举报

1

主题

48

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
344
HASS币
10
 楼主| 发表于 2022-7-6 12:43:24 | 显示全部楼层
neroxps 发表于 2022-7-6 12:11
人生苦短,我选 docker 远程开发。
唯一的坑就是docker 的插件需要本地安装 docker for windows(其实就是 ...

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

使用道具 举报

1

主题

48

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
金钱
344
HASS币
10
 楼主| 发表于 2022-7-6 12:45:01 | 显示全部楼层
neroxps 发表于 2022-7-6 12:11
人生苦短,我选 docker 远程开发。
唯一的坑就是docker 的插件需要本地安装 docker for windows(其实就是 ...

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

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 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 很烦人,他一直会提示找不到,我终端启动干掉这两个环境变量,不然终端无法控制。
Nero
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2022-7-6 16:31:34 | 显示全部楼层
沐风牧草 发表于 2022-7-6 12:43
我主要是对docker不是特别熟悉,最开始是以docker for windows作为开发环境尝试过,首次配置实在是太慢了 ...

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

使用道具 举报

1

主题

24

帖子

77

积分

注册会员

Rank: 2

积分
77
金钱
53
HASS币
0
发表于 2022-8-2 11:06:40 | 显示全部楼层
谢谢分享~~! 支持@@NB!!
回复

使用道具 举报

1

主题

10

帖子

226

积分

中级会员

Rank: 3Rank: 3

积分
226
金钱
216
HASS币
0
发表于 2022-9-5 22:23:30 | 显示全部楼层
支持
回复

使用道具 举报

0

主题

48

帖子

898

积分

高级会员

Rank: 4

积分
898
金钱
850
HASS币
0
发表于 2023-3-18 13:07:16 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-4 01:36 , Processed in 0.061293 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表