Přeskočit na hlavní obsah

Bluetooth Proxy (ESPHome)

Bluetooth Proxy integrace není tradičním typem integrace, který přidává specifické produkty nebo služby. Místo toho umožňuje Home Assistantovi rozpoznat Bluetooth zařízení, která jsou mimo dosah samotného hardwaru, na kterém Home Assistant běží.

Bluetooth proxy podpora v Home Assistantovi

Home Assistant postupně zaváděl podporu pro Bluetooth, což rozšiřuje jeho možnosti integrace:

  • Verze 2022.08 přinesla podporu interního Bluetooth a USB donglů.
  • Verze 2022.09 umožnila pasivní čtení dat z ESP32 zařízení pomocí ESPHome Proxy.
  • Verze 2022.10 přidala možnost aktivního ovládání zařízení prostřednictvím aktivního Bluetooth proxy.
  • Verze 2022.11 přidala podporu pro více aktivních připojení současně.
  • Verze 2023.6 (ESPHome) přinesla advertisement bundling, což významně zlepšilo výkon snížením datového provozu mezi Home Assistantem a proxy.

Role Bluetooth Proxy

Bluetooth proxy je užitečná v situacích, kdy:

  1. Home Assistant není dostatečně blízko Bluetooth zařízení.
  2. Chceme rozšířit Bluetooth pokrytí po domě.

HA BluetoothProxy schema

ESPHome funguje jako most mezi Bluetooth a WiFi/Ethernetem, a umožňuje tak připojení vzdálených zařízení.

Doporučený Hardware

Mě se hodně osvědčili úplně základní ESP32, které lze koupit doslova za pár korun. Obsahují jak WiFi (2.4GHz pouze) tak i Bluetooth a jsou přímo podporované ESPHome pro Proxy.

Základní ESP32 moduly

Nejjednodušší a nejlevnější řešení pro Bluetooth Proxy:

wifibluetooth
ESP32-WROOM

ESP32-WROOM

Základní ESP32 v mnoha variantách

Chytré ovládací panely s Bluetooth Proxy

Pokud hledáte komplexnější řešení, které kombinuje ovládací panel s Bluetooth Proxy funkcionalitou, můžete se podívat na Sonoff NSPanel. Tento zařízení obsahuje ESP32 čip a po nahrání ESPHome firmware funguje nejen jako dotykový panel pro ovládání domácnosti, ale zároveň slouží jako Bluetooth Proxy pro rozšíření pokrytí BLE zařízení.

wifibluetooth
NSPanel EU, šedý

Sonoff NSPanel EU, šedý

Chytrý ovládací panel s integrovaným dotykovým displejem.
wifibluetooth
NSPanel EU, bílý

Sonoff NSPanel EU, bílý

Chytrý ovládací panel s integrovaným dotykovým displejem.
tip

Více informací o NSPanel a jeho konfiguraci najdete v mém článku Sonoff NSPanel - eWelink nebo ESPHome.

Vytvoření Bluetooth proxy pomocí ESP32 a ESPHome

Postup se liší podle toho v jaké jsme aktuálně situaci:

  1. Pokud už ESPHome na nějaké ESP32 kompatibilním zařízení provozujeme
  2. Pokud ještě žádné ESPHome nemáme neinstalováno a nebo chceme zprovoznit ESPHome na dalším zařízením

Přidání do existujícího ESP32 s ESPHome

Budeme předpokládat, že už máme v Home Assistantovi nainstalovaný addon ESPHome a v něm můžeme editovat konfiguraci zařízení s ESP32.

Situace bude jednoduchá, jelikož stačí přidat dva řádky

# Příklad konfigurace pro aktivaci Bluetooth Proxy
bluetooth_proxy:
active: true

a aktualizovanou verzi do ESP32 nahrát.

Výchozí nastavení

Od novějších verzí ESPHome je active: true výchozí hodnota, což znamená, že Bluetooth Proxy funguje v aktivním režimu (umožňuje jak čtení, tak ovládání zařízení). Starší verze měly výchozí hodnotu active: false (pouze pasivní čtení).

Vytvoření nového ESP32 zařízení s ESPHome

Při použití nového ESP32 zařízení dokonce není potřeba mít nainstalovaný ESPHome Addon do Home Assistanta a vše uděláme přes webové rozhraní.

Stačí ESP32 zařízení připojit do počítače pomocí USB, otevřít v prohlížeči Chrome webové rozhraní a po úspěšném nahrání firmware do ESP32 si jej Home Assistant při připojení do správné WiFi sítě sám najde a doinstaluje jako integraci.

Oficiální Bluetooth Proxy installer

ESPHome má také dedikovaný instalátor pro Bluetooth Proxy, který nabízí předpřipravené konfigurace pro různé ESP32 zařízení.

Pokročilá konfigurace a optimalizace

Od verze ESPHome 2023.6.0 je k dispozici advertisement bundling, což je funkce, která výrazně zlepšuje výkon Bluetooth Proxy. Bundling snižuje datový provoz mezi Home Assistantem a proxy tím, že seskupuje více Bluetooth reklam do jedné zprávy.

Výhody advertisement bundling:

  • Snížení datového provozu mezi Home Assistantem a ESP32
  • Zlepšení výkonu díky menší konkurenci mezi Bluetooth a WiFi o přístup k rádiu
  • Rychlejší odezva a stabilnější připojení
tip

Advertisement bundling je automaticky aktivní v ESPHome 2023.6.0+ a nevyžaduje žádnou speciální konfiguraci. Jednoduše aktualizujte ESPHome na verzi 2023.6.0 nebo novější.

Konfigurace počtu připojení

Bluetooth Proxy v ESPHome umožňuje současně až 3 aktivní BLE připojení (výchozí nastavení). Toto číslo lze zvýšit až na 9, ale doporučuje se zůstat maximálně na 5, protože vyšší hodnoty mohou způsobit problémy s pamětí:

bluetooth_proxy:
active: true
connection_slots: 3 # Výchozí hodnota, max 9, doporučeno max 5
cache_services: true # Výchozí, ukládá GATT služby do NVS flash pro rychlejší připojení
Paměťové nároky

Každý connection slot zabírá přibližně 1KB RAM. Při zvyšování počtu slotů může docházet k nestabilitě, zejména u zařízení s omezenou pamětí.

Cache Services

Možnost cache_services (výchozí true) ukládá GATT služby do NVS flash paměti, což výrazně zrychluje navazování aktivních připojení k již známým zařízením.

Framework: ESP-IDF vs Arduino

Pro optimální výkon Bluetooth Proxy důrazně doporučuji používat ESP-IDF framework místo Arduino:

esp32:
board: esp32dev
framework:
type: esp-idf # Výrazně lepší výkon než Arduino

Důvody pro ESP-IDF:

  • Nižší spotřeba paměti
  • Lepší výkon Bluetooth
  • Stabilnější provoz
Přepínání frameworku

Při přepnutí z arduino na esp-idf je nutné nahrát firmware přes USB kabel, protože se mění partition table. OTA aktualizace v tomto případě nebude fungovat!

Optimalizace příjmu signálu

Pro maximální výkon příjmu Bluetooth signálu:

1. Umístění zařízení:

  • Umístěte ESP32 co nejblíže k BLE zařízením, která chcete monitorovat
  • Minimálně 3 metry od routerů, switchů a síťových zařízení (EMI interference)
  • Vyhněte se umístění v kovových rackcích

2. WiFi vs Ethernet:

  • Ethernet připojení výrazně zlepšuje výkon Bluetooth, protože uvolňuje WiFi modul
  • U WiFi zařízení neměňte scan parametry z výchozích hodnot (může způsobit nestabilitu WiFi)

3. Scan parametry (pouze pro Ethernet zařízení):

esp32_ble_tracker:
scan_parameters:
interval: 1100ms
window: 1100ms
active: true
info

Toto nastavení maximalizuje šanci zachytit všechna BLE vysílání, ale používejte pouze u zařízení s Ethernet připojením!

Zakázání Web Serveru

Pokud používáte Bluetooth Proxy, zakažte Web Server komponent, protože může způsobit problémy s pamětí:

# Web server NEPOUŽÍVEJTE s Bluetooth Proxy
# web_server: # <- zakomentujte nebo odstraňte

Přidání Bluetooth zařízení do Home Assistanta přes ESPHome Proxy

Pokud už nám ESP32 s ESPHome Proxy běží a přidali jsme ho do Home Assistanta měli by nám po chvíli začít samy naskakovat zařízení s příznakem objeveno.

HA BluetoothProxy discovery

Vizualizace Bluetooth sítě

Home Assistant obsahuje užitečnou funkci vizualizace Bluetooth sítě, která umožňuje zobrazit celou topologii Bluetooth sítě včetně toho, která zařízení jsou objevena kterými skenery.

HA Bluetooth vizualizace sítě

Na vizualizaci je jasně vidět:

  • Bluetooth skenery (proxy) - v ukázce můžete vidět dva skenery:
    • Jednoduchá ESP32 deska - základní zařízení určené čistě pro Bluetooth Proxy
    • Sonoff NSPanel - chytrý ovládací panel s ESPHome, který funguje zároveň jako Bluetooth Proxy (více detailů v mém článku Sonoff NSPanel - eWelink nebo ESPHome)
  • Objevená zařízení připojená k jednotlivým skenerům
  • Známá zařízení - Bluetooth zařízení, která jsou již integrovaná a používaná v Home Assistantovi
  • Neznámá zařízení - objevená zařízení, která dosud nebyla přidána do Home Assistanta
Jak zobrazit vizualizaci

Pro zobrazení vizualizace Bluetooth sítě v Home Assistantovi:

  1. Přejděte do NastaveníZařízení a služby
  2. Klikněte na záložku Integrace
  3. Najděte jakékoliv Bluetooth zařízení
  4. Klikněte na ozubené kolo vedle zařízení
  5. V sekci Monitor vysílání klikněte na Vizualizace

Tato vizualizace je obzvláště užitečná když:

  • Chcete ověřit, že vaše Bluetooth Proxy fungují správně
  • Potřebujete zjistit, který skener má nejlepší signál ke konkrétnímu zařízení
  • Plánujete umístění dalších skenerů pro rozšíření pokrytí
  • Chcete identifikovat neznámá zařízení v dosahu, která by stálo za to přidat
info

Čtyři písmena/číslice s názvu zařízení odpovídají posledním čtyřem znakům MAC adresy zařízení.

Pokud se zařízení z nějakého důvodu nezobrazí jako objeveno samo je stále možné ho přidat pomocí tlačítka Přidat integraci, kde si integraci vyhledáme ručně. Například pro Bluetooth zařízení od firmy Xiaomi nám poslouží integrace s názvem Xiaomi BLE.

Konkrétní kroky během přidání se mohou lišit dle výrobce a zařízení, ale nemělo by to být obvykle nic složitého.

My se podíváme na zařízení Xioami, které jsou jedny z nejrozšířenějších – tedy alespoň u mě – a konkrétně si ukážeme dva scénáře:

  1. Přidání zařízení bez párovacího kódu
  2. Přidání zařízení s párovacím kódem

Zařízení bez párovacího kódu

Jedná se o obvykle starší zařízení, které ještě nepoužívá šifrování přenosu dat, ale jeho přidání je o to jednodušší. Na druhou stranu si ho může přidat kdokoliv kdo je v jeho dosahu.

Příkladem takového zařízení může být teploměr Xiaomi Mijia LYWSDCGQ, který se ale podle všeho už v dnešní době nedá téměř sehnat.

Po přidání do HomeAssistanta můžeme vidět jak Teplotu a Vlhkost tak i stav tužkové baterie.

Zařízení s párovacím kódem – Xiaomi

Novější zařízení od Xioami naproti tomu vyžadují pro spárování token – respektive v oficiální aplikaci Xiaomi Home jste tohoto ušetřeni, ale interni se tento token generuje a používá.

Stejně jako v předchozím případě se nejprve zařízení objeví ve stavu Objeveno a pokud ještě neznáte párovací token tak doporučuji zatím nepřidávat – jak jej získat se podíváme níže

Příkladem takového zařízení může být teploměr Xiaomi Mijia LYWSD03MMC

bluetooth
Mijia Bluetooth Thermometer

Xiaomi Mijia Bluetooth Thermometer

Bluetooth teploměr a vlhkoměr od Xiaomi LYWSD03MMC

Zjištění stávajícího párovacího kódu

Existují dva hlavní způsoby získání párovacího kódu pro Xiaomi zařízení:

Metoda 1: Přímé zadání Xiaomi Cloud přihlášení v Home Assistantovi (doporučeno)

Novější verze Home Assistanta umožňují zadání přihlašovacích údajů k Xiaomi Cloudu přímo v konfiguraci integrace. Home Assistant pak automaticky stáhne a importuje párovací klíče (bind keys) pro všechna vaše Xiaomi zařízení.

Tato metoda je nejjednodušší a doporučená pro většinu uživatelů. Použít ji lze při přidávání Xiaomi BLE integrace v Home Assistantovi.

tip

Tento způsob funguje pro zařízení používající MiBeacon v4/v5. Pokud tato metoda nefunguje, použijte Metodu 2 níže.

Metoda 2: Manuální získání pomocí Token Extractor

Druhou možností je manuální získání stávajícího párovacího kódu, který je uložený na Xiaomi Cloudu. K tomu budeme potřebovat stáhnout aplikaci Token Extractor z webu a připravíme si přihlašovací jméno a heslo do Xiaomi Cloudu (to co používáme v Xiaomi Home aplikaci na mobilu).

Instalaci provedeme ideálně z příkazového řádku:

wget https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor/releases/latest/download/token_extractor.zip
unzip token_extractor.zip
cd token_extractor

a budeme potřebovat ještě doinstalovat balíčky pro Python. Doporučuji to udělat ve vlastním Python Environment, který pak můžete smazat:

python3.11 -m venv venv
source ./venv/bin/activate
pip install -r ./requirements.txt

Aplikaci spustíme příkazem python token_extractor.py a po zadání přihlašovacích údajů bude ještě potřeba zadat server. Ten by měl odpovídat nastavení regionu v Xiaomi Home aplikaci – v našich končinách budeme mít zřejmě nastaveno Česko a pak název serveru je de (tedy Německo).

Proběhne samotné přihlášení do Xiaomi cloudu a měli bychom získat seznam všech zařízení včetně párovacích kódů – tady jsou označeny jako tokeny.

Server (one of: cn, de, us, ru, tw, sg, in, i2) Leave empty to check all available:
de

Logging in...
Logged in.

Devices found for server "de":

---------

---------
NAME: Teploměr #1
ID: blt.4.1b8ih56mcgc00
BLE KEY: 758679a38a4d356bc7aa926f40af2434
MAC: A4:C1:38:91:A4:DE
IP: 45.129.32.131
TOKEN: 07c5d233c078fb0b7d0be498
MODEL: miaomiaoce.sensor_ht.t2
---------
NAME: Teploměr #2
ID: blt.4.1ghihju9cgk00
BLE KEY: 2bab4851cc3adb58a87dcaca374d5dba
MAC: A4:C1:38:92:2A:45
TOKEN: 82ae1f02e05a3f4dbf6509ee
MODEL: miaomiaoce.sensor_ht.t2
---------
...

Press ENTER to finish
Upozornění pro teploměr Xiaomi Mijia LYWSDCGQ

Podle mých zjištění to vypadá, že teploměr Xiaomi Mijia LYWSDCGQ už nejde používat přes ESPHome Proxy v případě firmware 2.x. Pokud jste to ještě neudělali tak proto neprovádějte aktualizaci přes aplikaci.

Zda máte verzi 2 je možné zřejmě poznat už při získávání párovacího kódu, kde je u verze 2 přítomna i IP adresa.

HA BluetoothProxy xiaomi firmware

Generování nového párovacího kódu

Pokud nechceme z jakéhokoliv důvodu použít aplikaci pro získání kódu,, pak druhou možností, která ale není obecná, je v případě Xiaomi teploměru použití webu a vygenerování nového kódu. To provedeme po připojení pomocí Do Activation a následně si zkopírujeme si Mi Bind Key.

info

Nevýhodou tohoto řešení je fakt, že token zařízení bude změněn, tj. prostřednictvím aplikace Xiaomi Home se už do zařízení nepřipojíme – tokeny nebudou odpovídat.

Přidání zařízení do Home Assistanta

Nyní už můžeme kliknout na tlačítko Nastavit pro přidání. Pokud se do nového zařízení nyní podíváme zjistíme, že neobsahuje žádné entity. To je dáno tím, že posílání hodnot je šifrováno a my musíme ještě nastavit párovací kód.

Chvíli ještě počkáme a mělo by se nám zařízení znovu objevit nahoře v seznamu zařízení ve stavu Vyžadována pozornost.

HA BluetoothProxy discovery code

Pokud nyní klikneme na Přenastavit tak obdržíme dialog kam už můžeme zadat párovací klíč, který jsme si zjistili některým ze způsobů výše.

HA BluetoothProxy discovery code

Tím máme vše hotovo a zanedlouho nám postupně začnou přibývat entity.

HA bluetooth qingping

Zařízení s párovacím kódem – QINGPING

Očividně ne všechny integrace vyžadují znát i párovací kód a tak například budík od QINGPINGu se sice tváří jako Xiaomi zařízení, ale v Home Assistantovi lze přidat i přes QINGPING integraci, která zadávání párovacího kódu nevyžaduje.

HA bluetooth qingping

Stále ale můžeme pokud chceme přidat i QINGPING zařízení pomocí Xiaomi BLE integrace, která ale po nás párovací kód bude vyžadovat.

bluetooth
Bluetooth Alarm Clock

Qingping Bluetooth Alarm Clock

Bluetooth budík s teploměrem a vlhkoměrem

Zhodnocení

Zejména bluetooth teploměry od Xioami už používám poměrně dlouho, jelikož stojí doslova pár korun a mají displej. Nicméně do přidání pořádné podpory Bluetooth přímo do HomeAssistanta jsem integraci řešil pomocí ESP32 a ESPHome, kde jsem však jednotlivá zařízení nastavoval přímo v ESPHome.

Nový způsob pomocí ESPHome Proxy integrace bluetooth zařízení velmi zjednodušuje a možná trochu více nyní komplikuje jaké zařízení nakonec zvolit – zda WiFi, Zigbee a nebo nově i bluetooth.

Zejména u senzorů můžou být rozdíly a porovnání výhod/nevýhod mezi Zigbee a Bluetooth velmi těsné a rozhodování složitější. Výhodou bluetooth by měla být obvykle delší výdrž a zpravidla nižší cena. Nevýhodou pak nutnost šířit signál Bluetooth po domě pokud nechceme pokrýt pouze jednu místnost.

HA BluetoothProxy discovery

Související články

Komentáře