community italiana di domotica personale
 
Realizzare un BRIDGE/Gateway Bluetooth↔︎Wi-Fi autonomo (con NodeMCU ESP32 ed ESPHome)

Realizzare un BRIDGE/Gateway Bluetooth↔︎Wi-Fi autonomo (con NodeMCU ESP32 ed ESPHome)

SCOPI DEL PROGETTO:
  • Dotarsi di uno o più BRIDGE/Gateway Bluetooth↔︎Wi-Fi autonomi, ovvero collocabili liberamente nel proprio ambiente domestico perché slegati da qualsiasi computer di controllo, atti ad ampliare (a livello logico) la portata radio Bluetooth dei propri componenti domotici basati su questo standard
  • Livello di difficoltà: medio/basso
  • Costo: basso
CONCETTI AFFRONTATI:
  • Configurazione e installazione firmware
COMPONENTI SOFTWARE UTILIZZATE:
  • Firmware “ESPHome” (versione minima 0.17.0)
COMPONENTI FISICI UTILIZZATI:
GUIDA maggiormente DEDICATA A utenti:
Tutti gli ambienti
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 1.4

Abstract

Uno degli handicap storici legati allo standard Bluetooth – anche nelle versioni più recenti, come il BLE 5.0 – è certamente la portata radio piuttosto limitata, specie in presenza di ostacoli. Componenti legati a questo standard, magari tecnicamente integrabili al proprio HUB personale (come per esempio il sensore per piante oppure il vaso Xiaomi, quello LCD di temperatura (anche il quadrato), la bilancia impedenzometrica Xiaomi eccetera), risultano alla fine difficilmente utilizzabili proprio perché non a portata radio del computer che ospita, appunto, il proprio HUB.

Bluetooth BLE - LogoQuesto progetto propone una soluzione estremamente economica e, al contempo, estremamente funzionale per risolvere il problema: la creazione di uno o più BRIDGE/Gateway Bluetooth↔︎Wi-Fi autonomi che, posizionati nelle relative vicinanze dei componenti Bluetooth, consenta(no) di veicolarne di fatto le comunicazioni da e per tali dispositivi attraverso la rete Wi-Fi. Questo consente delle integrazioni molto robuste, in quanto la rete Wi-Fi/LAN sulla quale sia il BRIDGE/Gateway sia l’HUB sono attestati è certamente un veicolo più veloce e affidabile (oltre a offrire una portata infinitamente più ampia del Bluetooth).

Allo scopo utilizzeremo:

  • lato hardware, un NodeMCU in versione ESP32 (quindi dotato sia di antenna Bluetooth che Wi-Fi);
  • lato software, il firmware ESPHome opportunamente configurato in modo da fungere, appunto, da BRIDGE.

Il progetto consentirà, al termine della configurazione, di integrare il BRIDGE/Gateway (e quindi i dispositivi Bluetooth associati) a qualsiasi HUB personale che sappia interfacciarsi alle API di ESPHome (per esempio Home Assistant tramite l’integrazione ufficiale). In alternativa (non approfondita ma tecnicamente possibile e accennata nel presente progetto) è possibile anche utilizzare, quale standard d’integrazione, MQTT.

N.b. Com’è intuibile, tale BRIDGE/Gateway così realizzato non sarà valido per integrare qualsiasi componente Bluetooth ma, come vedremo, solo quelli inclusi nella compatibilità del firmware ESPHome. In realtà, data la presenza della piattaforma ESPHome “BLE Client Sensor” (che funge da “jolly”), conoscendo le coordinate del servizio Bluetooth esposte da componente da integrare è comunque possibile avere ampio margine di manovra anche con componenti non formalmente supportati da ESPHome.

N.b. Ogni BRIDGE/Gateway così realizzarto può supportare diversi componenti Bluetooth contemporaneamente (purché ovviamente “a tiro” di ricezione radio).

Si parte

Assunti

Si assume, per la realizzazione del presente progetto, di possedere un NodeMCU basato su ESP32 (si consiglia di valutare anche questo modello, particolarmente prestante dal punto di visto ricezione Bluetooth) e di avere a disposizione la suite di tool relativa al firmware ESPHome (installata in una delle modalità previste).

NodeMCU ESP32
un NodeMCU ESP32.

Si assume inoltre di avere a disposizione un cavo USB/Micro-USB per collegare il NodeMCU da riprogrammare al computer ospitante i tool ESPHome (a meno che il NodeMCU non ospiti già ESPHome a bordo – in tal caso non serve, in quanto la riprogrammazione avverrà in modalità OTA, via Wi-Fi).

Componenti compatibili

Come accennato nell’Abstract, non tutti i componenti sulla faccia della terra sono/saranno compatibili col BRIDGE proposto in questo progetto.  Quelli compatibili sono infatti quelli inclusi nell’elenco dei componenti supportati dal firmware ESPHome (come, per esempio, molti degli Xiaomi). Ovviamente l’elenco (in continua espansione) riporta anche dispositivi non-Bluetooth, quindi è necessaria una ricerca puntuale per individuare i propri eventualmente compatibili.

Appurata la presenza in compatibilità di uno o più componenti, è tempo di identificarne l’indirizzo fisico, informazione necessaria alla configurazione che proporremo più avanti.

N.b. Come detto anche nell’abstract, data la presenza della piattaforma ESPHome “BLE Sensor” (che funge da “jolly”) e conoscendo le coordinate del servizio Bluetooth esposte da componente da integrare è comunque possibile avere ampio margine di manovra anche con componenti non formalmente supportati da ESPHome. Quindi, in assenza del proprio componente nella lista di quelli compatibili, non è detto che non si riesca ad integrare comunque.
Vetrina - Offerte del giorno

Indirizzo(i) Bluetooth

Ogni dispositivo Bluetooth presenta un proprio indirizzo fisico, o MAC Address, necessario alla configurazione del firmware ESPHome che utilizzeremo per questo progetto. Solitamente un MAC appare, per esempio, come segue:

84:AB:33:AA:F1:4C

e varia, come detto, da esemplare a esemplare.

Per ognuno dei dispositivi Bluetooth compatibili con ESPHome da configurare sul BRIDGE/Gateway è necessario ottenere tale indirizzo; per farlo ci sono varie strategie:

  • leggerlo sul dispositivo stesso (a volte viene riportato su targhette o simili);
  • leggerlo presso l’app di gestione propria (es. Xiaomi Mi Home);
  • utilizzare uno scanner software, come per esempio spiegato in questa guida valevole per Raspberry Pi o, più genericamente, per sistemi Linux;
  • utilizzare app specifiche, per esempio:
  • installare temporaneamente il componente BLE Scanner di ESPHome sul NodeMCU ESP32 (che utilizzeremo poi come BRIDGE/Gateway finale) per ottenere l’informazione dai log.

ESPHome

ESPHome - Logo v2ESPHome è un firmware “modulare” che consente, appunto, di installare sui dispositivi target (in questo caso un NodeMCU) le componenti utili agli scopi prefissi “assemblate” in un unico compilato.

N.b. Se non si conosce questo firmware è necessario dare una veloce lettura alla scheda ad esso dedicata; diversamente non si comprenderanno gli aspetti che verranno spiegati in seguito e, fatalmente, si fallirà.

Nel caso di questo specifico progetto il componente utile allo scopo è ESP32 Bluetooth Low Energy Tracker Hub, il quale consente, tramite dispositivi ESP32, di tracciare per l’appunto componenti Bluetooth (ed esporli, tramite API, alla rete Wi-Fi).

Per attivarlo, è semplicemente necessario aggiungere, nella configurazione YAML di ESPHome (la “ricetta” del nostro firmware):

esp32_ble_tracker:

La presenza di questa voce aggiunge, in compilazione del firmware, tale componente, attivando le funzioni di cui sopra. Sempre che, ovviamente, si stia utilizzando una versione di ESPHome uguale o superiore alla 0.17.0.

N.b. In caso il BRIDGE/Gateway che andremo a realizzare non venga utilizzato con un HUB per domotica in grado utilizzare le API di interfacciamento ESPHome (come per esempio Home Assistant – vedi guida), è possibile attivare, nella configurazione ESPHome, la piattaforma MQTT (non approfondita nel presente progetto) in alternativa alla piattaforma API.
CONFIGURAZIONE SPECIFICA

Ora, ovviamente, è necessario indicare al firmware ESPHome una parte di configurazione specifica al/ai device Bluetooth da integrare. La configurazione ovviamente varia da componente a componente.

Ipotizziamo per esempio di voler gestire tramite il BRIDGE/Gateway che stiamo costruendo il sensore domotico per piante Xiaomi Mi Flora Smart. La configurazione è la seguente:

sensor:
  - platform: xiaomi_hhccjcy01
    mac_address: XX:XX:XX:XX:XX:XX
    temperature:
      name: "Xiaomi MiFlora Temperatura"
    moisture:
      name: "Xiaomi MiFlora Umidità del terreno"
    illuminance:
      name: "Xiaomi MiFlora Illuminazione"
    conductivity:
      name: "Xiaomi MiFlora Conduttività terriccio"
    battery_level:
      name: "Xiaomi MiFlora Batteria"

Questa porzione di codice YAML, in aggiunta alla “ricetta” ESPHome che stiamo preparano, farà sì che il BRIDGE “giri” le chiamate da e per il sensore (il mac_address ovviamente va personalizzato sulla base delle indagini precedenti) sulle proprie API, fornendo nello specifico una serie di sensori.


Ipotizziamo invece di voler aggiungere in configurazione un sensore LCD Xiaomi:

sensor:
  - platform: xiaomi_lywsdcgq
    mac_address: XX:XX:XX:XX:XX:XX
    temperature:
      name: "Xiaomi Mijia Temperatura"
    humidity:
      name: "Xiaomi Mijia Umidità"
    battery_level:
      name: "Xiaomi Mijia Batteria"

Ipotizziamo di voler aggiungere in configurazione una bilancia Xiaomi Body Composition Scale 2:

sensor:
  - platform: xiaomi_miscale2
    mac_address: XX:XX:XX:XX:XX:XX
    weight:
      name: "Xiaomi Mi Scale Peso"
    impedance:
      name: "Xiaomi Mi Scale Impedenza"

Ipotizziamo altresì di voler aggiungere in configurazione un vaso intelligente Xiaomi:

sensor:
  - platform: xiaomi_hhccpot002
    mac_address: XX:XX:XX:XX:XX:XX
    moisture:
      name: "HHCCPOT002 Umidità"
    conductivity:
      name: "HHCCPOT002 Conduttività terriccio"

oppure un orologio LCD Xiaomi LYWSD02MMC:

sensor:
  - platform: xiaomi_lywsd02mmc
    mac_address: XX:XX:XX:XX:XX:XX
    bindkey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    temperature:
      name: "LYWSD02MMC Temperature"
    humidity:
      name: "LYWSD02MMC Humidity"
    battery_level:
      name: "LYWSD02MMC Battery Level"

e così via.

COMPONENTI NON FORMALMENTE SUPPORTATI

Come spiegato prima, in assenza di compatibilità non bisogna demordere. La piattaforma ESPHome “BLE Sensor” (in accoppiata alla piattaformav “ESP32 BLE Client“) consente di modellare un generico sensore a partire dalle coordinate del servizio Bluetooth esposte da componente da integrare.

Per esempio:

ble_client:
  - mac_address: XX:XX:XX:XX:XX:XX
    id: itag_black

sensor:
  - platform: ble_client
    ble_client_id: itag_black
    name: "Batteria iTag"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'

in questo caso si definisce una connessione tramite “ESP32 BLE Client” (la prima parte di configurazione YAML) la quale poi viene agganciata al sensore “BLE Sensor” (la seconda parte), nella quale viene definita la configurazione dettagliata del componente da integrare, in questo caso un iTag.

Ovviamente queste caratteristiche tecniche (service_uuid, characteristic_uuid, eventualmente anche descriptor_uuid) vanno ricercare o sulla rete, o tramite tool che interroghino il componente al fine di scoprire questi dettagli fondamentali per la configurazione.

Esempio di configurazione completa

Una volta completata la propria “ricetta” ESPHome, apparirà all’incirca così:

esphome:
  name: esp32blt2wifi
  platform: ESP32
  board: nodemcu-32s

wifi:
  ssid: "PROPRIA-Wi-Fi"
  password: "PASSWORD-Wi-Fi"

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

captive_portal:

# Enable logging
logger:

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

ota:
  password: "PASSWORD_UPDATE_OTA"

esp32_ble_tracker:

sensor:
  - platform: xiaomi_lywsdcgq
    mac_address: XX:XX:XX:XX:XX:XX
    temperature:
      name: "Xiaomi Mijia Temperatura"
    humidity:
      name: "Xiaomi Mijia Umidità"
    battery_level:
      name: "Xiaomi Mijia Batteria"

Ovviamente si tratta solo di un esempio. Le configurazione proprie cambieranno molto da caso a caso.

N.b. A prescindere, su qualsiasi configurazione ESPHome consigliamo sempre di includere alcuni componenti secondo noi sempre utili, come quelli illustrati su questa scheda.

Installazione

A questo punto si è pronti per la compilazione e la successiva installazione sul NodeMCU.
Le tecniche per farlo sono le più disparate – tutto dipende ovviamente da dove si ha installato e in che modalità la suite ESPHome. 

CON NODEMCU VERGINE

Se il NodeMCU è vergine, l’unica possibilità di installare il compilato ESPHome è utilizzando cavo USB/Micro-USB a collegare il computer che monta ESPHome e NodeMCU. Collegare i due tramite il cavo e poi premere sul tasto BOOT/FLASH: questo imposterà il NodeMCU in modalità di riprogrammazione. 

A questo punto eseguire la compilazione del firmware seguendo una delle guide dedicate al tema in base alla propria modalità d’uso di ESPHome e alla propria installazione.

CON NODEMCU GIÀ DOTATO DI ESPHOME

In caso NodeMCU sia già dotato di firmware ESPHome, la quale precedente compilazione prevedesse il codice:

ota:
  password: "PASSWORD_UPDATE_OTA"

e  avesse lo stesso “name“, allora non sarà necessario il cavo, ma basterà avviare la compilazione del firmware provvedendo all’accensione del NodeMCU il quale, entrando nella stessa rete LAN (tramite Wi-Fi) del computer sul quale viene eseguito ESPHome, verrà aggiornato.

Uso

A questo punto basterà riavviare NodeMUC e provvedere all’integrazione delle sue funzionalità di BRIDGE/Gateway sul proprio HUB personale. In caso di utilizzi Home Assistant, la guida è questa:

Integrare componenti ESPHome a Home Assistant (via API)

Un esempio?
Xiaomi Mi Flora Smart integrato su Home Assistant via ESPHome:

Home Assistant - Xiaomi Mi Flora Smart via ESPHome

Diversamente, qualora si sia scelto di utilizzare la piattaforma MQTT, è necessario far riferimento alla propria configurazione e cablare, specificamente, tale configurazione in quella MQTT del proprio client HUB.


Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.