Ho recentemente testato Amazon Echo / Alexa (in particolare un Echo Plus e un Echo Spot) per la mia domotica (una domotica che nel mio piccolo considero ‘seria’, non semplicemente du’ device IoT tipo le luci Ikea o Hue).
In linea generale, è un ottimo prodotto. Mi sto attrezzando per piazzare diversi Echo in giro per casa per un’ampia copertura, per cui ho gradito così tanto il prodotto che NON indagherò se la soluzione Google è meglio o peggio. Feedback molto graditi comunque.
E’ un’intelligenza artificiale?
No. Qualsiasi frase fuori dai suoi pattern-matching non funziona.
>Alexa, sei meglio di Cortana?
>Mi piacciono tutte le intelligenze artificiali.
>Alexa, sei un’intelligenza artificiale?
>Purtroppo non trovo la risposta alla domanda.
>Alexa, quanto fa 2+2?
>2 più 2 uguale 4
>Alexa, quanto fa 5-20%?
>Il risultato del calcolo è -1.995.
(sia Wolfram Alpha che -bada bene- Windows Calc.exe rispondono 4.)
E’ un sistema di controllo per domotica?
Attualmente no.
Forse può essere considerato un sistema minimo in tal senso. Meglio considerarlo un’estensione, un helper di un sistema terze-parti di domotica.
Pare limitato e pensato per chi ha un numero di device che si contano con le dita, pochissime tipologie, pochissime feature supportate.
A spanne pare più una scelta di target che un peccato di gioventù.
Nel mio caso specifico ho oltre 70 devices listati nell’app Alexa: li elenca in ordine alfabetico, senza alcuna organizzazione tipica di altri sistemi di domotica (stanze, aree etc).
Usabilità UI scarsissima. Per dire, per rimuoverle tutte durante le prove, ho dovuto cliccarle una ad una, oltre a crash vari.
A titolo di esempio, la gestione termostato: accetta un
>Alexa, imposta termostato a 20
oppure
>Alexa, alza la temperature di 3 gradi
e qualcosa su modalità e scheduling. Nient’altro.
Non mi risulta sia preso in considerazione abitazioni con più termostati (per dire uno per piano), figuriamoci la gestione di temperature diverse a livello di singola stanza (generalmente gestiti con valvole di regolazione radiatori termici, a livello di calorifero o a livello di collettori nei riscaldamenti a pavimento). Roba che una qualsiasi centrale z-wave (da Fibaro a domoticz su Raspberry) gestisce facilmente.
Se avete un termostato di quelli supportati, fatemi sapere nei commenti o su Twitter se esiste un modo per chiedere la temperatura impostata o chiedere la temperatura rilevata, che non sia un’invocation a skill esterne.
Un
>Alexa, chiedi a Nest la temperatura impostata”
può essere accettabile, ma significa che Alexa non lo supporta di suo (come feature Smart Home).
E’ vera domotica? Funziona senza internet?
No. Il che a mio avviso lo rende totalmente e perennemente NON catalogabile come “sistema di gestione domotica”.
Nessun altro sistema di domotica closed (Fibaro per dire) o open (Konnex, Domoticz, OpenHab per dire) richiede internet per forza, funzionano ovviamente in lan.
Di fatto, è un helper, un gateway, niente di più.
Oltre al suo funzionamento di base, che richiede un riconoscimento vocale lato cloud, anche tutte le Skill per estenderlo sono necessariamente cloud-based.
Se avete un device IoT o generalmente un hardware comandabile in casa (per dire, una caldaia via seriale o modbus) dovete sperare che il produttore supporti Alexa (via cloud per forza) o implementarlo voi (in bocca al lupo).
Per me è inconcepibile che un sistema di domotica che deve funzionare IN CASA MIA debba dipendere da qualcosa ESTERNO A CASA MIA.
Ci si ritrova a dover avere un sistema di backup per forza (immaginate il dover aprire un cancello in mancanza di connessione internet).
Per capirci, neanche una lampadina Philips Hue o Ikea che controlla una lampadina dentro una plafoniera è domotica vera: se non si può riaccendere via app dopo aver premuto il pulsante a parete, trattasi di giocattolo, non domotica. Imho.
Personalizzazioni, adattamento a sistemi di domotica custom
Racconto la mia necessità.
Come già raccontato qui, ho un sistema custom, realizzato personale per hobby solo per casa mia, principalmente basato su uno standard hardware open chiamato Konnex, che -incredibilmente- Alexa non supporta di suo (ed è lo standard per eccellenza di domotica, supportato dalla maggior parte dei produttori di componentistica elettrica).
Per cui l’integrazione tra Alexa e il mio sistema di domotica è necessariamente (o banalmente…) che Alexa sia un’interfaccia per richieste REST/API via http a un mio Raspberry locale che gestisce a sua volta tutto (compreso Konnex).
Ci sono fondamentalmente due approcci (distinti): una Custom Skill o una Smart Home Skill.
- Una Custom Skill permette potenzialmente qualsiasi interazione, ma necessita di essere invocata esplicitamente per nome.
- Una Smart Home Skill permette di controllare devices (solo quelli previsti, da elencare preventivamente) senza invocazione, ma supporta pochissimi comandi.
Per farvi un’idea, Fibaro li supporta entrambi, per cui ha dovuto creare due skill distinte, la Smart Home per i comandi base e la Custom per tutti gli altri comandi.
La mia Custom Skill
Output di linux “uptime” via Custom Skill, “Raspberry” come invocation
Una Custom Skill significa dare un nome alla propria skill (nel mio caso Memole) e invocarla.
L’ho chiamata “Memole” per rendere la gestione della mia domotica user-friendly, famiglia-compatibile. Ho seriamente pensato di mettere un pupazzetto di Memole sopra ogni Alexa, per dargli un senso.
D’altro canto, che alternative mi permettono? “Raspberry”, “Casa” sarebbero nomi peggiori come invocation (Chiedi a Casa la temperatura? … madò).
Quindi:
> Alexa, chiedi a Memole la temperatura in cucina
significa implementare in Alexa Developer Console una skill Memole, un intent MyGetTemperature, e infine il match di un utterance, una frase che Alexa può riconoscere, tipo
> Alexa, chiedi a {skill-name} la temperatura in {parametro}
Così posso ottenere che mi chiama un url del mio Raspberry passandomi l’intent GetTemperature e parametro=cucina
Questo per OGNI pattern che voglio gestire.
- Non c’è verso che l’url sia lan. Deve essere raggiungibile da AWS. Deve essere sotto HTTPS valido, e -incredibile ma vero- LetsEncrypt non è accettato. Nel mio caso, ho configurato un reverse-proxy dal mio dominio al mio raspberry di casa.
- Non c’è verso di ricevere la frase intera chiesta ad Alexa. Di più, i parametri devono essere dei tipi specifici. Pare che supportavano un generico AMAZON.Literal a mò di stringa, per permettere un
> Alexa, chiedi a Memole {stringa Amazon.Literal}
in modo da smazzarmi raspberry-side richieste generiche, ma è stato deprecato, perchè Amazon pretende che le varie utterance siano il più possibile esplicite nel loro cloud.
La mia Smart Home Skill
Lo scopo è poter dire ad Alexa
Alexa, accendi luce cucina
il che significa che, come minimo:
- Alexa dovrà chiamare un url sul mio raspberry per l’accensione
- Alexa dovrà chiamare un url per sapere lo stato attuale
Gli step sono i seguenti:
- Creare una skill Smart Home su Alexa Console
- Creare una funzione lambda su AWS
- Collegare la skill Alexa con la funzione lambda su AWS (e tutta la configurazione di autorizzazioni, oauth2, AWS role etc…)
- Attivare la skill sul mio Alexa
A questo punto, parte una procedura chiamata Discovery: La funzione lambda chiama il mio raspberry per avere un elenco di devices, in modo che Alexa sappia quali capabilities supporta e come invocarle. L’elenco è qui.
Non mi dilungo per ora sull’implementazione della funzione lambda, mi limito a qualche perplessità:
- Tutti i device generalmente on/off (luci o prese comandate) è solo questione di manovalanza.
- Idem le luci dimmerabili o RGB, anche se non le ho ancora affrontate.
- Ad oggi non ho ancora capito qual’è il Controller raccomandato/equivalente a un semplicissimo e banale click. Per dire, il The Button Fibaro.
Ad esempio, il mio cancello elettrico, posso solo dargli un impulso “Apriti”, ma non è uno switch on/off e non posso saperne lo stato, e ad oggi non ho idea di come gestirlo con Alexa. - Non ho ancora capito come gestire motori. Di solito nella domotica generale han funzioni “avvia/ferma/direzione(apertura/chiusura)”. Forse devo usare un LockController, ma non ci sono ancora riuscito.
Ad esempio, per un vasistas una funzione base è avviare l’apertura, e potergli dire ‘stop’ al momento giusto. Discorso simile basculanti garage.
Bon, per ora mi fermo qui, se avrò feedback magari estenderò qualche spiegazione.
Ciao!