04 oect安装Armbain和onepanel后安装homeassistant极速版

思路

  • homeassistant在onepanel的应用商店中有相应的应用,但是不是极速版的,并且安装后配置hacs繁琐报错。
  • 使用ha极速版现成的激素版本compose进行部署安装。

一、在onepanel中输入响应compose

  • 登录onepanel,如下图所示,找到相应的编排界面,在下方黑框中输入。

二、拉取镜像安装homeassistant

  • 输入如下compose内容
bash 复制代码
services:
  homeassistant:
    container_name: homeassistant
    image: hacn/hacn:stable
    volumes: # 映射容器内路径到硬盘
      - /mnt/mydisk/hass/config:/config
      - /mnt/mydisk/hass/media:/media
      - /mnt/mydisk/hass/backup:/config/backups
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host    
    environment:
      - TZ=Asia/Shanghai
    command: #  容器内安装mysql相关依赖,后续配置数据库
      sh -c "pip install pymysql && /init"
  • 点击下面保存即可拉取镜像并运行容器

三、配置hacs

  • 容器运行成功后,在浏览器录入ip:端口即可,端口默认8123,本地ip就是127.0.0.1

  • 初始化后,进入主页面,如下图依次点击,添加hacs集成。

  • 按照以上依次点击后,出现以下界面,勾选提交后,会产生报错:在集成hacs时,github验证通过后,在ha界面总是显示报错

  • 经过排查log日志文件,报错如下

bash 复制代码
Traceback (most recent call last):
File "/config/custom_components/hacs/config_flow.py", line 104, in async_step_device
response = await self.device.register ()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiogithubapi/device.py", line 103, in register
response = await self._client.async_call_api (
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<9 lines>...
)
^
File "/usr/local/lib/python3.14/site-packages/aiogithubapi/client.py", line 147, in async_call_api
raise GitHubConnectionException (
...<2 lines>...
) from None
aiogithubapi.exceptions.GitHubConnectionException: Timeout of 20 reached while waiting for https://github.com/login/device/code
2026-06-22 21:22:16.355 ERROR (MainThread) [aiohttp.server] Error handling request from 192.168.3.51
Traceback (most recent call last):
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py", line 517, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py", line 569, in _handle
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 90, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 86, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 261, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 39, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 91, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 226, in get
return await super().get(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 104, in get
result = await self._flow_mgr.async_configure(flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 334, in async_configure
result = await self._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1564, in _async_configure
return await super()._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 382, in _async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
flow, cur_step["step_id"], user_input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 482, in _async_handle_step
result: _FlowResultT = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/hacs/config_flow.py", line 174, in async_step_device_done
"use_shared": user_input.get('use_shared', False),
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
  • 解决方法,修改代码
    • 修改hacs的配置文件 /xxxxx/config/custom_components/hacs/config_flow.py
    • 定位到async_step_device_done函数
bash 复制代码
cd /mnt/mydisk/hass/config/custom_components/hacs/
vim config_flow.py
  • 在以上位置插入以下代码,重新构建镜像即可。
bash 复制代码
   # 增加这行判断,如果 user_input 为空,直接跳转下一步
    if user_input is None:
        return await self.async_step_device_done({})  # 传入空字典

四、安装mqtt服务

  • 按照第二步的流程在homeassistant的compose语句下加入以下内容,构建mqtt容器,后续如何使用还没有研究
bash 复制代码
# ====== MQTT Broker ======
  mosquitto:
    image: eclipse-mosquitto:2.0.15
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"     # MQTT
      - "9001:9001"     # WebSocket(可选)
    volumes:
      - /mnt/mydisk/hass/mosquitto/data:/mosquitto/data
      - /mnt/mydisk/hass/mosquitto/log:/mosquitto/log
      - /mnt/mydisk/hass/mosquitto/config:/mosquitto/config
    environment:
      - TZ=Asia/Shanghai

五、安装并配置Mariadb数据库并配置

  • 按照第二步的流程在mqtt的compose语句下加入以下内容,构建mariadb容器。
bash 复制代码
 # ====== MariaDB 数据库(替代 PostgreSQL) ======
  mariadb:
    image: mariadb:11.4   # 当前稳定版本
    container_name: mariadb
    restart: unless-stopped
    ports:
      - "3306:3306"
    volumes:
      - /mnt/mydisk/hass/mariadb/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password   # 必填,修改为强密码
      - MYSQL_DATABASE=homeassistant             # 自动创建数据库
      - MYSQL_USER=ha                 # 专用用户
      - MYSQL_PASSWORD=password      # 修改为强密码
      - TZ=Asia/Shanghai
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci   # 确保支持中文和 Emoji
    healthcheck:
      test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-ppassword"]
      interval: 10s
      timeout: 5s
  • 如图所示依次点击,安装adminer管理数据库工具

  • 安装完成后再侧边栏数据库中进行配置可进入数据库查看相关内容

六、homeassistant整合mariadb

  • 进入homeassistant的配置目录,由于已经将容器中的配置文件映射到硬盘中,直接进入硬盘中ha对应的配置文件修改即可。
bash 复制代码
cd /mnt/mydisk/hass/config
vim configuration.yaml
# 插入以下内容:
recorder:
  db_url: mysql+pymysql://ha:your_user_password@localhost:3306/homeassistant?charset=utf8mb4
	purge_keep_days: 30  # 历史数据保留天数
	commit_interval: 30  # 数据提交到数据库的间隔,30s
  • 如下图所示:

  • 重启ha的docker即可

七、总结

  • 最终的compose如下
bash 复制代码
services:
  homeassistant:
    container_name: homeassistant
    image: hacn/hacn:stable
    volumes:
      - /mnt/mydisk/hass/config:/config
      - /mnt/mydisk/hass/media:/media
      - /mnt/mydisk/hass/backup:/config/backups
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host    
    environment:
      - TZ=Asia/Shanghai
    command:
      sh -c "pip install pymysql && /init"
    
# ====== MQTT Broker ======
  mosquitto:
    image: eclipse-mosquitto:2.0.15
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"     # MQTT
      - "9001:9001"     # WebSocket(可选)
    volumes:
      - /mnt/mydisk/hass/mosquitto/data:/mosquitto/data
      - /mnt/mydisk/hass/mosquitto/log:/mosquitto/log
      - /mnt/mydisk/hass/mosquitto/config:/mosquitto/config
    environment:
      - TZ=Asia/Shanghai

 # ====== Zigbee2MQTT ======
  # zigbee2mqtt:
  #   image: koenkk/zigbee2mqtt:latest
  #   container_name: zigbee2mqtt
  #   restart: unless-stopped
  #   ports:
  #     - "8081:8080"     # Web 管理界面
  #   volumes:
  #     - /mnt/mydisk/hass/zigbee2mqtt/data:/app/data
  #     - /run/dbus:/run/dbus:ro
  #   devices:
  #     - /dev/ttyACM0:/dev/ttyACM0   # 根据实际 USB 设备修改
  #   environment:
  #     - TZ=Asia/Shanghai
  #     - ZIGBEE2MQTT_CONFIG_MQTT_SERVER=mqtt://mosquitto:1883
  #     - ZIGBEE2MQTT_CONFIG_SERIAL_PORT=/dev/ttyACM0
  #     - ZIGBEE2MQTT_CONFIG_FRONTEND_PORT=8080
  #   depends_on:
  #     - mosquitto

 # ====== MariaDB 数据库(替代 PostgreSQL) ======
  mariadb:
    image: mariadb:11.4   # 当前稳定版本
    container_name: mariadb
    restart: unless-stopped
    ports:
      - "3306:3306"
    volumes:
      - /mnt/mydisk/hass/mariadb/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=passWord   # 必填,修改为强密码
      - MYSQL_DATABASE=homeassistant             # 自动创建数据库
      - MYSQL_USER=ha                 # 专用用户
      - MYSQL_PASSWORD=passWord       # 修改为强密码
      - TZ=Asia/Shanghai
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci   # 确保支持中文和 Emoji
    healthcheck:
      test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-ppassWord"]
      interval: 10s
      timeout: 5s
      retries: 5
  • 别忘了修改mariadb中的passWord为你自己的密码
相关推荐
sibylyue2 天前
MariaDB / H2
数据库·mariadb
mengge.cloud3 天前
0823Keepalived + LVS(DR) + MariaDB主主 小白完整实战教程
linux·运维·网络·oracle·负载均衡·mariadb·lvs
量子炒饭大师8 天前
MySQL 5.7 在 CentOS 7 环境安装:从清理 MariaDB 到初始化与完善配置
数据库·mysql·centos·mariadb
暖核12 天前
Keepalived + LVS(DR)+ MariaDB 主主高可用架构实战指南
架构·mariadb·lvs
SatanII13 天前
mariadb
数据库·mariadb
刘某的Cloud15 天前
Galera Cluster部署 mariadb 节点down机,log sequence number恢复
linux·运维·数据库·负载均衡·mariadb·集群·高可用
刘某的Cloud21 天前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
gcygeeker1 个月前
Home Assistant 读取 ESXi温度
esxi·iot·hass·homeassistant
谜之锋1 个月前
银河麒麟 Debian 系统离线deb包安装Mariadb 数据库指南
数据库·debian·mariadb
IT瑞先生1 个月前
MariaDB与Mysql差异及版本对照
数据库·mysql·mariadb