esphome模拟IOT设备连接到HA

 

 

先下载docker

再下载homeassistant

\\172.16.16.6\产品研发事业中心\产品经营部\NAS组\软件发布\Pro_Docker_APP\ARM\homeassistant

安装时选择对应的共享文件夹

image

 

 

配置加速器: https://docker.1ms.run

image

 

下载最新的ESPhome镜像

对应的下载地址是:

https://github.com/esphome/esphome/pkgs/container/esphome/632024310?tag=latest

docker pull ghcr.io/esphome/esphome:latest

image

 

5aed4d75199d2ce42264350c01428a8a

 

下载完成后对比 sha256 ,一样则是下载完整了

docker  images查看镜像

 

docker inspect <image_name_or_id>

  

image

 

 

创建容器,创建的时候选择对应的文件夹

image

 

启用特权模式

image

 安装成功后,可以直接用设备的 启动后访问 http://NAS_IP:6052 即可进入 ESPHome Web UI ,比如现在的设备是在路由器下的 http://192.168.31.216:6052

 

新建一台虚拟设备

image

虚拟设备后选择 continue 

image

 

New Device Setup

image

输入虚拟设备的相关信息

image

 

image

 

 

 选择要模拟的设备型号,我这边选的是最常见的有硬件板的 ESP8266

image

 

创建成功后,可以把密钥复制下来,先跳过当前的安装编译过程,先对yaml文件进行修改,因为这次我们要模拟的是虚拟设备,所以这边要按照虚拟设备的过程去禁用相关功能

image

 

点击edit设备的yaml文件,把当前的配置写进去

esphome:
  name: api-virtual-switch1
  friendly_name: api-virtual-switch1  
# 核心:启用纯软件模拟,跳过所有硬件初始化
  # simulation:
  #   enabled: true
  #   skip_hardware_init: true
# 仅为模拟架构,无需真实ESP8266硬件
esp8266:
  board: esp01_1m
# 禁用所有硬件相关功能,减少资源消耗
logger:
  level: NONE
  baud_rate: 0
# ota:
#   disabled: true
# web_server:
#   disabled: true
# Enable Home Assistant API
# 与HA通信的核心组件(必须保留)
# Key点击ESPHome UI的「Generate Key」生成
api:
  encryption:
    key: "V0ykWVdesK2y3pxTcDa7DSY7bDo3W2SHDdGthiTUdV4="
  port: 6053
  reboot_timeout: 0s
# ota:
#   - platform: esphome
#     password: "0e262736d4f2cc92d52b94ea17cb671e"

# 模拟Wi-Fi连接(无需真实Wi-Fi硬件,仅为网络标识)
wifi:
  ssid: "Xiaomi_5A02"  # 填NAS局域网的Wi-Fi即可(仅标识,不实际连接)
  password: "Aa123456"
  manual_ip:
    static_ip: 192.168.31.150  # 分配静态IP(避免冲突)
    gateway: 192.168.31.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Api-Virtual-Switch1"
    password: "xIkmVV1zjHly"

captive_portal:

# 模拟开关功能(无硬件,纯软件状态)
switch:
  - platform: template
    name: "Virtual Wi-Fi Switch 1"
    id: virtual_switch
    optimistic: true  # 乐观模式,无硬件反馈

# 定时切换状态(模拟设备上报)
interval:
  - interval: 5s
    then:
      - switch.toggle: virtual_switch
    

 

 

simulation报错原因:

使用的 ESPHome 2025.12.5 是最新稳定版,理论上完全支持 simulation 配置,之所以仍报「invalid option」,核心原因是 simulation 配置的「平台兼容性」+「缩进 / 格式细节」—— 而非版本本身不支持

第一步:核心原因(为什么新版仍报错)

simulation 配置有严格的平台限制:
  • ✅ 支持的平台:esp32esp32s2esp32s3esp32c3(ESP32 全系列);
  • ❌ 不支持的平台:esp8266(你配置的 board: esp01_1m 属于 ESP8266 架构)
简单说:ESP8266 平台无论哪个版本的 ESPHome,都不支持 simulation 配置—— 这是硬件架构层面的限制,和 ESPHome 版本无关。

第二步:2025.12.5 版本专属配置(ESP8266 纯软件模拟)

既然你用的是新版 ESPHome,我们放弃 simulation(ESP8266 不支持),改用新版的「mock 模拟模式」+ 优化配置,确保编译后自动启动、6053 端口开放:
 

 

点击 install 开始编译 

image

 因为是虚拟设备 所以选择最后的这个 Manual  download 

image

需要先给文件夹权限再开始编译

点开文件夹属性,复制对应的文件夹路径

image

 

先给设备的文件夹加上权限后再开始编译,避免出现因为权限问题而编译失败

root@DXP480TPLUS-820:/volume1/docker/esphome_esphome-1# chmod -R 777 /volume1/docker/esphome_esphome-1/
root@DXP480TPLUS-820:/volume1/docker/esphome_esphome-1# chmod -R 1000:1000 /volume1/docker/esphome_esphome-1/

 

设备开始编译

编译过程中会出现的问题

Tool Manager: Error: Please read https://bit.ly/package-manager-ioerror ERROR Error: Please read https://bit.ly/package-manager-ioerror

主要原因是因为没给文件夹权限

image

 

编译成功后 设备显示内容如下:

image

 

 

 

image

 

 

模拟纯软件的虚拟设备,应该选择 Factory format (Previously Modern)(第一个选项),这是适配 ESPHome Web / 纯模拟场景的最佳选择,下面帮你理清两者的区别和选择逻辑:

第一步:明确两个格式的核心差异

格式选项适用场景是否适合你的虚拟设备
Factory format (Previously Modern) 1. 全新设备首次刷写
 
2. ESPHome Web 模拟 / 运行
 
3. 纯软件虚拟设备(无物理硬件)
✅ 完全适合(首选)
OTA format (Previously Legacy) 1. 已有物理 ESP32/ESP8266 设备的 OTA 远程更新
 
2. 仅用于给实体设备推送固件
❌ 不适合(虚拟设备无 OTA 更新需求)

第二步:选择后的操作(确保虚拟设备启动)

  1. 点击 Factory format (Previously Modern);
  2. 等待固件下载完成后,ESPHome Web 会自动加载并启动这个虚拟设备;
  3. 验证:回到 ESPHome 设备列表,该设备会显示「Online」,执行端口检查命令:
    nc -zv 192.168.31.150 6053 
    ✅ 输出 succeeded 即代表虚拟设备正常运行。

关键补充(避免踩坑)

  • 选择 OTA 格式不会导致报错,但虚拟设备无法正常启动(因为 OTA 格式固件缺少初始化模拟环境的核心文件);
  • Factory 格式包含完整的初始化逻辑,是纯软件模拟场景的唯一正确选择。

总结

  1. 核心选择:选第一个 Factory format (Previously Modern),适配虚拟设备 / ESPHome Web 模拟场景;
  2. 选择逻辑:Factory 格式用于全新 / 模拟设备,OTA 格式仅用于实体设备的远程更新;
  3. 最终效果:选择后虚拟设备会自动启动,6053 端口开放,HA 可正常连接。

 

 

在dokcer对应目录里面运行run命令 让当前的设备能够正确连接起来

image

 

posted @ 2026-01-12 18:28  陈晓猛  阅读(33)  评论(0)    收藏  举报