找回密码
 立即注册

微信扫码登录

搜索
楼主: cook

[求助] 各位手搓的ESP32设备,是如何远程

[复制链接]

8

主题

88

回帖

751

积分

高级会员

积分
751
金钱
655
HASS币
0
发表于 21 小时前 | 显示全部楼层
本帖最后由 arnzh 于 2025-10-10 01:06 编辑


# MQTT配置 - 包含OTA触发标记监听
mqtt:
  id: mqtt_client
  broker: "192.168.1.100"
  port: 1883
  username: "esphome"
  password: "esphome123"
  client_id: "esp32mqttota"
  keepalive: 15s
  reboot_timeout: 0s

  # 遗嘱和在线状态
  birth_message:
    topic: "esp32mqttota/status"
    payload: "online"
    retain: true

  will_message:
    topic: "esp32mqttota/status"
    payload: "offline"
    retain: true

  # MQTT连接事件
  on_connect:
    - logger.log: "MQTT连接成功"
    - lambda: |-
        ESP_LOGI("mqtt", "MQTT连接已建立,订阅OTA控制主题");
        id(mqtt_client)->publish("esp32mqttota/device/status", "ready", 0, true);
        // 订阅OTA控制主题
        id(mqtt_client)->subscribe("esp32mqttota/ota/force", 0);
        id(mqtt_client)->subscribe("esp32mqttota/ota/url", 0);

  on_disconnect:
    - logger.log: "MQTT连接断开"

  # MQTT消息监听
  on_message:
    - topic: "esp32mqttota/ota/force"
      then:
        - lambda: |-
            ESP_LOGI("mqtt", "收到OTA强制更新命令: %s", x.c_str());
            if (x == "on" || x == "ON" || x == "true" || x == "1") {
              ESP_LOGI("ota", "触发强制OTA更新");
              id(ota_status_sensor).publish_state("准备下载");
              id(mqtt_client)->publish("esp32mqttota/ota/status", "triggered_by_mqtt", 0, true);
            }
        - ota.http_request.flash:
            url: !lambda "return id(global_ota_url);"
            md5_url: !lambda "return id(global_ota_url) + ".md5";"
        - logger.log: "This message should be not displayed because the device reboots"
        - lambda: |-
            else if (x == "off" || x == "OFF" || x == "false" || x == "0") {
              ESP_LOGI("mqtt", "取消OTA更新");
              id(ota_status_sensor).publish_state("已取消");
              id(mqtt_client)->publish("esp32mqttota/ota/status", "cancelled", 0, true);
            }

    - topic: "esp32mqttota/ota/url"
      then:
        - lambda: |-
            ESP_LOGI("mqtt", "收到OTA URL配置: %s", x.c_str());
            if (x.length() > 10) {
              global_ota_url = x;
              ESP_LOGI("ota", "OTA URL已更新: %s", global_ota_url.c_str());
              id(mqtt_client)->publish("esp32mqttota/ota/url/confirmed", x, 0, true);
            } else {
              ESP_LOGW("mqtt", "无效的OTA URL: %s", x.c_str());
              id(mqtt_client)->publish("esp32mqttota/ota/error", "Invalid URL", 0, true);
            }

# OTA更新配置
ota:
  - platform: esphome
    password: "ota_secure_password_123"

    on_begin:
      then:
        - logger.log: "OTA更新开始"
        - lambda: |-
            ESP_LOGI("ota", "开始固件更新过程");
            id(ota_status_sensor).publish_state("下载中");
            id(ota_progress_sensor).publish_state(0);
            id(mqtt_client)->publish("esp32mqttota/ota/status", "started", 0, true);

    on_progress:
      then:
        - lambda: |-
            int progress = (int)(x * 100);
            ESP_LOGI("ota", "OTA更新进度: %d%%", progress);
            id(ota_progress_sensor).publish_state(progress);
            std::string progress_msg = std::to_string(progress);
            id(mqtt_client)->publish("esp32mqttota/ota/progress", progress_msg, 0, true);

    on_end:
      then:
        - logger.log: "OTA更新完成"
        - lambda: |-
            ESP_LOGI("ota", "OTA更新成功完成");
            id(ota_status_sensor).publish_state("更新完成");
            id(ota_progress_sensor).publish_state(100);
            id(mqtt_client)->publish("esp32mqttota/ota/status", "completed", 0, true);

    on_error:
      then:
        - logger.log: "OTA更新出错"
        - lambda: |-
            ESP_LOGE("ota", "OTA更新过程中出现错误");
            id(ota_status_sensor).publish_state("更新失败");
            id(mqtt_client)->publish("esp32mqttota/ota/status", "failed", 0, true);

  - platform: http_request

# HTTP请求组件
http_request:
  id: http_request_component
  useragent: esphome/1.0
  timeout: 60s
  verify_ssl: false


回复

使用道具 举报

0

主题

17

回帖

1511

积分

金牌会员

积分
1511
金钱
1494
HASS币
0
发表于 2 小时前 | 显示全部楼层

大佬感谢你的教程     不知道固件文件放哪里  需要转域名 地址吗
回复

使用道具 举报

23

主题

390

回帖

3875

积分

元老级技术达人

积分
3875
金钱
3447
HASS币
120
发表于 6 分钟前 | 显示全部楼层
简单的可以mqtt对接巴法云
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-10-10 22:48 , Processed in 0.133646 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表