Il progetto é finalizzato a rendere automatico un impianto domestico attraverso Home Assistant. L'utente ha il compito di inserire in uno specifico calendario Google il nome dell'evento che fa partire l'automazione creata in Home Assistant.
Questo progetto è open source, chiunque può scaricare i file necessari, ricreare il progetto e contribuire al suo miglioramento. Non ci sono restrizioni di licenza d'uso, ma si invita a citare che è stato realizzato dagli studenti ASIRID.
Tutto il materiale necessario si trova su Gitlab.
- Aprire Home Assistant.
- Navigare in Impostazioni > Dispositivi e Servizi.
- Cliccare sul pulsante in basso a destra per aggiungere una nuova integrazione.
- Dalla lista selezionare ESPHome.
- Seguire le istruzioni a schermo per completare il setup.
- Una volta avviata l'intergrazione, comparirà a schermo una pagina in cui è possibile configurare un nuovo dispositivo.
- Collegare al computer il dispositivo da programmare.
- Cliccare sul pulsante verde + New Device e successivamente su OPEN ESPHOMEWEB.
- Iniziare la procedura di installazione cliccando sul pulsante PREPARE FOR FIRST USE.
- Durante questa fase si potrà configurare la rete alla quale il dispositivo si deve connettere e un friendly-name.
- Terminata questa fase, si potrà vedere il dispositivo sulla dashboard di ESPHome.
Assegnare un nome al dispositivo e un nome da visualizzare nell'interfaccia
esphome:
name: controllo-impianti
friendly_name: Controllo Impianti
Specificare il microntrollore utilizzato e il tipo di scheda
esp8266:
board: d1
Abilitare il logging per il debug o diagnostica
logger:
Abilitare le API di Home Assistant per la comunicazione con ESPHome
api:
Abilitare Over-The-Air per effettuare aggiornamenti al dispositivo senza la necessità di collegamenti ad esso fisici
ota:
Abilitare un server web sul dispositivo ESP, il che può essere utile per il debug o il controllo diretto tramite browser
web_server:
Configurare rete Wi-Fi utilizzando le credenziale non in chiaro e configurare un hotspot di fallback nel caso di problemi alla rete principale
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "<identificativo rete hotspot>"
password: "<password rete hotspot>"
Abilitare 'captive_portal' per fornire una rete di emergenza che può essere utilizzata per configurare il dispositivo se la connessione WiFi non funziona
captive_portal:
Configurare il bus I2C e la frequenza (400khz è la frequenza standard per la comunicazione con molti dispositivi e sensori)
i2c:
frequency: 400khz
Configurare un chip di espansione I/O PCF8574, che consente di aggiungere più pin I/O al microcontrollore. Viene assegnato un indirizzo sul bus I2C e identificato come 'pcf8574_hub'
pcf8574:
- id: 'pcf8574_hub'
address: 0x20
pcf8575: false
Configurare i pin necessari del PCF8574 come sensori binari (input), che vengono utilizzati per rilevare la pressione di un pulsante on/off. Quando viene rilevato un input (on_press), viene eseguita un'azione per commutare (toggle) uno stato di un interruttore definito più avanti nello script
binary_sensor:
- platform: gpio
name: "PCF8574 Pin #4"
pin:
pcf8574: pcf8574_hub
number: 4
mode:
input
on_press:
then:
- switch.toggle: pin_0
- platform: gpio
name: "PCF8574 Pin #5"
pin:
pcf8574: pcf8574_hub
number: 5
mode:
input
on_press:
then:
- switch.toggle: pin_1
- platform: gpio
name: "PCF8574 Pin #6"
pin:
pcf8574: pcf8574_hub
number: 6
mode:
input
on_press:
then:
- switch.toggle: pin_2
- platform: gpio
name: "PCF8574 Pin #7"
pin:
pcf8574: pcf8574_hub
number: 7
mode:
input
inverted: true
on_press:
then:
- switch.toggle: pin_3
Configurare gli switch che controllano i dispositivi connessi ai pin definiti in precedenza. In questo caso, gli stati di questi switch sono invertiti il che significa che un valore logico alto (true) corrisponde ad un livello basso di tensione.
switch:
- platform: gpio
name: "A1"
id: pin_0
pin:
pcf8574: pcf8574_hub
number: 0
mode:
output: true
inverted: true
- platform: gpio
name: "A2"
id: pin_1
pin:
pcf8574: pcf8574_hub
number: 1
mode:
output: true
inverted: true
- platform: gpio
name: "A3"
id: pin_2
pin:
pcf8574: pcf8574_hub
number: 2
mode:
output: true
inverted: true
- platform: gpio
name: "A4"
id: pin_3
pin:
pcf8574: pcf8574_hub
number: 3
mode:
output: true
inverted: true
Configurare il display LCD collegato al bus I2C (se presente) in modo tale che mostri lo stato degli switch
display:
- platform: lcd_pcf8574
update_interval: 100ms
dimensions: 20x4
address: 0x27
lambda: |-
it.print(0,0,"Impianti");
it.printf(0, 1, "%s", id(pin_0).state ? "ON" : "OFF" );
it.printf(4, 1, "%s", id(pin_1).state ? "ON" : "OFF" );
it.printf(8, 1, "%s", id(pin_2).state ? "ON" : "OFF" );
it.printf(12, 1, "%s", id(pin_3).state ? "ON" : "OFF" );
- Per modificare il codice cliccare su Edit.
- Cliccare sul pulsante in alto a destra INSTALL.
- La prima volta si deve procedere con l'istallazione manuale cliccando su Plug into this computer.
- Attendere la compilazione del codice.
- Una volta terminata, cliccare su Download Project che scaricherà un file con estensione .bin.
- Cliccare su Open ESPHome Web che aprirà una nuova pagina web.
- Cliccare su Connect e caricare il file .bin scaricato in precedenza.
- Verificare che il dispositivo sia Online dalla dashboard di ESPHome.
N.B.: se il dispositivo é stato programmato almeno una volta e si devono apportare modifiche al codice, la programmazione può essere fatta tramite OTA (Over-The-Air) cioè tramite la connessione Wi-Fi. Per fare questo cliccare sul pulsante INSTALL e successivamente su Wirelessly
- Per aggiungere alla plancia una vista cliccare sulla barra laterale su Panoramica.
- Cliccare sul pulsante + per aggiungere una nuova vista.
- Cliccare sul pulsante in basso a destra AGGIUNGI SCHEDA.
- Digitare entità e selezionare la prima nella ricerca.
- Assegnare un titolo alla vista.
- Selezionare le entità configurate in precedenza.
- Cliccare sul pulsante in basso a destra SALVA.
N.B.: L'interfaccia può essere personalizzata secondo i gusti e le esigenze dell'utente, ad esempio aggiungendo il calendario, un grafico, ecc.
Home Assistant dispone di un calendario interno che replica quello di Google. La sincronizzazione tra il calendario di Google e quello interno di Home Assistant varia da 1 a 15 minuti quando un evento viene aggiunto o modificato sul calendario di Google.
Al contrario, se un evento viene inserito nel calendario locale di Home Assistant, la sincronizzazione con il calendario di Google avviene in modo istantaneo.
Una volta configurato il dispositivo, è necessario impostare delle automazioni che prevedono di controllare sul calendario la presenza di un evento specifico (evento acquacalda). Il trigger per queste automazioni avviene sia all'inizio (start) che alla fine (end) dell'evento: all'inizio dell'evento, un determinato impianto viene attivato; alla fine dell'evento, lo stesso impianto viene spento.
N.B.: In caso di necessità, l'impianto può essere attivato manualmente dalla vista configurata in precedenza.
Per creare un'automazione navigare in Impostazioni > Automazioni e scenari > CREA AUTOMAZIONE
Assegnare un nome e una descrizione (opzionale) all'automazione
alias: "[IMPIANTI-B4] acquacalda oppure hot"
description: ""
I trigger sono ciò che avvia l'elaborazione di un'automazione. Quando uno si attiva un trigger, Home Assistant verifica le condizioni, se presenti, e chiamerà un azione specifica.
Il trigger si attiva quando l'evento inizia (start) o quando l'evento termina.
trigger:
- platform: calendar
event: start
entity_id: calendar.orologi_poggiolevante_it
- platform: calendar
event: end
entity_id: calendar.orologi_poggiolevante_it
La seguente condizione verifica se gli eventi 'acquacalda', 'hot', o simili sono presenti nel calendario. Inoltre, controlla se il trigger si attiva all'inizio (start) di questi eventi. Se entrambe le condizioni sono soddisfatte, viene attivato un controllo specifico per quegli eventi sugli impianti. Invece, se l'evento è presente ma il trigger si attiva alla fine (end) dell'evento, l'impianto viene spento.
condition:
- condition: template
value_template: >-
{{ 'acquacalda' in trigger.calendar_event.summary or 'hot' in
trigger.calendar_event.summary or 'Acquacalda' in
trigger.calendar_event.summary or 'Hot' in trigger.calendar_event.summary
}}
action:
- if:
- condition: template
value_template: "{{ trigger.event == 'start' }}"
then:
- service: switch.turn_on
data: {}
target:
entity_id: switch.controllo_impianti_b_b4
else:
- service: switch.turn_off
data: {}
target:
entity_id: switch.controllo_impianti_b_b4
Una nuova automazione può essere eseguita in modo indipendente e in parallelo rispetto alle automazioni precedenti.
mode: parallel
max: 10
Il progetto è stato pubblicato a Gennaio 2024, nella sua prima versione ed è attualmente funzionante. Sviluppi futuri da definire.
Francesco Sparascio, Francesco Rinaldi