ha-addon

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Home Assistant Add-On Development

Home Assistant 插件开发

Expert guidance for building, configuring, and publishing Home Assistant add-ons with Docker, Supervisor integration, and multi-architecture support.
提供使用Docker、Supervisor集成和多架构支持来构建、配置和发布Home Assistant插件的专业指导。

Before You Start

开始之前

This skill prevents common Home Assistant add-on development errors:
IssueSymptomSolution
Permission errors
Permission denied
on supervisor API calls
Use correct SUPERVISOR_TOKEN and API endpoints
Configuration validationAdd-on won't loadValidate config.yaml schema before publishing
Docker base image errorsMissing dependencies in runtimeUse official Home Assistant base images (ghcr.io/home-assistant)
Ingress misconfigurationWeb UI not accessible through HAConfigure nginx reverse proxy correctly
Multi-arch build failuresAdd-on only works on one architectureSet up build.yaml with architecture matrix
本技能可避免Home Assistant插件开发中的常见错误:
问题症状解决方案
权限错误调用Supervisor API时出现
Permission denied
使用正确的SUPERVISOR_TOKEN和API端点
配置验证失败插件无法加载发布前验证config.yaml的 schema
Docker基础镜像错误运行时缺少依赖项使用官方Home Assistant基础镜像(ghcr.io/home-assistant)
Ingress配置错误无法通过HA访问Web UI正确配置nginx反向代理
多架构构建失败插件仅在一种架构上可用在build.yaml中设置架构矩阵

Quick Start: Create an Add-On from Scratch

快速入门:从零创建插件

Step 1: Create the Add-On Directory Structure

步骤1:创建插件目录结构

bash
mkdir -p my-addon/{rootfs,rootfs/etc/s6-overlay/s6-rc.d/service-name}
cd my-addon
Why this matters: Home Assistant expects specific directory layouts. The
rootfs/
contains your actual application files that get packaged into the Docker image.
bash
mkdir -p my-addon/{rootfs,rootfs/etc/s6-overlay/s6-rc.d/service-name}
cd my-addon
重要性: Home Assistant要求特定的目录布局。
rootfs/
包含将打包到Docker镜像中的实际应用文件。

Step 2: Create config.yaml

步骤2:创建config.yaml

yaml
---
name: My Custom Add-On
description: My awesome Home Assistant add-on
version: 1.0.0
slug: my-addon
image: ghcr.io/home-assistant/{arch}-addon-my-addon
arch:
  - amd64
  - armv7
  - aarch64
ports:
  8080/tcp: null
options:
  debug: false
schema:
  debug: bool
permissions:
  - homeassistant  # Read/write Home Assistant core data
Why this matters: This is your add-on's manifest. The slug becomes the internal identifier and determines where configuration is stored.
yaml
---
name: My Custom Add-On
description: My awesome Home Assistant add-on
version: 1.0.0
slug: my-addon
image: ghcr.io/home-assistant/{arch}-addon-my-addon
arch:
  - amd64
  - armv7
  - aarch64
ports:
  8080/tcp: null
options:
  debug: false
schema:
  debug: bool
permissions:
  - homeassistant  # 读写Home Assistant核心数据
重要性: 这是你的插件清单文件。slug会成为内部标识符,并决定配置的存储位置。

Step 3: Create the Dockerfile

步骤3:创建Dockerfile

dockerfile
FROM ghcr.io/home-assistant/amd64-base:latest
dockerfile
FROM ghcr.io/home-assistant/amd64-base:latest

Install dependencies

安装依赖

RUN apk add --no-cache python3 py3-pip
RUN apk add --no-cache python3 py3-pip

Copy application

复制应用

COPY rootfs /
COPY rootfs /

Set working directory

设置工作目录

WORKDIR /app
WORKDIR /app

Install Python packages if needed

如有需要,安装Python包

RUN if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
RUN if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

Run using S6 overlay

使用S6 overlay运行

CMD ["/init"]

**Why this matters:** Using Home Assistant base images includes critical runtime components (S6 overlay, bashio helpers, supervisor integration).
CMD ["/init"]

**重要性:** 使用Home Assistant基础镜像包含关键的运行时组件(S6 overlay、bashio辅助工具、Supervisor集成)。

Step 4: Create S6 Service Script

步骤4:创建S6服务脚本

Create
rootfs/etc/s6-overlay/s6-rc.d/service-name/run
:
bash
#!/command/execlineb -P
foreground { echo "Starting my add-on..." }
/app/my-service
Make it executable:
bash
chmod +x rootfs/etc/s6-overlay/s6-rc.d/service-name/run
Why this matters: S6 overlay is Home Assistant's init system. It manages service startup, logging, and graceful shutdown.
创建
rootfs/etc/s6-overlay/s6-rc.d/service-name/run
bash
#!/command/execlineb -P
foreground { echo "Starting my add-on..." }
/app/my-service
设置可执行权限:
bash
chmod +x rootfs/etc/s6-overlay/s6-rc.d/service-name/run
重要性: S6 overlay是Home Assistant的初始化系统,负责管理服务启动、日志记录和优雅关闭。

Critical Rules

关键规则

✅ Always Do

✅ 必须遵守

  • ✅ Use official Home Assistant base images (ghcr.io/home-assistant/{arch}-base)
  • ✅ Include all supported architectures in config.yaml (amd64, armv7, aarch64)
  • ✅ Use bashio helper functions for common operations (bashio::log::info, bashio::addon::option)
  • ✅ Validate config.yaml schema before releasing
  • ✅ Document configuration options in the schema section
  • ✅ Include addon_uuid in logs for debugging
  • ✅ 使用官方Home Assistant基础镜像(ghcr.io/home-assistant/{arch}-base)
  • ✅ 在config.yaml中包含所有支持的架构(amd64、armv7、aarch64)
  • ✅ 使用bashio辅助函数完成常见操作(bashio::log::info、bashio::addon::option)
  • ✅ 发布前验证config.yaml的schema
  • ✅ 在schema部分记录配置选项
  • ✅ 在日志中包含addon_uuid以便调试

❌ Never Do

❌ 禁止操作

  • ❌ Don't hardcode paths - use bashio to get configuration directory (/data/)
  • ❌ Don't run services as root unless absolutely necessary (set USER in Dockerfile)
  • ❌ Don't call supervisor API without SUPERVISOR_TOKEN
  • ❌ Don't ignore SIGTERM signals - implement graceful shutdown
  • ❌ Don't assume one architecture - use {arch} placeholder in image names
  • ❌ Don't store data outside /data/ - Home Assistant won't persist it
  • ❌ 不要硬编码路径 - 使用bashio获取配置目录(/data/)
  • ❌ 除非绝对必要,否则不要以root身份运行服务(在Dockerfile中设置USER)
  • ❌ 不要在没有SUPERVISOR_TOKEN的情况下调用Supervisor API
  • ❌ 不要忽略SIGTERM信号 - 实现优雅关闭
  • ❌ 不要假设仅支持一种架构 - 在镜像名称中使用{arch}占位符
  • ❌ 不要在/data/之外存储数据 - Home Assistant不会持久化这些数据

Common Mistakes

常见错误

❌ Wrong: Hardcoded paths
bash
#!/bin/bash
CONFIG_PATH="/config/my-addon"
✅ Correct: Using bashio for configuration
bash
#!/command/execlineb -P
CONFIG_PATH=${"$(bashio::addon::config_path)"}
Why: bashio handles path resolution and ensures your add-on works in any Home Assistant installation.
❌ 错误示例:硬编码路径
bash
#!/bin/bash
CONFIG_PATH="/config/my-addon"
✅ 正确示例:使用bashio获取配置
bash
#!/command/execlineb -P
CONFIG_PATH=${"$(bashio::addon::config_path)"}
原因: bashio处理路径解析,确保你的插件在任何Home Assistant安装环境中都能正常工作。

Configuration Reference

配置参考

config.yaml Structure

config.yaml结构

yaml
---
name: String                          # Display name
description: String                   # Short description
version: String                       # Semantic version (1.0.0)
slug: String                          # URL-safe identifier
image: String                         # Docker image URL with {arch} placeholder
arch:
  - amd64|armv7|aarch64|armhf|i386    # Supported architectures
ports:
  8080/tcp: null                      # TCP port (null=internal only, number=external)
  53/udp: 53                          # UDP with external port mapping
devices:
  - /dev/ttyACM0                      # Device access
services:
  - mysql                             # Depends on other service
options:
  debug: false                        # User configuration options
  log_level: info
schema:
  debug: bool                         # Configuration validation schema
  log_level:
    - debug
    - info
    - warning
    - error
permissions:
  - homeassistant                     # Read/write HA config
  - hassio                            # Full supervisor API access
  - admin                             # Broad system access
  - backup                            # Backup/restore operations
environment:
  NODE_ENV: production
webui: http://[HOST]:[PORT:8080]     # Web UI URL pattern
ingress: true                         # Enable ingress proxy
ingress_port: 8080                    # Internal port for ingress
ingress_entry: /                      # URL path for ingress entry
Key settings:
  • slug
    : Used internally and in supervisor API calls
  • arch
    : List all supported architectures or builds fail
  • image
    : Must use {arch} placeholder for dynamic builds
  • options
    : User-configurable settings
  • permissions
    : Controls supervisor API access level
  • ingress
    : Enables reverse proxy for web UIs
yaml
---
name: String                          # 显示名称
description: String                   # 简短描述
version: String                       # 语义化版本(1.0.0)
slug: String                          # URL安全的标识符
image: String                         # 带有{arch}占位符的Docker镜像URL
arch:
  - amd64|armv7|aarch64|armhf|i386    # 支持的架构
ports:
  8080/tcp: null                      # TCP端口(null=仅内部访问,数字=外部映射)
  53/udp: 53                          # UDP端口及外部映射
devices:
  - /dev/ttyACM0                      # 设备访问权限
services:
  - mysql                             # 依赖其他服务
options:
  debug: false                        # 用户可配置选项
  log_level: info
schema:
  debug: bool                         # 配置验证schema
  log_level:
    - debug
    - info
    - warning
    - error
permissions:
  - homeassistant                     # 读写HA配置
  - hassio                            # 完整Supervisor API访问权限
  - admin                             # 广泛的系统访问权限
  - backup                            # 备份/恢复操作权限
environment:
  NODE_ENV: production
webui: http://[HOST]:[PORT:8080]     # Web UI URL模板
ingress: true                         # 启用ingress代理
ingress_port: 8080                    # ingress使用的内部端口
ingress_entry: /                      # ingress入口的URL路径
关键设置:
  • slug
    : 用于内部和Supervisor API调用
  • arch
    : 列出所有支持的架构,否则构建会失败
  • image
    : 必须使用{arch}占位符以支持动态构建
  • options
    : 用户可配置的设置
  • permissions
    : 控制Supervisor API的访问级别
  • ingress
    : 为Web UI启用反向代理

Common Patterns

常见模式

Using bashio for Logging

使用bashio记录日志

bash
#!/command/execlineb -P
foreground { bashio::log::info "Add-on started" }
foreground { bashio::log::warning "Low disk space" }
foreground { bashio::log::error "Failed to connect" }
bash
#!/command/execlineb -P
foreground { bashio::log::info "Add-on started" }
foreground { bashio::log::warning "Low disk space" }
foreground { bashio::log::error "Failed to connect" }

Accessing Configuration Options

访问配置选项

bash
#!/command/execlineb -P
define DEBUG "$(bashio::addon::option 'debug')"
define LOG_LEVEL "$(bashio::addon::option 'log_level')"
if { test "${DEBUG}" = "true" }
  bashio::log::debug "Debug mode enabled"
bash
#!/command/execlineb -P
define DEBUG "$(bashio::addon::option 'debug')"
define LOG_LEVEL "$(bashio::addon::option 'log_level')"
if { test "${DEBUG}" = "true" }
  bashio::log::debug "Debug mode enabled"

Supervisor API Communication

与Supervisor API通信

bash
#!/bin/bash
bash
#!/bin/bash

Get addon info

获取插件信息

curl -X GET
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
http://supervisor/addons/self/info | jq .
curl -X GET
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
http://supervisor/addons/self/info | jq .

Send notification

发送通知

curl -X POST
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
undefined
curl -X POST
-H "Authorization: Bearer $SUPERVISOR_TOKEN"
-H "Content-Type: application/json"
-d '{"message":"Warning message"}'
http://supervisor/notifications/create
undefined

Multi-Arch Docker Build

多架构Docker构建

Create
build.yaml
:
yaml
build_from:
  amd64: ghcr.io/home-assistant/amd64-base:latest
  armv7: ghcr.io/home-assistant/armv7-base:latest
  aarch64: ghcr.io/home-assistant/aarch64-base:latest
  armhf: ghcr.io/home-assistant/armhf-base:latest
codenotary: your-notary-id  # Optional code signing
创建
build.yaml
yaml
build_from:
  amd64: ghcr.io/home-assistant/amd64-base:latest
  armv7: ghcr.io/home-assistant/armv7-base:latest
  aarch64: ghcr.io/home-assistant/aarch64-base:latest
  armhf: ghcr.io/home-assistant/armhf-base:latest
codenotary: your-notary-id  # 可选的代码签名

Ingress Configuration for Web UIs

Web UI的Ingress配置

yaml
ingress: true
ingress_port: 8080
ingress_entry: /
yaml
ingress: true
ingress_port: 8080
ingress_entry: /

Optional ingress_stream for streaming endpoints

可选的ingress_stream用于流端点


Inside your app, use correct reverse proxy headers:
```bash

在你的应用中,使用正确的反向代理头:
```bash

nginx configuration in your app

应用中的nginx配置

location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://localhost:8080; }
undefined
location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://localhost:8080; }
undefined

Known Issues Prevention

已知问题预防

IssueRoot CauseSolution
Add-on fails to startMissing S6 service filesCreate
/etc/s6-overlay/s6-rc.d/service-name/
with
run
executable
Supervisor API returns 401Invalid SUPERVISOR_TOKENVerify token is set by Home Assistant (check logs with
addon_uuid
)
Configuration not persistingSaving outside /data/Always use bashio::addon::config_path or /data/ for persistence
Port already in useMultiple services on same portCheck configuration - each service needs unique port
Architecture mismatch{arch} placeholder not usedUse exact placeholder in image field:
ghcr.io/home-assistant/{arch}-base
Build fails with "Unknown architecture"config.yaml lists unsupported archUse only: amd64, armv7, aarch64, armhf, i386
问题根本原因解决方案
插件无法启动缺少S6服务文件创建
/etc/s6-overlay/s6-rc.d/service-name/
目录并添加可执行的
run
文件
Supervisor API返回401SUPERVISOR_TOKEN无效验证Home Assistant是否已设置token(使用
addon_uuid
查看日志)
配置未持久化在/data/之外保存数据始终使用bashio::addon::config_path或/data/来存储持久化数据
端口已被占用多个服务使用同一端口检查配置 - 每个服务需要唯一的端口
架构不匹配未使用{arch}占位符在镜像字段中使用正确的占位符:
ghcr.io/home-assistant/{arch}-base
构建失败提示“Unknown architecture”config.yaml中列出了不支持的架构仅使用以下架构:amd64、armv7、aarch64、armhf、i386

Supervisor API Endpoints

Supervisor API端点

bash
undefined
bash
undefined

Authentication: Pass SUPERVISOR_TOKEN header

认证:传递SUPERVISOR_TOKEN请求头

GET /addons/self/info # Get current add-on details POST /addons/self/restart # Restart this add-on GET /addons/installed # List installed add-ons GET /info # System information POST /notifications/create # Send notification to user GET /config/homeassistant # Read Home Assistant config
GET /addons/self/info # 获取当前插件详情 POST /addons/self/restart # 重启当前插件 GET /addons/installed # 列出已安装的插件 GET /info # 系统信息 POST /notifications/create # 向用户发送通知 GET /config/homeassistant # 读取Home Assistant配置

Example with bashio

使用bashio的示例

bashio::addon::self_info # Helper function for self info
undefined
bashio::addon::self_info # 获取自身信息的辅助函数
undefined

Dependencies

依赖项

Required

必需依赖

PackageVersionPurpose
Home Assistant2024.1+Add-on platform and supervisor
DockerLatestContainer runtime
S6 Overlay3.xInit system (included in base images)
版本用途
Home Assistant2024.1+插件平台和Supervisor
Docker最新版容器运行时
S6 Overlay3.x初始化系统(已包含在基础镜像中)

Optional

可选依赖

PackageVersionPurpose
bashioLatestHelper functions (included in base images)
python33.9+Python-based add-ons
nodejs18+Node.js-based add-ons
版本用途
bashio最新版辅助函数(已包含在基础镜像中)
python33.9+基于Python的插件
nodejs18+基于Node.js的插件

Official Documentation

官方文档

Troubleshooting

故障排除

Add-on Won't Start

插件无法启动

Symptoms: Add-on shows as "Not running" or "Unknown"
Solution:
bash
undefined
症状: 插件显示为“未运行”或“未知状态”
解决方案:
bash
undefined

Check logs

查看日志

docker logs addon_name_latest # Or use HA UI: Settings > System > Logs
docker logs addon_name_latest # 或使用HA UI:设置 > 系统 > 日志

Common causes:

常见原因:

1. Invalid config.yaml syntax

1. config.yaml语法无效

2. Missing S6 service files

2. 缺少S6服务文件

3. Dockerfile can't find base image

3. Dockerfile无法找到基础镜像

4. Permission denied on rootfs files

4. rootfs文件权限被拒绝

undefined
undefined

Supervisor API Returns 401

Supervisor API返回401

Symptoms: API calls fail with "Unauthorized"
Solution:
bash
undefined
症状: API调用失败并提示“Unauthorized”
解决方案:
bash
undefined

Verify SUPERVISOR_TOKEN is set

验证SUPERVISOR_TOKEN是否已设置

echo $SUPERVISOR_TOKEN
echo $SUPERVISOR_TOKEN

Check add-on logs for token errors

检查插件日志中的token错误

Token is automatically injected by Home Assistant

Token由Home Assistant自动注入

Verify permissions in config.yaml

验证config.yaml中的权限设置

If calling hassio endpoints, add: permissions: [hassio]

如果调用hassio端点,添加:permissions: [hassio]

undefined
undefined

Configuration Not Saving

配置未保存

Symptoms: Options are lost after restart
Solution:
bash
undefined
症状: 重启后选项丢失
解决方案:
bash
undefined

Always save to /data/ or use bashio

始终保存到/data/或使用bashio

CONFIG_PATH="$(bashio::addon::config_path)" # Returns /data/ echo "my_value=123" > "${CONFIG_PATH}/settings.json"
CONFIG_PATH="$(bashio::addon::config_path)" # 返回/data/ echo "my_value=123" > "${CONFIG_PATH}/settings.json"

Verify /data/ exists and is writable

验证/data/是否存在且可写

ls -la /data/
undefined
ls -la /data/
undefined

Ingress Web UI Not Accessible

Ingress Web UI无法访问

Symptoms: Ingress URL returns 502 or blank page
Solution:
bash
undefined
症状: Ingress URL返回502或空白页面
解决方案:
bash
undefined

1. Verify service is listening on correct port

1. 验证服务是否在正确的端口上监听

netstat -tlnp | grep 8080
netstat -tlnp | grep 8080

2. Check reverse proxy headers in app config

2. 检查应用配置中的反向代理头

X-Forwarded-For, X-Forwarded-Proto must be set

必须设置X-Forwarded-For、X-Forwarded-Proto

3. Verify ingress settings in config.yaml

3. 验证config.yaml中的ingress设置

ingress: true ingress_port: 8080 ingress_entry: /
undefined
ingress: true ingress_port: 8080 ingress_entry: /
undefined

Build Fails with Architecture Error

构建失败提示架构错误

Symptoms: "Unknown architecture" or "Image not found"
Solution:
yaml
undefined
症状: 提示“Unknown architecture”或“Image not found”
解决方案:
yaml
undefined

Check config.yaml has valid arch values

检查config.yaml中的架构值是否有效

arch:
  • amd64 # x86 64-bit
  • armv7 # 32-bit ARM (Pi 2/3)
  • aarch64 # 64-bit ARM (Pi 4+)
  • armhf # 32-bit ARM (older devices)
  • i386 # 32-bit x86 (rare)
arch:
  • amd64 # x86 64位
  • armv7 # 32位ARM(树莓派2/3)
  • aarch64 # 64位ARM(树莓派4+)
  • armhf # 32位ARM(旧设备)
  • i386 # 32位x86(罕见)

Dockerfile must use {arch} placeholder

Dockerfile必须使用{arch}占位符

FROM ghcr.io/home-assistant/{arch}-base:latest
undefined
FROM ghcr.io/home-assistant/{arch}-base:latest
undefined

Setup Checklist

发布前检查清单

Before publishing your add-on, verify:
  • config.yaml has valid YAML syntax (use online YAML validator)
  • All listed architectures are supported (amd64, armv7, aarch64, armhf, i386)
  • Dockerfile uses official Home Assistant base image
  • S6 service files exist and are executable (chmod +x)
  • All configuration options are documented in schema
  • No hardcoded paths (use bashio helpers)
  • Permissions field lists required supervisor API access
  • Tested on at least amd64 and ARM architecture
  • Logs use bashio::log functions
  • Graceful shutdown on SIGTERM implemented
  • /data/ used for all persistent data
  • Ingress working if web UI is provided
  • README includes installation and usage instructions
发布插件前,请验证:
  • config.yaml具有有效的YAML语法(使用在线YAML验证工具)
  • 所有列出的架构均受支持(amd64、armv7、aarch64、armhf、i386)
  • Dockerfile使用官方Home Assistant基础镜像
  • S6服务文件存在且具有可执行权限(chmod +x)
  • 所有配置选项都在schema中记录
  • 没有硬编码路径(使用bashio辅助工具)
  • Permissions字段列出了所需的Supervisor API访问权限
  • 至少在amd64和ARM架构上进行了测试
  • 日志使用bashio::log函数
  • 实现了SIGTERM信号的优雅关闭
  • 所有持久化数据都存储在/data/中
  • 如果提供Web UI,Ingress可正常工作
  • README包含安装和使用说明

Creating a Repository

创建插件仓库

To publish multiple add-ons:
要发布多个插件:

1. Create Repository Structure

1. 创建仓库结构

bash
mkdir my-addon-repo
cd my-addon-repo
bash
mkdir my-addon-repo
cd my-addon-repo

2. Create repository.yaml

2. 创建repository.yaml

yaml
---
name: My Add-On Repository
url: https://github.com/username/my-addon-repo
maintainer: Your Name <email@example.com>
yaml
---
name: My Add-On Repository
url: https://github.com/username/my-addon-repo
maintainer: Your Name <email@example.com>

3. Add Add-Ons

3. 添加插件

my-addon-repo/
├── repository.yaml
├── my-addon-1/
│   ├── config.yaml
│   ├── Dockerfile
│   └── rootfs/
└── my-addon-2/
    ├── config.yaml
    ├── Dockerfile
    └── rootfs/
my-addon-repo/
├── repository.yaml
├── my-addon-1/
│   ├── config.yaml
│   ├── Dockerfile
│   └── rootfs/
└── my-addon-2/
    ├── config.yaml
    ├── Dockerfile
    └── rootfs/

4. Push to GitHub

4. 推送到GitHub

Add the repository URL to Home Assistant to make add-ons discoverable.
将仓库URL添加到Home Assistant,使插件可被发现。

Advanced: Publishing to GitHub Container Registry

进阶:发布到GitHub Container Registry

For private repositories or multi-architecture builds:
bash
undefined
对于私有仓库或多架构构建:
bash
undefined

Build and push for all architectures

为所有架构构建并推送镜像

docker buildx build
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
undefined
docker buildx build
--platform linux/amd64,linux/arm/v7,linux/arm64/v8
-t ghcr.io/username/my-addon:1.0.0
--push .
undefined

Related Skills

相关技能

  • docker-configs
    - Docker fundamentals and best practices
  • esphome-config-helper
    - Related IoT device integration patterns
  • home-assistant-automation
    - Home Assistant automation and scripting
  • docker-configs
    - Docker基础和最佳实践
  • esphome-config-helper
    - 相关的IoT设备集成模式
  • home-assistant-automation
    - Home Assistant自动化和脚本编写