找回密码
 立即注册

微信扫码登录

搜索
查看: 58|回复: 1

[经验分享] 金灶FM7接入ha

[复制链接]

4

主题

140

回帖

479

积分

中级会员

积分
479
金钱
335
HASS币
0
发表于 10 小时前 | 显示全部楼层 |阅读模式
在论坛混了2月,对此有兴趣的,我来交作业

esphome:
  name: jinzao-waterkettle
  friendly_name: 金灶热水壶控制器
  platformio_options:  # C3专用编译参数
    board_build.mcu: esp32c3
    board_build.variant: esp32c3
    board_build.flash_mode: dio
    # BLE 5.0 配置移到这里,和其他编译参数同级
    CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y
  on_boot:
    priority: -10
    then:
      - delay: 1s
      # 开机同步 LED 状态
      - if:
          condition:
            binary_sensor.is_on: power_status_sensor
          then:
            - switch.turn_on: kettle_status_led
          else:
            - switch.turn_off: kettle_status_led

esp32:
  board: esp32-c3-devkitm-1
  variant: ESP32C3
  framework:
    type: esp-idf
    version: recommended
  # 移除这里的 sdkconfig_options 配置

# 先在YAML根层级添加deep_sleep组件(和esphome、esp32同级)
deep_sleep:
  id: deep_sleep_component

# ========== 新增蓝牙代理核心组件 ==========
bluetooth_proxy:
  active: true  # 支持主动连接ThermoBeacon等BLE设备
esp32_ble_tracker:  # 蓝牙代理依赖组件,必须添加
# =========================================

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true  
  ap:
    ssid: "Jinzao-AP"
    password: !secret ap_password
  manual_ip:
    static_ip: 192.168.3.69
    gateway: 192.168.3.1
    subnet: 255.255.255.0
  reboot_timeout: 15min

ota:
  platform: esphome
  password: !secret ota_password

api:
  password: "11"

logger:
  level: INFO

web_server:
  port: 80

captive_portal:

switch:
  # Power 控制开关(核心按钮)
  - platform: gpio
    #name: "power"
    id: power_control_switch
    pin: GPIO4
    restore_mode: RESTORE_DEFAULT_OFF
    internal: true  # 不暴露给HA,仅底层调用
    icon: "mdi:power"
    on_turn_on:
      - delay: 200ms
      - switch.turn_off: power_control_switch

  # 新增:kettle_power_sync 开关(对外暴露,同步电源状态)
  - platform: template
    name: "kettle_power_sync"  # 对应HA中搜索的实体ID
    id: kettle_power_sync_switch
    icon: "mdi:power"
    # 同步实体状态到热水壶开机检测传感器
    lambda: |-
      return id(power_status_sensor).state;
    # 触发开关时,调用底层power_control_switch
    turn_on_action:
      - switch.turn_on: power_control_switch
      - delay: 300ms
      # 同步LED状态(保持和硬件一致)
      - switch.turn_on: kettle_status_led
    turn_off_action:
      - switch.turn_on: power_control_switch  # 复用短按逻辑关闭
      - delay: 300ms
      - switch.turn_off: kettle_status_led

  # NTC 电源开关
  - platform: gpio
    pin: GPIO2
    id: ntc_power_switch
    restore_mode: ALWAYS_ON
    internal: true

  # 状态 LED
  - platform: gpio
    id: kettle_status_led
    pin:
      number: GPIO8
      inverted: true
    internal: true
    restore_mode: RESTORE_DEFAULT_OFF

  # 智能煮水开关(修复回弹+关机禁用,设为内部实体)
  - platform: gpio
    name: "智能煮水"  # 保留name但加internal,HA中隐藏
    pin: GPIO5
    id: boil_switch
    restore_mode: RESTORE_DEFAULT_OFF
    icon: "mdi:water-boiler"
    #internal: true  # 关键:隐藏原始开关,仅通过模板/逻辑调用
    on_turn_on:
      - if:
          # 仅开机状态下触发GPIO动作
          condition:
            binary_sensor.is_on: power_status_sensor
          then:
            - delay: 100ms  # 模拟短按时长
          else:
            - logger.log: "热水壶已关机,禁止操作智能煮水"
      # 无论是否开机,都执行回弹(移到if外,必执行)
      - switch.turn_off: boil_switch

  # 保温开关(增加电源状态判断)
  - platform: gpio
    name: "keepwarm"
    pin: GPIO6
    id: keepwarm_switch
    restore_mode: RESTORE_DEFAULT_OFF
    icon: "mdi:thermostat"
    on_turn_on:
      - if:
          condition:
            binary_sensor.is_on: power_status_sensor
          then:
            - delay: 100ms
          else:
            - logger.log: "热水壶已关机,禁止操作保温"
      - switch.turn_off: keepwarm_switch

  # 加水开关(增加电源状态判断+修复回弹错误)
  - platform: gpio
    name: "add_water"
    pin: GPIO7
    id: add_water_switch
    restore_mode: RESTORE_DEFAULT_OFF
    icon: "mdi:water-plus"
    on_turn_on:
      - if:
          condition:
            binary_sensor.is_on: power_status_sensor
          then:
            - delay: 100ms
          else:
            - logger.log: "热水壶已关机,禁止操作加水"
      - switch.turn_off: add_water_switch  # 修正原代码回弹指向错误

  # 修正版:工厂重置开关(清理NVS+重启)
  - platform: factory_reset
    name: "金灶热水壶-工厂重置"
    id: factory_reset_switch
    icon: "mdi:restart-alert"
    # 触发重置后,延迟1秒重启设备(无需restart动作)
    on_turn_on:
      - delay: 1s
      - deep_sleep.enter:
          id: deep_sleep_component
          sleep_duration: 0s  # 0秒睡眠 = 立即重启

binary_sensor:
  # 热水壶开机状态检测(必须确保状态正确!)
  - platform: gpio
    name: "热水壶开机状态"
    id: power_status_sensor
    pin:
      number: GPIO10
      mode:
        input: true
        pullup: true  # 按硬件电平调整(二选一)
        # pulldown: true
    device_class: power
    icon: "mdi:power"
    filters:
      - delayed_on: 200ms
      - delayed_off: 200ms
      - invert  # 状态反了就取消注释
    on_state:
      then:
        - if:
            condition:
              binary_sensor.is_on: power_status_sensor
            then:
              - switch.turn_on: kettle_status_led
            else:
              - switch.turn_off: kettle_status_led

sensor:
  - platform: wifi_signal
    name: "WiFi信号强度"
    update_interval: 60s
  
  - platform: adc
    id: adc_sensor
    pin: GPIO0
    attenuation: 12db
    update_interval: 0.2s
    accuracy_decimals: 4
    filters:
      - median:
          window_size: 5
          send_every: 3

  - platform: resistance
    id: resistance_sensor
    sensor: adc_sensor
    configuration: UPSTREAM
    resistor: 57000.0
    unit_of_measurement: "Ω"
    accuracy_decimals: 0

  - platform: ntc
    sensor: resistance_sensor
    name: "热水壶温度"
    unit_of_measurement: "℃"
    accuracy_decimals: 1
    calibration:
      b_constant: 3900
      reference_temperature: 100°C
      reference_resistance: 19600Ω
    filters:
      - sliding_window_moving_average:
          window_size: 5
          send_every: 3
      - lambda: |-
          if (x < 0 || x > 100) {
            return {};
          }
          return x;





屏幕截图 2026-01-01 090941.png
回复

使用道具 举报

66

主题

242

回帖

2381

积分

论坛技术达人

积分
2381
金钱
2068
HASS币
20
发表于 7 小时前 | 显示全部楼层
硬件呢?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 19:20 , Processed in 1.394766 second(s), 7 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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