La sveglia di Iron Man realizzata con Home Assistant
Home Assistant
Scritto da Vincenzo Caputo
Chi mi segue dalle mie prime apparizioni online, sicuramente ricorderà il progetto sveglia di Iron man realizzato con Tasker.
Per diverso tempo mi sono chiesto se una cosa simile fosse stata possibile realizzarla con Home Assistant, ma mi sono sempre scontrato con il problema dei flussi audio da sovrapporre.
Con Tasker potevo eseguire un mp3 qualsiasi e sovrapporre una sintesi vocale (text to speech) a piacere, con Home Assistant questo non sembrava possibile, riuscivo a gestire un flusso audio per volta: o sistesi vocale o traccia sonora.
Ma chi ha visto il film IronMan (il primo della serie), probabilmente ha ben in mente la scena di cui parlo all'interno di casa Stark.
Nelle fasi iniziali del film, ad un certo punto, Tony Stark viene intercettato da una impertinente (e avvenente) giornalista che finisce inesorabilmente nel suo letto. Al mattino seguente si sveglia proprio con la sveglia (scusate il gioco di parole) fatta da Jarvis nella casa super tecnologica di Tony Stark.
La sveglia è fatta da una musichetta, che inizialmente sembra quasi il tintinnio di una sveglia, a cui si sovrappone la voce di Jarvis che da il buongiorno e una serie di indicazioni meteo di Malibù.
Dunque andava trovato un modo in Home Assistant di superare questo problema dei flussi audio.
Mi sono messo un po' a studiare e mi sono imbattuto in un'integrazione custom per Home Assistant chiamata Chime TTS
https://github.com/nimroddolev/chime_tts/wiki/#what-is-chime-tts
Nella pagina ufficiale del progetto c'è scritto letteralmente: Locally combine TTS and audio in Home Assistant, cioè combina localmente TTS (text to speech) e audio in Home Assistant.
Esattamente quello che cercavo!
Inoltre Chime TTS offre una serie di funzionalità aggiuntive veramente interessanti:
- Nessun problema di ritardo o temporizzazione: tempistica precisa tra i file audio senza ritardi TTS nel cloud.
- Segnali audio personalizzabili: riproduci audio preimpostato o personalizzato prima e dopo i messaggi TTS.
- Selezione flessibile della piattaforma TTS: supporta varie integrazioni della piattaforma TTS .
- Invocazione semplice dei servizi: utilizza i servizi chime_tts.saye chime_tts.say_url nelle automazioni e negli script.
- Imposta il volume del lettore multimediale: le notifiche possono essere riprodotte a un volume definito e ripristinate dopo la riproduzione.
- Ripristina l'audio precedente: Chime TTS supporta la pausa e la ripresa della riproduzione audio corrente oltre le piattaforme di lettori multimediali supportate da Home Assistant (ad esempio: HomePods) .
- Mescola e abbina le piattaforme TTS: combina l'audio TTS utilizzando più piattaforme TTS all'interno dello stesso annuncio audio.
- Velocità TTS configurabile: imposta la velocità audio TTS ovunque tra 1 e 500%.
- Tonalità TTS configurabile: imposta la tonalità per l'audio TTS, consentendo una maggiore personalizzazione.
- Supporto per argomenti FFmpeg: applica lavori FFmpeg all'audio generato o lavori specifici a rintocchi specifici e segmenti audio TTS.
- Ritardo configurabile: imposta ritardi personalizzati tra rintocchi e audio TTS.
- Overlay configurabile: imposta durate di sovrapposizione personalizzate tra rintocchi e audio TTS.
- Caching: memorizza nella cache l'audio per una riproduzione più rapida.
- Gruppi di altoparlanti: raggruppa gli altoparlanti per la riproduzione simultanea (sulle piattaforme supportate).
Pronti via mi sono messo subito a lavoro.
Intanto ho installato l'integrazione tramite HACS.
Per dotare il vostro Home Assistant di HACS potrete seguire la recente guida del nostro Luigi Duchi al seguente link:
Home Assistant - Come installare HACS e Google Drive Backup
Dopo aver installato l'integrazione riavviate il vostro Home Assistant per dare modo al servizio di partire correttamente.
Successivamente sono andato a recuperare la musica originale delle sveglia di Tony Stark (che naturalmente potrete sostituire con una musica di vostro gradimento) e l'ho copiata all'interno di una cartella del mio miniPC che ospita Home Assistant.
Io l'ho messa in /media/sounds/temp/chime_tts/chimes/mio/IronMan.mp3, voi potete metterla dove più vi aggrada, l'importante che prendete nota del percorso che successivamente servirà per configurare il servizio.
A questo punto potete recarvi in impostazioni, automazioni e scenari e cliccare in alto su script.
Aggiungete un nuovo script e, nella vista yaml, aggiungete il codice che trovate qui di seguito:
sveglia_ironman:
alias: Sveglia
sequence:
- service: chime_tts.say
data:
tts_speed: 100
tts_pitch: 0
volume_level: 1
tts_platform: cloud
message: >-
Buongiorno, Sono le {{ states.sensor.time.state }}. A Matera la
temperatura esterna è di {{ state_attr('weather.casa',
'temperature')|int }} gradi, il tasso di umidità è del {{
state_attr('weather.casa', 'humidity')|int }} %, il vento soffia a {{
state_attr('weather.casa', 'wind_speed')|int }} chilometri orari
offset: -39000
chime_path: /media/sounds/temp/chime_tts/chimes/mio/IronMan.mp3
target: null
device_id: f8bgd6ta38479fc14cd4b67dd5fbcc14070
mode: restart
Naturalmente questo codice andrà personalizzato, potrete eventualmente aiutarvi con la configurazione grafica (potrete passare da yaml a grafico quando vorrete) per alcuni punti particolari tipo il dispositivo su cui eseguire la sveglia e la piattaforma TTS.
Nella precedente immagine trovate in particolare il "scegli dispositivo" (un Google Home o qualsiasi altro speaker disponibile e integrato su HA) e "TTS Platform" dove potrete selezionare il servizio di sintesi vocale che preferite.
Un altro parametro importante da settare è quello dell'offset. È un valore espresso in millisecondi e indica a quanti millisecondi dalla fine del file sonoro deve iniziare il TTS.
Io ad esempio ho impostato su -39000: significa che lui inizierà a riprodurre il testo da pronunciare 39 secondi prima che finisce il file mp3. Regolatevi di conseguenza.
Per quanto riguarda il messaggio vocale da riprodurre avrete notato che c'è del testo e ci sono poi dei codici racchiusi tra le parentesi graffe.
Il racchiuso tra le parentesi graffe non è altro che il riferimento ad alcuni sensori presenti in Home Assistant. Potrete aggiungere a piacimento quello che vi pare, come la lettura di un sensore di temperatura Sonoff o Shelly, la lettura di un sensore che legge da un servizio meteo online, ecc...
Io ho usato l'integrazione Time & Date per ottenere un sensore che leggesse l'orario corrente: {{ states.sensor.time.state }}
Per il meteo invece ho usato Forecast Casa che credo sia nativamente compreso in Home Assistant:
{{ state_attr('weather.casa', 'temperature')|int }}{{state_attr('weather.casa', 'humidity')|int }}
{{state_attr('weather.casa', 'wind_speed')|int }}Allo script naturalmente potrete aggiungere anche altre azioni come alzare le tapparelle o aprire le tende, lanciare l'irrigazione del giardino, accendere la macchinetta del caffè e tutto quello che vi pare, a patto che abbiate questi servizi integrati in Home Assistant.
Il mio script è fatto nel modo che appare nella foto poco sopra e basterà fare "aggiungi azione" (in basso a sinistra) per mettere in coda altri comandi. L'editor grafico è abbastanza efficace e potrete evitare di scrivere codice se non siete molto esperti.
I più esperti avranno notato che le prime sei azioni riguardano l'impostazione del volume su ben 3 dispositivi.
Si tratta di 3 amplificatori connessi di marca Arilyc compatibili con il protocollo PlayLink integrabili in Home Assistant tramite l'omonimo custom component.
Praticamente ne ho 3 sparsi per casa, connessi con 2 altoparlanti ciascuno, raggruppati in un unico altoparlante virtuale che permette di avere un audio multi-room udibile un po' ovunque.
Potete osservare l'esempio di funzionamento nel video in coda all'articolo.
Ne avevamo parlato in un articolo al seguente link:
Home Assistant- Integrazione schede Arylic con custom component Linkplay
Qui di seguito vi lascio anche i link al sito del produttore e allo store Amazon
A questo punto non vi resterà che creare l'automazione per impostare l'orario di sveglia desiderato.
Nell'automazione ho scelto come prima condizione l'orario e come seconda condizioni i giorni della settimana.
Quando si verificano queste due condizioni lui eseguirà lo script Sveglia.
Guardate il risultato qui di seguito!
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.