ESPHome i Home Assistant Companion APP - odległość telefonu od furtki

Witam serdecznie,

Próbuje uruchomić tracking telefonu (dokładniej pomiar odlełości/dystansu) z wykorzystaniem ESPHome.
Mam przy domu furtkę z elektrozaczepem otwieraną z domu, chcę ją trochę unowocześnieć z wykorzystaniem ESPHome.
Plan jest taki, aby po podejściu na zdefiniowaną odległość furtka (elektrozaczep) się otwierała.
Mam zainstalowaną najnowszą wersję aplikacji Home Assistant (2023.9.2) na Huawei P20, w ustawieniach aktywowałem BLE transmitter.
W ESP Home mam następującą konfigurację:

esp32_ble_tracker:
  scan_parameters:
    active: false

bluetooth_proxy:
  active: false

Po aktywacji sensora, od razu w HA wykryło mi integrację iBeacon Tracker, niestety nie widzę w niej żadnych urządzeń.

Czy ktoś z forumowiczów używał telefonu/zegarka/iBeacon’a do otwoerania furtki na podstawie odległości urządzania od ESP Home? Całość działa stabilnie?
W jaki sposób skonfigurować ESPHome, telefon i aplikację aby całość działała i abym mógł otwierać furtkę po podejściu z telefonem.

Możesz podrzucić jakieś linki do dokumentacji takiej funkcji (mierzenia odległości BLE trackerem)?
Bo mówiąc szczerze pierwszy raz o tym słyszę…

Projekt widziałem w oparciu o ESPresence (https://espresense.com/),
Prezentacja:
https://www.youtube.com/watch?v=p7C2QvmsM8M

Natomiast ESPHome ma sensor RSSI (ESP32 Bluetooth Low Energy RSSI Sensor — ESPHome) zakładałem, że mogę go wykorzystać.
Problemem jest natomiast wykrycie samego telefonu, co bym nie robił, to w logach nie widzę telefonu (a aplikacja HA i sensory są włączone)

1 polubienie

Ten telefon to na androidzie?
Apka wystawiająca beacon ma wszystkie uprawnienia? (m.in. praca w tle)

Jeśli chodzi o “HA Companion” to dodatkowo powinien być chyba włączony beacon

Tak na androidzie, chyba ostatni model Huawei który go miał na pokładzie.
Potwierdzam, że mam włączony Nadajnik BLE.
ESPresence wykrył telefon i niby działa wykrywanie dystansu, ale odświeżanie jest bardzo wolne. Nie wyobrażam sobie sytuacji, gdzie podchodzę pod furtkę i muszę czekać 20 sekund a się otworzy.

Zastanawiam się dlaczego ESP Home nie chce mi złapać telefonu :confused:

Jeśli się tym bardziej pobawię to dam znać, póki co czasu brak (i zawsze mi szkoda baterii w telefonie na takie gadżety).
Mam 2 proxy na bazie ESPHome i jednak nie wykryło mi telefonu, więc nie jesteś sam :stuck_out_tongue:

edit: zajrzałem w dokumentację i do działania potrzeba jeszcze czegoś takiego w ESPHome

binary_sensor:
  # Presence based on iBeacon UUID
  - platform: ble_presence
    ibeacon_uuid: '68586f1e-89c2-11eb-8dcd-0242ac130003' 
# powyżej to jest UUID ustawiany w aplikacji (pewnie będziesz miał automatycznie wygenerowany jakiś inny)
    name: "ESP32 BLE Tracker Test Service iBeacon"
1 polubienie

Dzięki za sprawdzenie :slight_smile: Czyli to nie tylko mój problem.
Nie potrzebuję wideo domofonu czy domofonu, do otwierania furtki i tak będę wykorzystywał ESPHome (dwa wejścia + przekaźnik), więc otwieranie przez bluetooth to opcja, jednak chciałem sprawdzić jak całość się zachowa zanim cokolwiek zamontuję i rozpocznę “test żony”

Edit:

@szopen Przy próbie kompilacji dostaję błąd:

/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/esphome/core/controller.o: in function `esphome::Controller::setup_controller(bool)':
/data/build/esphome-web-25bf30/src/esphome/core/controller.cpp:11: undefined reference to `esphome::binary_sensor::BinarySensor::add_on_state_callback(std::function<void (bool)>&&)'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/main.o: in function `esphome::preferences::IntervalSyncer::IntervalSyncer()':
/data/build/esphome-web-25bf30/src/esphome/components/preferences/syncer.h:9: undefined reference to `esphome::binary_sensor::BinarySensor::BinarySensor()'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/main.o: in function `setup()':
/data/build/esphome-web-25bf30/src/main.cpp:144: undefined reference to `vtable for esphome::ble_presence::BLEPresenceDevice'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: /data/build/esphome-web-25bf30/src/main.cpp:144: undefined reference to `vtable for esphome::ble_presence::BLEPresenceDevice'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/main.o: in function `esphome::Component::set_component_source(char const*)':
/data/build/esphome-web-25bf30/src/esphome/core/component.h:148: undefined reference to `vtable for esphome::ble_presence::BLEPresenceDevice'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: /data/build/esphome-web-25bf30/src/esphome/core/component.h:148: undefined reference to `vtable for esphome::ble_presence::BLEPresenceDevice'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/main.o: in function `esphome::Component::Component()':
/data/build/esphome-web-25bf30/src/esphome/core/component.h:67: undefined reference to `vtable for esphome::ble_presence::BLEPresenceDevice'
/data/cache/platformio/packages/toolchain-riscv32-esp/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../riscv32-esp-elf/bin/ld: .pioenvs/esphome-web-25bf30/src/main.o:/data/build/esphome-web-25bf30/src/esphome/components/preferences/syncer.h:11: more undefined references to `vtable for esphome::ble_presence::BLEPresenceDevice' follow
collect2: error: ld returned 1 exit status
*** [.pioenvs/esphome-web-25bf30/firmware.elf] Error 1
========================= [FAILED] Took 51.11 seconds =========================

Poniżej moja konfiguracja:

esphome:
  name: esphome-web-25bf30
  friendly_name: BTProxy
  platformio_options:
    board_build.mcu: esp32c3
    board_build.variant: esp32c3  

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y
      CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
      CONFIG_ESP_TASK_WDT_TIMEOUT_S: "10"

# Enable logging
logger:

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

ota:

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

  ap:
    ssid: "Esphome-Web-25Bf30"
    password: "XXX"

esp32_ble_tracker:
  scan_parameters:
    active: false

bluetooth_proxy:
  active: false

binary_sensor:
  - platform: ble_presence
    ibeacon_uuid: '68586f1e-89c2-11eb-8dcd-0242ac130003' 
    name: "ESP32 BLE Tracker Test Service iBeacon"

Używam ESP-IDF, może dlatego.
W aplikacji mam dwie wartości, id i UUID. ESPresence używa id, a co mam wpisać tu? an pewno UUID? Ruszyło u Ciebie?

Zacznij od clean build files, bo to błąd linkera, więc pewnie w cache masz jakieś stare wersje komponentów, jeśli używasz ESPHome we wrześniowym wydaniu to zaktualizuj do 2023.9.1

Jak widać nie działa zbyt rewelacyjnie, bo się nie ruszałem z chaty.

w tej linijce masz podać UUID taki jaki masz w aplikacji w ustawieniach (nigdy nie używaj przykładowych identyfikatorów znalezionych w sieci, zawsze ustaw własne)

PS masz płytkę ESP32-C3 a nie ESP32?
nie wiedziałem, że na C3 jest już działający bluetooth, a jest?

Następne serie też były na andku, czyli P30, P40 itd. Chyba dopiero P50 jest na ich systemie.

ESPresense (esp32)

Wykrywa Samsunga (kiedy samsung skanuje) ale za każdym razem Samsung wysyła inny mac adres
Ten sam samsung:
ScreenShot_20230928192143
Co innego z testerem ładowania USB (BT) , TV działa idealnie
ScreenShot_20230928195425

ScreenShot_20230928200624

Dlatego wymagany jest UUID (tzn. nie wiem jak w tym projekcie, ale to jest zachowanie normalne i ESPHome umożliwia wykorzystanie UUID zamiast MACa), ukrywanie MAC-adresu można wyłączyć w odniesieniu do karty WiFi to może i można wyłączyć w przypadku BLE?

Z telefonem sprawa wygląda tak:
(ESPresense)

W aplikacji trzeba włączyć nadajnik Włącz nadajnik


Na dole jest UUID w moim przypadku z końcówką 214

Ustawiając
Główny na 50 i Podrzędny na 5, Telefon wysyła dodając ustawienia do UUID “iBeacon:xxxa-0e3a-44df-9518-dc74284e8214-50-5”
MQTT Explorer:
ScreenShot_20230930185702

Nadajnik można włączyć, wyłączyć za pomocą komendy

...
  - service: notify.mobile_app_sm_g975f
    data:
      message: command_ble_transmitter
      data:
        command: turn_on

:slight_smile:
I inne ustawienia:

ScreenShot_20230930190822

Z do pobory dodatkowej energii przez transmisje ( pełna moc) - na pewna jest zwiększona ale na razie niezauważalna
:thinking:
ESPHome

substitutions:
  name: esp32-bluetooth-proxy-991240
  friendly_name: Bluetooth Proxy 1
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: xxxxBj/40t55brpgrea7x7a0D5hWWCxVe5MurvX2+tU=


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

Skanuje lecz nie znajduje żadnych urządzeń

Może jakoś inaczej się odczytuje skany? ( ESP jest dla mnie nowością, choć w samochodzie mam :grinning:)

Aktualnie używam https://www.seeedstudio.com/Seeed-XIAO-ESP32C3-p-5431.html

Aktualnie mam 2023.9.3, ale clean build files pomogło. Dziękuję :slight_smile:

UUID użyłem na potrzeby postu, u siebie użyłem wartości z aplikacji i ruszyło.

Niestety czas odświeżania jest masakrycznie wolny. Po wyłączeniu Bluetooth w telefonie sensor w HA zmenia stan po ok minucie.