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为你自己的密码
相关推荐
IT大白鼠5 天前
CVE-2026-7531 Azure Linux MariaDB PQC 内存破坏漏洞详解
linux·mariadb·azure·cve-2026-7531
l1t1 个月前
DeepSeek总结的MariaDB 的 DuckDB 存储引擎
数据库·mariadb
摇滚侠1 个月前
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
数据库·mysql·mariadb
l1t1 个月前
DeepSeek总结的MariaDB + DuckDB:数据分析的新游乐场——初探新存储引擎
数据分析·mariadb
Adorable老犀牛1 个月前
MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南
mysql·prometheus·mariadb
tang7451639622 个月前
MariaDB的mysql安装
数据库·mysql·mariadb
TechWJ2 个月前
数据库在公司内网,出差路上想查数据怎么办?
服务器·数据库·mariadb
小匠石钧知2 个月前
01_以RockyLinux的镜像为基础_构建自己开发学习所需的镜像
linux·docker·jdk·mariadb
钝挫力PROGRAMER2 个月前
实战经验:如何修复 MariaDB 因 InnoDB 损坏导致的启动失败 (status=6/ABRT)
数据库·mariadb