Come sapere, i dispositivi quali SONOFF, SHELLY, NODEMCU ed altri, hanno il grande vantaggio di essere flashati per l’installazione di firmware alternativi, più ricchi di funzioni e più customizzabili. Il più famoso tra tutti è sicuramente TASMOTA.
Ma oggi andremo a vedere un nuovo metodo per personalizzare i nostri dispositivi basati su ESP32 / ESP8266: si tratta della creazione di firmware su misura scritti in formato yaml, il formato pienamente supportato da Home Assistant. Questo nuovo metodo si chiama ESPHome.
ESPHome ha la possibilità di creare appunto firmware personalizzati, più leggeri e con funzioni già inglobate nel firmware stesso senza la necessità di scomodare HUB esterni quali Home Assistant per l’esecuzione di automazioni.
Facciamo un esempio pratico con un SONOFF 4CH. Vogliamo che all’accensione del canale 1, parta un conto alla rovescia di 10 secondi dopo i quali il canale 1 si spegne da solo e si accende in automatico il canale 2.
Bene per effettuare questa semplice automazione è necessario scrivere del codice in Home Assistant, quindi affidare il tutto ad un HUB esterno.
Grazie invece a ESPHome questa automazione è possibile scriverla direttamente nel firmware!
INSTALLAZIONE DELL’ADDON ESPHOME
Per installare il nuovo add-on su HASS.IO, andiamo nel menu Supervisor -> Add-on Store e aggiungiamo la nuova repository:
https://github.com/esphome/hassio
Successivamente cerchiamo il risultato ESPHOME e clicchiamoci sopra:
Quindi clicchiamo su INSTALL.
Successivamente apriamo il tab Configuration e modifichiamo in:
{ "ssl": true, "certfile": "fullchain.pem", "keyfile": "privkey.pem" }
Nel caso non utilizziamo certificati SSL (ad esempio non abbiamo duckdns per accedere da remoto), impostiamo “ssl”: false
Ora torniamo nella tab Info e selezioniamo Show in sidebar ed infine Start.
Ora clicchiamo OPEN IN WEB UI
Si aprirà il wizard per la creazione di un nuovo progetto:
Clicchiamo sul +
Dare quindi un nome a piacere al vostro progetto utilizzando solamente i caratteri 0-9 a-z e _Selezionare il tipo di dispositivo che state andando a flashare. Nel nostro esempio utilizzeremo Generic ESP8266 per flashare un sonoff 4CH PROInserire i dati del vostro Wifi:Una volta terminato il wizard vi troverete una schermata simile a questa:In alto a destra è presente un menu a tendina per scegliere il metodo di flash da utilizzare:
- OTA
- FT232R (se avete collegato un adattatore seriale per il flash)
Al centro sono presenti le informazioni del vostro progetto, in particolare:
- sonoff: è il nome dato al nostro progetto di esempio
- Status: indica lo stato del dispositivo post-flash: verde online, rosso offline
- UPLOAD: invia il file compilato al dispositivo in base al metodo scelto
- EDIT: permette di modificare il codice del firmware
- VALIDATE: permette di compilare il codice e verificare la presenza di errori
- CLEAN MQTT: elimina tutte le entità trovate in modalità discovery
- CLEAN BUILD: elimina tutte le compilazioni precedenti
- COMPILE: compila e crea il firmware in formato .bin pronto per essere caricato sul dispotivo
- DELETE: elimina il progetto
In questa guida andremo a caricare il firmware dedicato ad un SONOFF 4CH PRO. Per fare ciò clicchiamo quindi su EDIT e incolliamo questo codice, andando ovviamente a variare i campi:
- <NAME_OF_NODE> con il nome del vostro progetto
- <YOUR_SSID> con il nome della vostra rete wifi
- <YOUR_PASSWORD> con la password della vostra rete wifi
esphome: name: <NAME_OF_NODE> platform: ESP8266 board: esp01_1m wifi: ssid: <YOUR_SSID> password: <YOUR_PASSWORD> api: logger: ota: binary_sensor: - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True name: "Sonoff 4CH Button 1" - platform: gpio pin: number: GPIO9 mode: INPUT_PULLUP inverted: True name: "Sonoff 4CH Button 2" - platform: gpio pin: number: GPIO10 mode: INPUT_PULLUP inverted: True name: "Sonoff 4CH Button 3" - platform: gpio pin: number: GPIO14 mode: INPUT_PULLUP inverted: True name: "Sonoff 4CH Button 4" - platform: status name: "Sonoff 4CH Status" switch: - platform: gpio name: "Sonoff 4CH Relay 1" pin: GPIO12 - platform: gpio name: "Sonoff 4CH Relay 2" pin: GPIO5 - platform: gpio name: "Sonoff 4CH Relay 3" pin: GPIO4 - platform: gpio name: "Sonoff 4CH Relay 4" pin: GPIO15 output: # Register the blue LED as a dimmable output .... - platform: esp8266_pwm id: blue_led pin: GPIO13 inverted: True light: # ... and then make a light out of it. - platform: monochromatic name: "Sonoff 4CH Blue LED" output: blue_led
Il sonoff, con la configurazione sopra, colloquierà come Home Assistant attraverso le API rese disponibili con il comando:
api:
Nel caso vogliate integrare anche MQTT, aggiungere da qualche parte nel codice anche questo blocco:
mqtt: broker: 192.168.1.1 username: mqtt_user password: mqtt_password
Assicurandovi di andare a cambiare le 3 opzioni (broker, username, password) in base a quelle in nostro possesso.
Nota bene: nel caso vogliate usare solo MQTT e non volete l’integrazione nativa con Home Assistant, dovete togliere il blocco:
api:
altrimenti il device, non trovando client connessi tramite API, si riavvierà ogni 5 minuti.
Nota: per tutte le altre opzioni avanzate del campo wifi, potete visualizzare la documentazione ufficiale qui.
Clicchiamo ora VALIDATE. Se tutto è ok senza errori ora potete compilare il progetto con COMPILE e attendere la generazione del file .bin da scaricare sul vostro PC utilizzando il tasto DOWNLOAD BINARY che apparirà al termine della compilazione.
Ora siamo pronti per caricare il firmware appena creato direttamente sul nostro dispositivo SONOFF 4CH PRO.
Per fare ciò esistono diverse strade:
- flash tramite adattatore seriale FTDI: soluzione valida sempre, e obbligatoria se si tratta di un device con ancora il firmware originale
- flash tramite OTA: possibile solo se è già presente un firmware ESPHome sul dispositivo
- flash tramite upload del file .bin, possibile se sul device è presente un firmware che ne permette l’aggiornamento firmware tramite upload file, come Tasmota.
In questa guida faremo l’esempio di flash su firmware originale, quindi utilizzeremo un adattatore FTDI come questo:
Riporto di seguito la procedura per i collegamenti da effettuare, presi da qui.
PREPARAZIONE HARDWARE
Apriamo il nostro Sonoff, ovviamente accertandoci che NON sia collegato alla corrente.
Dobbiamo realizzare queste modifiche per attivare la modalità flash del Sonoff:
- Colleghiamo e saldiamo un connettore a pettine da 5 pin nel punto (1) della foto.
- Colleghiamo e saldiamo un connettore a pettine da 1 pin nel punto (3) della foto, nel terzo buco denominato GND
- Colleghiamo un cavetto che parte dal punto (3) attaccandolo al pin appena saldato e saldiamo l’altra estremità alla piccola piazzola del punto (2) in foto (GPIO0). Non preoccupatevi se non è troppo salda perchè tanto alla fine del flash dovrà essere dissaldato. (oppure potete mantenerla saldata per future manutenzioni, ma dovrà essere interrotto il ponte 2–3 durante l’utilizzo del Sonoff)
Ora settiamo il nostro Adattatore seriale in modalità 3.3V con l’apposito switch. Non dimenticate questo passaggio altrimenti mandate in fumo letteralmente tutto!
Eseguite il seguente step SENZA collegare il SONOFF a NESSUNA FONTE DI ALIMENTAZIONE!
Applichiamo i seguenti collegamenti tra adattatore FTDI e Sonoff come da foto:
FTDI SONOFF
VCC –> 3,3V
TX –> RX
RX –> TX
GND –> GND
A questo punto utilizziamo un cavo microUSB e colleghiamo l’adattatore FTDI al PC.
Collegato il tutto, non succederà nulla, nessun led da parte del sonoff… questo è sinonimo che abbiamo fatto correttamente.
FLASH DEL FIRMWARE TRAMITE ESPHOME FLASHER
Scarichiamo il software per il flash da qui, disponibile sia per Windows che per Mac.
Apriamo il software e semplicemente andiamo a compilare i campi:
- Serial port: selezionamo la porta dove è collegato l’adattatore FTDI
- Firmware: selezioniamo il file .bin creato
Clicchiamo quindi Flash ESP e attendiamo la file del flash.
Una volta terminato il flash scolleghiamo e ricolleghiamo l’adattatore FTDI al PC per riavviare il SONOFF.
Se tutto è andato ok, vedremo ora in ESPHome lo status del nostro progetto con il pallino verde che sta a indicare che il dispositivo è online. (se abbiamo scelto di mantenere l’integrazione tramite il blocco di codice api: )
INTEGRAZIONE CON HOME ASSISTANT
Ora che il dispositivo è online, andiamo ad integrare al nostro Home Assistant andando nel menu Impostazioni -> Configurazioni
Clicchiamo sul + in basso e destra e cerchiamo esphome:
Si aprirà una finestra dove dovremo compilare l’host con l’indirizzo IP del device nel caso gli abbiamo associato un IP fisso, altrimenti si può optare per inserire il nome assegnato in precedenza al progetto, seguito da .local
Ora il sonoff è integrato ad Home Assistant e le entità saranno esposte nel menu di ESPHome.
AGGIORNAMENTO TRAMITE OTA
Ora che abbiamo flashato correttamente il firmware, per le future eventuali modifiche non sarà più necessario usare l’adattatore FTDI per effettuare il flash, ma potremo effettuare l’upload del nuovo firmware (dopo averlo modificato, verificato e ricompilato) tramite OTA. Per fare ciò basta selezionare il metodo in alto a destra in OTA:
E cliccare semplicemente UPLOAD.
SALVIAMO LE NOSTRE PASSWORD IN SECRETS.YAML
Come per Home Assistant, anche ESPHome prevede l’uso del file secrets.yaml per lo storage delle password.
Per utilizzare tale metodo, selezionare Secrets Editor dal menu in alto a destra.
Nota bene, questo file non è lo stesso di Home Assistant. Il file secrets.yaml riferito a ESPHome verrà creato in automatico nella cartella di ESPHome stessa.
Una volta aperto il file è possibile inserire le nostre password del wifi (ed eventualmente del broker MQTT se lo avete abilitato). Esempio:
Wifi_SSID: "la_mia_rete_wifi" Wifi_password: "pippo"
Dopo aver salvato la modifica, nel nostro progetto possiamo quindi modificare il campo wifi così:
wifi: ssid: !secret Wifi_SSID password: !secret Wifi_password
Se siete curiosi di sapere quali dispositivi potete flashare con ESPHome, vi invito a visitare il sito ufficiale del progetto, qui.