# 安装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 中文站 - 老王杂谈说
# 系统级依赖
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
cd /srv/homeassistant
nano s.sh
chmod +x s.sh
./s.sh
#!/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}"