ESPHome

HassioHelp

ESPHome

Aggiornamento 28.09.2019

Per coloro, che non hanno conoscenze specifiche di una programmazione di linguaggio più o meno complesso ma conoscono la programmazione in Yaml, pienamente utilizzata dal nostro assistente domestico, Home Assistant mette a disposizione un interessante add-on capace con una semplice programmazione di creare il nostro firmware personalizzato per i dispositivi ESP8266 e ESP32, come ad esempio Sonoff, Wemos, Nodemcu ma anche ESP-32 Cam e molti alti. Ovviamente questi firmware prevedono la possibilità di connettere ai nostri dispositivi una quantità enorme di sensori ed accessori. 

Questa guida avrà lo scopo di introdurvi nel mondo di ESPHome con alcuni esempi pratici, ma per la spiegazione e approfondimenti dei comandi vi rimando sempre alla guida ufficiale presente all’indirizzo:  https://esphome.io/index.html

 

Installazione Add-on ESPHome

Da Home Assistant andiamo sul menù hass.io, add-on store ed inseriamo su un nuova repositories questo link: https://github.com/esphome/hassio

Clicchiamoci sopra per aprire il nuovo add-on ed installiamolo

esphome 03

La configurazione dell’addon necessita solamente di una semplice personalizzazione se siete in possesso di certificato SSL impostatelo su true se no lasciatelo su false.

{
"ssl": true,
"certfile": "fullchain.pem",
"keyfile": "privkey.pem",
"port": 6052
}

Ora siete pronti per avviare l’add-on premendo start e al termine premete su open web ui. Nel caso vogliate aggiungere l’icona di ESPHome sul i-pannel abilitate lo switch di Show in sidebar e dopo il primo riavvio vi comparirà il collegamento diretto all’applicazione.

Primo avvio

Vi verranno richieste le credenziali inserite le stesse che utilizzate per accedere ad Home Assistant, poi sarete pronti per creare il vostro primo firmware: premete su +

Interfaccia: primo progetto

Da qui possiamo creare i nostri firmware, vediamo ora come realizzarne uno per gestire i Sonoff Basic, andremo così a sostituire Tasmota con ESPHome.

Diamo il nome al nostro preogetto fate attenzione che non sono ammessi spazi, maiuscole e caratteri speciali aldifuori di _

Selezioniamo Generic EPS8266 che è il cip del Sonoff.

Immettete il nome SSID della vostra rete Wi-Fi e la password. In aggiunta è possibile inserire una password per gli aggiornamenti OTA in questo modo eviterete che il vicino vi modifichi a vostra insaputa i firmware dei vostri dispositivi ESPHome  🙂
Potete ora premere CONTINUE e subito doto SUBMIT.

In alto a destra vi comparirà un menù a tendina dove potrete scegliere la modalità di flash preferita, per la prima volta non sarà possibile via OTA per le successive si. 

Vi comparirà inoltre il progetto appena creato. 
Da questo menù sono presenti delle informazioni e delle operazioni che si possono fare, vediamo quali sono:

  • sonoff_farett_salagiochi: nome del progetto
  • status: ci fornirà dopo il flash lo stato del dispositivo (verde online, rosso offline)
  • /config/esphome/sonoff_faretti_salagiochi.yaml: posizione del file progetto
  •  Update Available!: ci informerà se il firmware è stato flashato con una versione precedente di ESPHome
  • UPLOAD: flashare il firmware via OTA o altro in base alla scelta dal menù in alto a destra
  • EDIT: si aprirà una finestra per editare il codice
  • SHOW LOGS: ESPHome si collegherà con il dispositivo e verrà visualizzato tutte le comunicazioni e gli stati del dispositivo stesso
  • VALIDATE: verrà compilato il codice alla ricerca di errori

Premendo i tre puntini, sulla sinistra, comparirà un altro menù dove saranno possibili le seguenti azioni:

  • Clean MQTT: verranno eliminate tutte le entity acquisite in discovery
  • Clean Build: verranno eliminate tutte le compilazioni che avremmo eseguito in precedenza
  • Compile: eseguire una compilazione del firmware, in questo modo sarà possibile creare il file .bin per poi flasharlo sul nostro dispositivo
  • Delete: verrà cancellato tutto il progetto

Premendo il tasto EDIT, inizieremo a scrivere il nostro firmware

Progetto Firmware Sonoff Basic

esphome:
name: sonoff_faretti_salagiochi
platform: ESP8266
board: esp01_1m

wifi:
ssid: "Nome_wifi"
password: "password_wifi"

# Enable logging
logger:

# Enable Home Assistant API
api:
reboot_timeout: 0s
password: password_api

ota:
password: password_ota

web_server:
port: 80

binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: "Sonoff12 Pulsante"
on_press:
- switch.toggle: fakebutton

- platform: gpio
pin:
number: GPIO14
mode: INPUT_PULLUP
inverted: True
name: "GPIO14 Faretti Salagiochi"
on_press:
- switch.toggle: fakebutton
on_release:
- switch.toggle: fakebutton

switch:
- platform: template
name: "Faretti Salagiochi"
icon: "mdi:wall-sconce-flat"
optimistic: true
id: fakebutton
turn_on_action:
- switch.turn_on: relay
- light.turn_on: led
turn_off_action:
- switch.turn_off: relay
- light.turn_off: led

- platform: gpio
id: relay
pin: GPIO12

output:
- platform: esp8266_pwm
id: basic_green_led
pin:
number: GPIO13
inverted: True

light:
- platform: monochromatic
name: "Sonoff12 Green LED"
output: basic_green_led
id: led

sensor:
- platform: wifi_signal
name: "Sonoff12 WiFi"
update_interval: 60s
- platform: uptime
name: "Sonoff12 Uptime"

text_sensor:
- platform: version
name: "Sonoff12 ESPHome Version"

Spiegazione sommaria del codice:

  • esphome: vengono dichiarati: nome del progetto (importantissimo per la configurazione dell’autodiscovery), il cip e la sua architettura.
  • wifi: nome e password del wifi dove si connetterà il dispositivo
  • logger: questa dichiarazione registrerà tutti i messaggi di registro (si potrà scegliere il grado di visualizzazione)
  • api: permette l’integrazione diretta in Home Assistant, è possibile limitare a zero il tempo di attesa prima del riavvio se nessun client si è connesso tramite api, si può aggiungere una password quando verrà integrato in HA
  • ota: abilita gli aggiornamenti tramite OTA quindi senza una connessione fisica al dispositivo, è possibile inoltre aggiungere una password per accedere agli aggiornamenti via OTA
  • web_server: si abiliterà la web ui, in questo caso andando alla pagina http://sonoff_faretti_salagiochi.local si accederà alla sua pagina web
Seguirà poi il corpo del firmware.

Convalida progetto

A questo punto verifichiamo la validità del progetto premendo su VALIDATE.

Compilazione progetto e download file bin

Se non ci sono errori, dal menù a tendina sulla sinistra quello con i 3 pallini, premiamo COMPILE. Dopo qualche minuto che ESPHome avrà compilato tutto il codice comparirà il tasto per scaricare, sul vostro Pc,  il file bin, tasto DOWNLOAD BINARY 

Flash firmware

Dopo aver compilato il firmare abbiamo 3 modi di flashare il nostro firmware in base al nostro dispositivo:
– flasharlo via OTA nel caso di un aggiornamento,
– via hardware con un collegamento tramite adattatore FTDI, collegandola direttamente sulla macchina dove è installato ESPHome,
– tramite file .bin, scelta da me optata dato che lo installerò su dispositivi già con Tasmota.

Aggiungo che per il flash tramite FTDI anche ESPHome ci fornisce il suo software lo potete scaricare da questo link https://github.com/esphome/esphome-flasher/releases
Potete sempre utilizzare ESPEasy scaricabile da qui: ESPEasy.zip

Se dovessimo flashare un Sonoff originale dovremmo utilizzare un adattatore FTDI e dei cavetti per collegarci fisicamente al sonoff vedi lo schema nell’articolo Guida Tasmota Sonoff Facile Facile.

Andando all’indirizzo IP del Sonoff con Tasmota andremo alla sua Web Ui, da li premiamo Aggiornamento Firmware e successivamente Scegli file e carichiamo il bin appena creato e diamo lo Start aggiornamento.

A questo punto il Sonoff si riavvierà con il nostro firmware ESPHome.

Integrazione in Home Assistant

Passiamo ora all’integrazione in Home Assistant dal menù Impostazioni andiamo su Integrazioni e premiamo il + in basso a destra

Selezioniamo ESPHome e dalla finestra che si aprirà, digitiamo il nome del progetto seguito da .local 
(il nome deve essere quello scritto nella dichiarazione iniziale sotto a esphome name: ) se avete impostato una password API vi chiederà di immetterla.
In alternativa attendendo circa 5 minuti l’operazione di integrazione avviene in automatico.

Dopo qualche istante l’integrazione sarà conclusa e le nuove entità create.

Card Lovelace

Creando una card Entity in Lovelace il risultato sarà il seguente:

Avremmo quindi in ordine:

  • lo stato del pulsantino montato sul sonoff
  • la versione di ESPHome con cui è stato montato il firmware
  • lo stato del GPIO14, dove io ho collegato i vari interruttori/deviatori… per il comando fisico dell’uscita sonoff
  • lo stato del led verde montato sul sonoff
  • lo stato dell’uscita
  • il tempo 
  • lo stato del segnale Wi-Fi

Aggiornamenti via OTA

Se dovessimo fare delle modifiche al codice dopo averlo salvato, selezioniamo in alto a destra OTA e premiamo il tasto UPLOAD, lui ricompilerà il codice si connetterà al dispositivo e lo aggiornerà. Se il dispositivo è in sleep mode sarà da riprovare più volte sopratutto con i sonoff.

Controllo tapparella con Wemos D1 mini

Questo esempio di programmazione, realizzato con un Wemos, un modulo a doppio relè ed un pulsante, ci permette di controllare un motore di una tapparella sia da HA che da pulsante fisico ad ogni pressione farà salita, stop, discesa, stop e così via.

esphome:
name: tapparella
platform: ESP8266
board: d1_mini

wifi:
ssid: "Nome_wifi"
password: "password_wifi"

api:
reboot_timeout: 0s

logger:

ota:

web_server:
port: 80

binary_sensor:
#gpio per pulsante apri/stop/chiudi
- platform: gpio
pin:
number: D1
# inverted: true
mode: INPUT_PULLUP
filters:
- delayed_on: 10ms
id: pulsante
on_press:
then:
# logica per passare tra le varie fasi: apri->stop->chiudi->stop->...
- lambda: |
if (id(tapparella).current_operation == COVER_OPERATION_IDLE) {
// Cover is idle, check current state and either open or close cover.
if (id(tapparella).is_fully_closed()) {
id(tapparella).open();
} else {
id(tapparella).close();
}
} else {
// Cover is opening/closing. Stop it.
id(tapparella).stop();
}

switch:
- platform: gpio
#GPIO x relè apri
pin: D8
inverted: true
interlock: &interlock [open_cover, close_cover]
id: open_cover
- platform: gpio
#GPIO x relè chiudi
pin: D4
inverted: true
interlock: *interlock
id: close_cover

cover:
- platform: time_based
name: "Tapparella Studio"
id: tapparella
open_action:
- switch.turn_on: open_cover
open_duration: 18s
close_action:
- switch.turn_on: close_cover
close_duration: 17s
stop_action:
- switch.turn_off: open_cover
- switch.turn_off: close_cover

In questo esempi ho utilizzato il pin D1 per il pulsante di controllo, pin D8 per il relè della salita ed infine il D4 per la chiusura.

Controller Arilux LC01 per strisce led RGB

Questo esempio integra in Home Assistant tramite ESPHome il controller della Airlux modello LC01. Ringrazio Andrea G. per avermi fornito il codice da lui testato.

Il controller lo potete acquistare su Banggood 

Ovviamente la prima volta dovrete flashare il codice tramite adattatore FTDI e collegarlo all’esp al suo interno come è riportato nella guida per Tasmota https://github.com/arendst/Sonoff-Tasmota/wiki/MagicHome-LED-strip-controller

esphome:
name: rgb_tv
platform: ESP8266
board: esp01_1m

wifi:
ssid: "xxx"
password: "xxx"

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

web_server:
port: 80

sensor:
- platform: wifi_signal
name: "rgb_tv WiFi Signal"
update_interval: 60s

- platform: uptime
name: "rgb_tv Uptime"

text_sensor:
- platform: version
name: "rgb_tv ESPHome Version"

switch:
- platform: restart
name: "rgb_tv restart"

output:
- platform: esp8266_pwm
pin: GPIO5
frequency: 1000 Hz
id: 'color_red'
- platform: esp8266_pwm
pin: GPIO13
frequency: 1000 Hz
id: 'color_green'
- platform: esp8266_pwm
pin: GPIO12
frequency: 1000 Hz
id: 'color_blue'

light:
- platform: rgb
name: "RGB TV"
red: color_red
green: color_green
blue: color_blue
effects:
- random:
- random:
name: "Random lento"
transition_length: 30s
update_interval: 30s
- random:
name: "Random veloce"
transition_length: 4s
update_interval: 5s
- random:
name: "Random con valori personalizzati"
transition_length: 5s
update_interval: 7s
- strobe:
name: "Strobe con valori personalizzati "
colors:
- state: True
brightness: 100%
red: 100%
green: 90%
blue: 0%
duration: 500ms
- state: False
duration: 250ms
- state: True
brightness: 100%
red: 0%
green: 100%
blue: 0%
duration: 500ms
- flicker:
name: "Flicker con valori personalizzati "
alpha: 95%
intensity: 1.5%

Relè BlitzWolf BW-SS1

Con il codice che segue, integreremo il relè da 16A della BlitzWolf

esphome:
name: bwss1
platform: ESP8266
board: esp01_1m

wifi:
ssid: "nome_wifi"
password: "password_wifi"

# Enable logging
logger:

# Enable Home Assistant API
api:
reboot_timeout: 0s

ota:

web_server:
port: 80

binary_sensor:
- platform: gpio
pin:
number: GPIO13
mode: INPUT_PULLUP
inverted: True
name: "Pulsante BW SS1"
on_press:
- switch.toggle: relay

switch:
- platform: gpio
name: "BW SS1 Relay"
pin: GPIO5
id: relay

status_led:
pin:
number: GPIO4
inverted: yes

Esempi vari

Grazie a Roberto, un  nostro utente Telegram, ci ha gentilmente fornito alcuni esempi di programmazione con ESPHome i file li potete scaricare da qui esempi_esphome.zip 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *