HACore-WSL安装流程

1
2
3
4
5
6
7
8
9
10
# 安装python3.13

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.13 python3.13-venv python3.13-dev build-essential

# 验证版本
python3.13 -m ensurepip --version
python -V

官方文档流程:
Windows - Home Assistant 中文站 - 老王杂谈说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 系统级依赖
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y python3 python3-dev python3-venv python3-pip bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff6 libturbojpeg0-dev tzdata ffmpeg liblapack3 liblapack-dev libatlas-base-dev unzip
# 新建一个系统用户(-r),并给它新建家目录(-m),用这个用户执行
# 这个用户没有密码
sudo useradd -rm homeassistant
# 创建安装路径
sudo mkdir /srv/homeassistant
# 把所有者改为homeassistant用户
sudo chown homeassistant:homeassistant /srv/homeassistant
# 切换到homeassistant用户
sudo -u homeassistant -H -s
cd /srv/homeassistant
python3 -m venv .
source bin/activate

python3 -m pip install wheel PySocks

pip3 install homeassistant==2025.3.4
#

# 启动之前注意配置好代理,启动时自动去外网https://pypi.org/simple/home-assistant-frontend/拉取前端
hass

1
2
3
4
5
6

cd /srv/homeassistant
nano s.sh
chmod +x s.sh
./s.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env bash
set -euo pipefail

# ============ 可改参数 ============
HA_USER="homeassistant"
VENV_DIR="/srv/homeassistant"
CONFIG_DIR="/home/${HA_USER}/.homeassistant"

HA_USERNAME="${HA_USERNAME:-lingyu}"
HA_PASSWORD="${HA_PASSWORD:-@Lingyu@}"

TZ="${TZ:-Asia/Shanghai}"
COUNTRY="${COUNTRY:-CN}"
LANGUAGE="${LANGUAGE:-zh-Hans}"
NAME="${NAME:-Home}"
UNIT_SYSTEM="${UNIT_SYSTEM:-metric}"
CURRENCY="${CURRENCY:-CNY}"

# 是否安装 Xiaomi Miot Auto 插件:1=安装,0=跳过
INSTALL_XIAOMI_MIOT_AUTO="${INSTALL_XIAOMI_MIOT_AUTO:-1}"
# =================================

PY="${VENV_DIR}/bin/python"

echo "=== HA Core (WSL) Bootstrap ==="
echo "HA_USER = ${HA_USER}"
echo "VENV_DIR = ${VENV_DIR}"
echo "CONFIG_DIR = ${CONFIG_DIR}"
echo "LOGIN USER = ${HA_USERNAME}"

# 0) 基础检查
[ -x "${PY}" ] || { echo "ERROR: 找不到 venv python: ${PY}"; exit 1; }

# 0.1) 确保 wget / curl 可用(插件安装需要)
if [ "${INSTALL_XIAOMI_MIOT_AUTO}" = "1" ]; then
if ! command -v wget >/dev/null 2>&1 && ! command -v curl >/dev/null 2>&1; then
echo "=== Install wget (required for plugin install) ==="
sudo apt-get update
sudo apt-get install -y wget
fi
fi

# 1) 停止 hass(避免写入被覆盖;并且方便“重启生效”)
echo "=== [1/6] Stop running Home Assistant (best effort) ==="
set +e
pkill -f "homeassistant.*--config" >/dev/null 2>&1
pkill -f "hass" >/dev/null 2>&1
sleep 1
set -e

# 2) 创建配置目录结构
echo "=== [2/6] Ensure config dirs ==="
sudo -u "${HA_USER}" mkdir -p "${CONFIG_DIR}/.storage"

# 3) 写 configuration.yaml
echo "=== [3/6] Write configuration.yaml ==="
sudo -u "${HA_USER}" bash -c "cat > '${CONFIG_DIR}/configuration.yaml' <<EOF
homeassistant:
name: ${NAME}
time_zone: ${TZ}
country: ${COUNTRY}
language: ${LANGUAGE}
unit_system: ${UNIT_SYSTEM}
currency: ${CURRENCY}
EOF"

# 4) 写 onboarding(无扩展名)
echo "=== [4/6] Mark onboarding done ==="
sudo -u "${HA_USER}" bash -c "cat > '${CONFIG_DIR}/.storage/onboarding' <<'EOF'
{
\"version\": 4,
\"minor_version\": 1,
\"key\": \"onboarding\",
\"data\": {
\"done\": [
\"user\",
\"core_config\",
\"integration\",
\"analytics\"
]
}
}
EOF"

# 5) 启动前创建账号(最关键)
echo "=== [5/6] Create admin user pre-start ==="
set +e
sudo -u "${HA_USER}" -H "${PY}" -m homeassistant --script auth --config "${CONFIG_DIR}" add "${HA_USERNAME}" "${HA_PASSWORD}"
RC=$?
set -e
if [ "${RC}" -ne 0 ]; then
echo "WARN: auth add 返回非 0(常见:用户已存在 / 已有 owner)。继续。"
else
echo "OK: 用户创建成功。"
fi

# 6) 安装 Xiaomi Miot Auto 插件(等价于 docker exec 那条命令)
if [ "${INSTALL_XIAOMI_MIOT_AUTO}" = "1" ]; then
echo "=== [6/6] Install Xiaomi Miot Auto custom_component ==="
# 推荐:在 config 目录执行,并明确 DOMAIN
# get.hacs.vip 脚本通常会把组件安装到 ./custom_components 下
sudo -u "${HA_USER}" -H bash -lc "
set -e
cd '${CONFIG_DIR}'
mkdir -p custom_components
if command -v wget >/dev/null 2>&1; then
wget -O - https://get.hacs.vip | DOMAIN=xiaomi_miot bash -
else
curl -fsSL https://get.hacs.vip | DOMAIN=xiaomi_miot bash -
fi
" || {
echo "WARN: 小米插件安装失败。你可以稍后手动重试(通常是网络/SSL/代理问题)。"
}
fi

echo ""
echo "=== DONE ==="
echo "现在请启动/重启 Home Assistant Core,使 onboarding 与插件生效:"
echo " sudo -u ${HA_USER} -H bash -lc 'cd ${VENV_DIR} && source bin/activate && hass --config ${CONFIG_DIR}'"
echo "访问: http://localhost:8123"
echo "账号:${HA_USERNAME}"