Aggiungiamo un led di stato al nostro Voice Assist basato su ESPHome!
Home Assistant
Scritto da Vincenzo Caputo
Gli ultimi contenuti pubblicati sul nostro Blog e sul canale collegato YouTube MissingTech, hanno riscosso un notevole successo.
Sto parlando esattamente dell'argomento "voce" di Home Assistant, cioè tutto quello che riguarda in qualche modo i comandi vocali e le domande che possiamo porre al nostro assistente domestico.
Proprio qualche settimana fa mi sono occupato di effettuare una prima prova del dispositivo ufficiale che il team di Open Home Foundation, la fondazione che ha creato appunto Home Assistant, ha realizzato in versione preview.
Potete leggere l'articolo dedicato al seguente link:
Home Assistant Voice - installazione e prima prova di funzionamento
Prima ancora Luigi Duchi aveva proposto, sul nostro canale YouTube MissingTech, un interessantissimo contenuto sempre incentrato sui comandi vocali in ambiente Home Assistant.
Qui di seguito il link a quel video:
Dopo queste prime esperienze ho iniziato a provare a spingermi maggiormente con il fai da te, complice una recente passione per l'argomento ESPHome.
Ho pubblicato infatti una guida su come realizzare un assistente vocale basato proprio su Assist, di Home Assistant, utilizzando un semplice esp32 e un piccolo microfono digitale.
Prezzo intero: 8,99€
Prezzo scontato: 8,99€
Prezzo intero: 11,99€
Prezzo scontato: 11,99€
Il tutto mosso da ESPHome.
Nel caso vi serva un recap, potete rileggere quell'articolo al seguente link:
Voice Assist realizzato con un ESP32 e ESPHome con risposta su speaker esterno!
Il risultato per quanto mi riguarda è stato eccezionale! Ottenere un assistente vocale connesso e a basso costo, mi permetterà di distribuire in casa una serie di questi dispositivi per avere il controllo totale del mio personal hub.
E di ottenere risposta direttamente negli altoparlanti che ho in giro per casa collegati agli amplificatori Arylic compatibili con il protocollo LinkPlay, nativamente compatibile con Home Assistant e dei quali abbiamo ampiamente parlato in passato su questo Blog e sul nostro canale YouTube.
Un esempio qui di seguito:
Successivamente mi sono spinto oltre, andando oltre i semplici comandi vocali per la mia domotica, integrando una vera e propria Intelligenza Artificiale (basata sul famisissimo ChatGPT) con cui poter dialogare in Home Assistant.
Potete leggere la guida al seguente link:
ChatGPT in Home Assistant per un assistente vocale con AI
Sono dunque pronto per costruire una manciata di questi dispositivi da distribuire nei vari ambianti della mia abitazione così da avere a portata di voce tutto quello che mi serve ogni volta che voglio, semplicemente parlando (con la mia casa).
Cioè, Tony Stark, scansati proprio!
Vi avevo lasciati però con la promessa di un'ultima modifica al mio progettino:
In effetti alla mia realizzazione mancava una notifica visiva che indicasse la corretta attivazione dell'assistente via hotword (hei Jarvis!) e il relativo stato di messa in ascolto.
Sappiamo tutti quanto sia facile che l'attivazione fallisca perché non abbiamo pronunciato bene la parola chiave o perché c'è del rumore di sottofondo ecc..
Lo stato di attivazione dell'assistente vocale viene correttamente segnalato dentro Home Assistant e, quando siamo davanti al PC, non c'è nessun problema. Ma essendo i dispositivi esp32 (e mic) sparsi in casa, non è possibile sapere se in un dato momento sono in ascolto o meno.
Ho deciso quindi di dotarli di un led luminoso che cambia di stato in base a quello che l'assistente sta facendo.
Ho usato un LED circolare basato su controller WS2812B
Prezzo intero: 10,99€
Prezzo scontato: 10,99€
L'effetto durante l'uso è più o meno quello che potete osservare nella seguente foto:
Nel video in coda all'articolo potrete osservare meglio il funzionamento perché ho implementato diversi colori ed effetti che richiamano i vari stati.
Prima di tutto vi mostro i collegamenti.
Ho saldato 3 cavetti jumper ai 3 pin che vedete sulla parte posteriore della stripled.
Rosso e nero vanno rispettivamente su 5V e su GND e non sono altro che il positivi e il negativo dell'alimentazione della striscia.
Il segnali di input invece da su DI ed è rappresentato dal cavetto giallo.
Sull'esp32 molto semplicemente collegato il rosso sul pin 5V, il nero sul pin GND e il giallo su un pin a piacere (io ho usato il 18).
A questo punto non vi resterà altro da fare che caricare in Home Assistant, alla sezione ESPHome Builder, il codice che trovate incollato qui di seguito.
light:
- platform: fastled_clockless
chipset: WS2812B
pin: 18
num_leds: 12
rgb_order: GRB
name: "round"
id: led_cerchio
effects:
- pulse:
transition_length: 250ms
update_interval: 250ms
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO26 #WS / LRC
i2s_bclk_pin: GPIO25 #SCK /BCLK
microphone:
- platform: i2s_audio
adc_type: external
pdm: false
id: mic_i2s
channel: right
bits_per_sample: 32bit
i2s_audio_id: i2s_in
i2s_din_pin: GPIO32
speaker:
- platform: i2s_audio
id: my_speaker
dac_type: external
i2s_dout_pin: GPIO27 #DIN
i2s_mode: primary
i2s_audio_id: i2s_in
voice_assistant:
microphone: mic_i2s
id: va
noise_suppression_level: 2
auto_gain: 31dBFS
volume_multiplier: 4.0
use_wake_word: false
speaker: my_speaker
on_listening:
- light.turn_on:
id: led_cerchio
blue: 100%
red: 100%
green: 100%
brightness: 100%
#on_end:
#- light.turn_off:
#id: led_cerchio
on_tts_start:
- homeassistant.service:
service: tts.cloud_say
data:
entity_id: media_player.soggiorno_4
data_template:
message: "{{ my_stt }}"
variables:
my_stt: return x;
- light.turn_on:
id: led_cerchio
blue: 0%
red: 0%
green: 100%
brightness: 100%
effect: pulse
on_end:
- delay: 3s
- light.turn_off:
id: led_cerchio
on_error:
- if:
condition:
switch.is_on: use_wake_word
then:
- switch.turn_off: use_wake_word
- switch.turn_on: use_wake_word
on_client_connected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_client_disconnected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
binary_sensor:
- platform: status
name: API Connection
id: api_connection
filters:
- delayed_on: 1s
on_press:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_release:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(va).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
- lambda: id(va).set_use_wake_word(false);
Il codice lo dovrete incollare dopo la riga captive_portal:
Nella parte precedente infatti ci sono le informazioni di base del vostro esp32 come i dati della rete WiFi a cui vi collegate, ecc...
Per le istruzioni di caricamento del codice fate riferimento alla guida precedente dove ho spiegato tutto nel dettaglio sia nel caso in cui siate al primo flash di ESPHome su un nuovo dispositivo, sia che siate ad aggiornare come in questo mio caso.
4 Canali a contatto pulito a meno di 5 euro con ESPHome!
Il codice comprende anche la configurazione già vista nel precedente articolo dove abbiamo integrato il microfono e configurato la risposta su uno speaker esterno.
Dunque andate a riguardare cosa dovrete personalizzare di quella parte di codice al seguente link:
Voice Assist realizzato con un ESP32 e ESPHome con risposta su speaker esterno!
Per ulteriori dettagli sull'integrazione del led e sulla parte personalizzazione della luce ho fatto riferimento alla seguente documentazione ufficiale:
- Componente FastLED Light:
https://esphome.io/components/light/fastled#fastled-clockless-chipsets
- Light Component:
https://esphome.io/components/light/index.html#light-turn-on-action
Se tutto è andato per il verso giusto ora all'attivazione della hotword il led circolare si dovrebbe illuminare di bianco e subito dopo (mentre elabora la risposta) dovrebbe iniziare a lampeggiare di verde.
I colori sono facilmente personalizzabili tramite modifica nel codice.
Non mi resta che mostrarvi il risultato dal vivo al seguente link direttamente dal nostro canale YouTube MissingTech.
Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.