ESPHome + ESP32 Wroom 32 + Xiaomi HHCCJCY01

Witam, coś mnie podkusiło i postanowiłem uporządkować ESP. Skasowałem wszystko i zacząłem od nowa i tu zonk, coś co działało poprzednio teraz stwarza problemy. Wygląda to tak

esphome:
  name: esphome02
  friendly_name: ESPHome02

esp32:
  board: esp32dev
  framework:
    type: arduino

esp32_ble_tracker:

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

sensor:
  - platform: xiaomi_hhccjcy01
    mac_address: 'xxxxxxxxxxxxx'
    temperature:
      name: "03 Xiaomi HHCCJCY01 Temperature"
    moisture:
      name: "03 Xiaomi HHCCJCY01 Moisture"
    illuminance:
      name: "03 Xiaomi HHCCJCY01 Illuminance"
    conductivity:
      name: "03 Xiaomi HHCCJCY01 Soil Conductivity"
    battery_level:
      name: "03 Xiaomi HHCCJCY01 Battery Level"

  - platform: xiaomi_hhccjcy01
    mac_address: 'xxxxxxxxxxxxxxxxx'
    temperature:
      name: "04 Xiaomi HHCCJCY01 Temperature"
    moisture:
      name: "04 Xiaomi HHCCJCY01 Moisture"
    illuminance:
      name: "04 Xiaomi HHCCJCY01 Illuminance"
    conductivity:
      name: "04 Xiaomi HHCCJCY01 Soil Conductivity"
    battery_level:
      name: "04 Xiaomi HHCCJCY01 Battery Level"      

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome02 Fallback Hotspot"
    password: "xxxxxxxxxxxx"

captive_portal:

Nie potrafię znaleźć źródła problemu

W logach jest zapis “Component sensor.xiaomi_hhccjcy01 requires component esp32_ble_tracker.”
co to za twór?

INFO ESPHome 2023.9.3
INFO Reading configuration /config/esphome/esphomebz.yaml...
Failed config

sensor.xiaomi_hhccjcy01: [source /config/esphome/esphomebz.yaml:22]
  
  Component sensor.xiaomi_hhccjcy01 requires component esp32_ble_tracker.
  platform: xiaomi_hhccjcy01
  mac_address: 5c:85:7e:b0:4d:22
  temperature: 
    name: 03 Xiaomi HHCCJCY01 Temperature
  moisture: 
    name: 03 Xiaomi HHCCJCY01 Moisture
  illuminance: 
    name: 03 Xiaomi HHCCJCY01 Illuminance
  conductivity: 
    name: 03 Xiaomi HHCCJCY01 Soil Conductivity
sensor.xiaomi_hhccjcy01: [source /config/esphome/esphomebz.yaml:33]
  
  Component sensor.xiaomi_hhccjcy01 requires component esp32_ble_tracker.
  platform: xiaomi_hhccjcy01
  mac_address: 5C:85:7E:B0:95:DC
  temperature: 
    name: 04 Xiaomi HHCCJCY01 Temperature
  moisture: 
    name: 04 Xiaomi HHCCJCY01 Moisture
  illuminance: 
    name: 04 Xiaomi HHCCJCY01 Illuminance
  conductivity: 
    name: 04 Xiaomi HHCCJCY01 Soil Conductivity
xiaomi_ble: None
  {}
Component xiaomi_ble requires component esp32_ble_tracker

Cały temat jest tu i zrozumiałem, że nie potrzeba trakera

Zawsze tego wymagał, nie możesz wywaliać z YAMLa czegokolwiek bez sprawdzania dokumentacji

No to źle zrozumiałeś - tracker hub jest integracją nadrzędną - integracja xiaomi ble używa kodu trackera

Ups, jak to naprawić?

Dodać brakującą linijkę aktywującą hub? esp32_ble_tracker:

a skoro porządkujesz kod to zrób to porządnie nie mieszając bloków funkcjonalnych, przykład poniżej, oczywiście wziąłem twój kod i go poprzekładałem, więc jeśli nadal się nie kompiluje to sprawdź dokumentację

# tu masz definicje niezbędne do działania więc są na początku
esphome:
  name: esphome02
  friendly_name: ESPHome02

esp32:
  board: esp32dev
  framework:
    type: arduino

# blok dotyczący komunikacji ze światem też na początku
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome02 Fallback Hotspot"
    password: "xxxxxxxxxxxx"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# tu się kończy blok wygenerowany przez kreator umożliwiający działanie ESPHome
# więc swój kod dodawaj poniżej 
# (chyba że modyfikujesz działanie jakiegoś z komponentów powyżej, to modyfikujesz na swoim miejscu)

# tu aktywujesz hub
esp32_ble_tracker:

# a tuy definiujesz sensory z niego korzystające
sensor:
  - platform: xiaomi_hhccjcy01
    mac_address: 'xxxxxxxxxxxxx'
    temperature:
      name: "03 Xiaomi HHCCJCY01 Temperature"
    moisture:
      name: "03 Xiaomi HHCCJCY01 Moisture"
    illuminance:
      name: "03 Xiaomi HHCCJCY01 Illuminance"
    conductivity:
      name: "03 Xiaomi HHCCJCY01 Soil Conductivity"
    battery_level:
      name: "03 Xiaomi HHCCJCY01 Battery Level"

  - platform: xiaomi_hhccjcy01
    mac_address: 'xxxxxxxxxxxxxxxxx'
    temperature:
      name: "04 Xiaomi HHCCJCY01 Temperature"
    moisture:
      name: "04 Xiaomi HHCCJCY01 Moisture"
    illuminance:
      name: "04 Xiaomi HHCCJCY01 Illuminance"
    conductivity:
      name: "04 Xiaomi HHCCJCY01 Soil Conductivity"
    battery_level:
      name: "04 Xiaomi HHCCJCY01 Battery Level"      

Ponadto jeśli nie korzystasz z połączeń aktywnych, to możesz to nieco ulepszyć, tak jak masz to w dokumentacji - dla większości modeli (a może i dla wszystkich?) xiaomi wystarcza nasłuch, czyli połączenie pasywne:

esp32_ble_tracker:
  scan_parameters:
    active: false

Tak to pomogło i wygładziłem to wszystko. Już działa, dzięki za pomoc.