L’ideatore del progetto Home Assistant, Paulus Schoutsen, ha da sempre portato avanti l’idea di una smart home che deve essere aperta e interoperabile. In altre parole, le aziende che immettono sul mercato prodotti smart non devono creare ecosistemi chiusi ma è opportuno che forniscano agli utenti finali “le chiavi” per far dialogare i vari dispositivi, e per gestirli in maniera centralizzata (anche senza appoggiarsi a una piattaforma cloud). Lo abbiamo visto nell’articolo sulla smart home offline per svincolarsi dalle piattaforme dei singoli produttori e avere la possibilità di interagire con i dispositivi per la casa intelligente anche in assenza della connessione Internet.
ESPHome è un sistema che porta all’estremo il concetto e che consente di gestire il funzionamento di un’ampia schiera di microcontrollori attraverso file di configurazione semplici ma potenti. I dispositivi gestiti con ESPHome diventano amministrabili a distanza, tramite sistemi di automazione domestica come Home Assistant (ma anche OpenHAB e ioBroker).
Tra l’altro, Schoutsen ha fortemente voluto la costituzione di Open Home Foundation, una realtà indipendente che sottrae Home Assistant e tanti altri progetti da qualunque interesse economico e dall’acquisizione da parte di soggetti terzi. Tra i progetti che la fondazione ha posto sotto la sua protezione c’è anche ESPHome.
Le principali caratteristiche di ESPHome
ESPHome è un framework open source nato per semplificare il controllo di microcontroller come ESP32 e ESP8266, utilizzando file di configurazione YAML. Questi file di configurazione consentono agli utenti di definire il comportamento del microcontrollore e di integrarlo facilmente nei sistemi di automazione domestica, come Home Assistant.
Il sistema supporta una vasta gamma di microcontrollori, tra cui ESP32, ESP8266, RP2040, BK72xx e RTL87xx, che diventano facilmente gestibili in modalità remota.
Attraverso il framework è possibile utilizzare, ad esempio, PSRAM e Deep Sleep che permettono a loro volta di interagire direttamente con il processore o i processori montati sul microcontroller. PSRAM è una memoria “pseudo” statica che conserva i dati anche quando l’alimentazione viene interrotta; il Deep Sleep è una modalità di risparmio energetico disponibile sui microcontrollori ESP32 e ESP8266. Quando il microcontroller entra in Deep Sleep, la maggior parte dei componenti del dispositivo si spegne per ridurre il consumo di energia al minimo. Tuttavia, è possibile configurare il microcontrollore per svegliarsi da questa modalità in risposta a determinati eventi, come un impulso su un pin GPIO o la scadenza di un timer.
Con ESPHome, si possono avviare comunicazioni via Ethernet e WiFi, sfruttare protocolli come MQTT, HTTP e WireGuard, inviare e ricevere informazioni tramite Bluetooth e Bluetooth Low Energy (BLE), gestire interfacce come I²C, SPI e UART per la connettività con dispositivi esterni.
Il supporto di ESPHome abbraccia inoltre una vasta gamma di sensori per monitorare ambienti come temperatura, umidità, e qualità dell’aria. Il progetto è inoltre compatibile con interruttori, relè e pulsanti, offre supporto per luci a LED, luci RGB e luci monocolore, oltre a diverse altre possibilità addizionali.
Come usare ESPHome
Come accennato in precedenza, ESPHome nasce già con la possibilità di attivare facilmente l’integrazione dei dispositivi in Home Assistant, per il controllo e il monitoraggio centralizzato.
È inoltre prevista la possibilità di ricorrere a un’interfaccia da riga di comando per la configurazione e la gestione; si può inoltre inizialmente avvalersi di un ampio ventaglio di progetti preconfigurati, citati nella documentazione di ESPHome, che aiutano ad apprezzare le sue potenzialità.
Il principale vantaggio di ESPHome è la sua duttilità: si possono programmare i dispositivi IoT con un linguaggio di alto livello, senza dover scrivere codice nativo. Funziona in due fasi principali: la compilazione e l’upload del firmware.
Durante la compilazione, ESPHome converte la configurazione in codice nativo per ESP8266, ESP32 o altri microcontroller. Questo processo prevede l’ottimizzazione del codice, la generazione di un firmware personalizzato e la creazione di file di configurazione per lo specifico dispositivo. Una volta compilato il firmware, è possibile caricarlo sul microcontrollore collegando il dispositivo tramite cavo USB oppure, se fosse già connesso a una rete WiFi, distribuire il firmware tramite aggiornamento OTA (Over-the-Air).
L’installazione di ESPHome
Per iniziare a utilizzare ESPHome, è necessario installare in locale il software di compilazione e upload del firmware. Il requisito essenziale consiste nell’installazione del linguaggio Python, su Windows, Linux o macOS. La procedura da seguire è riassunta in queste pagine (fare riferimento ai link nella colonna di sinistra, a seconda della piattaforma in uso).
Su tutti i sistemi operativi, come ultimo passaggio, per installare ESPHome è sufficiente digitare quanto segue:
pip3 install esphome
ESPHome fornisce aggiornamenti automatici: significa che non è necessario preoccuparsi di aggiornare manualmente il firmware. Il processo di manutenzione e aggiornamento dei dispositivi molto più semplice e conveniente, soprattutto per quelli installati in posizioni difficilmente accessibili.
Come configurare ESPHome
Per configurare ESPHome, è necessario creare un file di configurazione YAML. Si tratta di un elemento che descrive il dispositivo, i sensori, gli attuatori e le regole di automazione.
Proponiamo di seguito l’esempio di un configurazione per un sensore di temperatura e umidità:
esphome:
name: my_sensor
platform: ESP8266
board: nodemcuwifi:
ssid: “MyNetwork”
password: “MyPassword”# Sensore di temperatura e umidità DHT22
sensor:
– platform: dht
pin: D4
temperature:
name: “Temperatura”
humidity:
name: “Umidità”# Output per il LED integrato
output:
– platform: led
pin: 5
name: “LED”# Regola per accendere il LED quando la temperatura supera i 25°C
automation:
– id: “temperature_alert”
alias: “Allarme temperatura”
trigger:
platform: numeric_state
entity_id: sensor.temperature
above: 25
action:
service: output.turn_on
entity_id: output.led
Qualche commento sul contenuto del file YAML di esempio
Il file esemplificativo che abbiamo pubblicato al paragrafo precedente, specifica l’utilizzo di un microcontrollore ESP8266. La sezione esphome
definisce le impostazioni globali per il progetto ESPHome. Sono evidenti il nome del dispositivo, il riferimento alla piattaforma hardware (ESP8266) e il modello specifico della scheda (nodemcu
).
All’interno di wifi
si indicano le impostazioni per la connessione WiFi del dispositivo mentre sensor
configura i sensori del dispositivo:
- platform: dht
: Si utilizza un sensore DHT22 per misurare temperatura e umidità.pin
: Il pin del microcontrollore a cui è collegato il sensore.temperature
: Configurazione del sensore di temperatura.name
: Il nome assegnato al sensore di temperatura.humidity
: Configurazione del sensore di umidità.name
: Il nome assegnato al sensore di umidità.
La sezione output
è utilizzata per definire l’output. In questo caso, come evidente dal riferimento - platform: led
, si utilizza una luce LED. Anche qui si assegna un nome al LED e si specifica il pin del microcontrollore a cui è collegato.
Agendo su automation
, si possono esplicitare le cosiddette automazioni, ovvero le azioni che il dispositivo deve eseguire in risposta a determinati eventi:
- id: "temperature_alert"
: Identificativo univoco per l’automazione.alias
Un nome “umanamente” leggibile per l’automazione in questione.trigger
: Il trigger che attiva l’automazione.platform: numeric_state
: L’automazione è attivata quando lo stato numerico specificato cambia.entity_id: sensor.temperature
: Il sensore di temperatura è l’entità che viene monitorata per il cambiamento di stato.above: 25
: L’automazione è attivata quando la temperatura supera, in questo caso, i 25°C.action
: Le azioni da eseguire quando l’automazione è attivata.service: output.turn_on
: ESPHome dispone richiama il servizio che attiva lo specifico output.entity_id: output.led
: L’output specifico da attivare è, in questo caso, il LED.
Alcuni esempi di utilizzo di ESPHome
I possibili campi applicativi di ESPHome sono praticamente sconfinati. Le applicazioni classiche comprendono i sistemi di illuminazione, sicurezza, climatizzazione e irrigazione ma, ovviamente, gli scenari esplorabili sono di fatto infiniti.
Adottando ESPHome e servendosi di appositi microcontroller, si possono gestire luci in base alla presenza, al movimento o alla luminosità; monitorare l’apertura e la chiusura di porte e finestre, ricevendo notifiche in caso di intrusione; controllare il riscaldamento e il raffreddamento in base alla temperatura e all’umidità degli ambienti; intervenire sull’irrigazione in base alle condizioni meteorologiche e all’umidità del suolo.
La semplicità ma, allo stesso tempo, la potenza di ESPHome con il supporto diretto per molteplici piattaforme, consentono di interfacciarsi con una moltitudine di dispositivi IoT con un linguaggio di alto livello. La scelta ideale per chiunque voglia creare progetti personalizzati di domotica e automazione.
Integrazione con Tasmota
Una caratteristica interessante di ESPHome è la sua capacità di integrare dispositivi già dotati del firmware Tasmota, un’altra popolare piattaforma per i dispositivi IoT basati su ESP8266/ESP32.
Invece di collegare fisicamente il dispositivo al computer per riprogrammarlo, è possibile semplicemente compilare il firmware ESPHome, scaricare il file precompilato e aggiornare il firmware del device direttamente tramite l’interfaccia Web di Tasmota. Un approccio che semplifica notevolmente il processo di migrazione tra le due piattaforme.
Integrazione con Home Assistant Supervisor
Per gli utenti di Home Assistant che utilizzano l’ambiente Home Assistant OS o Home Assistant Supervised, ESPHome offre un pratico add-on che permette di gestire l’intero processo di configurazione, compilazione e installazione del firmware direttamente dall’interfaccia Web.
Con l’add-on di ESPHome, gli utenti possono configurare i propri dispositivi IoT personalizzati direttamente dall’interfaccia Web di Home Assistant, senza la necessità di utilizzare strumenti esterni o complesso codice di programmazione.
Una volta configurato il dispositivo, è possibile compilare il firmware direttamente dall’interfaccia di Home Assistant, semplificando il processo e riducendo la necessità di passaggi aggiuntivi.