Controllo impianti tramite Home Assistant ed eventi Google

Controllo Impianti - Home Assistant

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.

Open source e documentazione

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.

Aggiungere e configurare ESPHome

  • 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.

Configurare il dispositivo

  • 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.

dashboard_empty

connect_device

prepare_for_first_use

dasboard_full

Descrizione configurazione dispositivo

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" );   

Programmare il dispositivo

  • 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

install_code

Aggiungere controllo impianti alla plancia

  • 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.

set_view

set_view_2

Premesse per la creazione delle automazioni

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.

Creare automazioni

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

Descrizione 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

Stato attuale del progetto

Il progetto è stato pubblicato a Gennaio 2024, nella sua prima versione ed è attualmente funzionante. Sviluppi futuri da definire.

Autori

Francesco Sparascio, Francesco Rinaldi