Primo impatto con Alexa / Amazon Echo

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!

My Home Automation – Memole

Aggiornato in dicembre 2019.

Qui racconto le soluzioni di home-automation che ho adottato in casa mia, progetto perennemente in corso. E’ sempre stato un sogno nel cassetto realizzare un prodotto (hardware+software) user-friendly e open-source dedicato alla home-automation, anche se non ho mai rilasciato nulla perchè ancora oggi sto usando casa mia come caso di studio e sviluppo :P.

Nel leggere il progetto di Francesco Tucci : La domotica fai da me mi è venuta voglia di raccontarvi il mio, molto simile come motivazione di base.

Premessa: NON mi occupo di questo per lavoro, l’ho realizzato negli anni SOLO per casa mia SOLO per hobby, anche se è sempre stato un sogno nel cassetto realizzare un prodotto per home-automation user-friendly  e open-source.

Come dice Francesco,

“Non sono dipendente da servizi che potrebbero fallire o chiudere”

il mio sistema di domotica è nato dal rifiuto di volermi appoggiare su progetti commerciali di terze parti. Casa mia dovrà funzionare anche tra trent’anni quando sarò un vecchio rimbambito. E magari non essere costretto a usare App Android separate tra loro e poter liberamente scrivere script di interoperabilità.

Non sempre è possibile, la domotica/IoT è piena di soluzioni cloud-only, tendenzialmente capita che uso queste soluzioni al fine di capire le mie necessità, per poi (col tempo) migrarle a soluzioni open.
Il riconoscimento vocale in casa, lo faccio con degli Alexa, perchè una soluzione non-cloud affidabile ancora non esiste.

Memole, la centralina di controllo

Un Raspberry PI principale, chiamato Memole, l’assistente di casa, quasi un membro della famiglia.

Memole gestisce tutta la casa. DHCP & DNS per la rete privata (con blocco anti-ads e anti-malware a monte via PiHole), ha UI (tablet in casa) e chatbot (Telegram), gestisce la casa e comanda tutti gli altri hub.

  • Ha un unico file config.json con tutte le opzioni specifiche di casa mia: temperature volute, widgets da mostrare nella UI, mappa mac-address>plugin, etc.
  • Riempie un unico file data.json con tutti i dati che raccoglie.
  • Raccoglie dati via nmap sui devices in rete. Questo per avere un’elenco dei devices in rete locale. Shot di UI
  • Nel file config.json ci sono tutti i map mac-address->plugin, ad esempio c’è
    "C8-FF-77-D8-FE-C5": {                
    	"name": "Dyson Camera",                
    	"type": "dyson-pure-cool",                
    	"category": "Domotics",                
    	"dyson_name": "Camera",
    },

    Memole dopo aver verificato quali devices sono online, se al device corrisponde un plugin (nel caso di esempio “dyson-pure-cool”) lancia lo script che lo controlla per raccogliere dati
    (nel caso di esempio temperatura, umidità etc).

  • Monta un webserver (nginx) con un’interfaccia jQuery tutta in ajax che legge il data.json e genera la UI.
    Ovviamente la vedo da smartphone.
    In casa, ho dei tablet in modalità Kiosk che mostrano l’interfaccia.
    La vedo da remoto via port-forwarding su una VPS mia su Amazon EC2.
    Ad esempio, un widget in config.json così

    "riscald_primo": {
                    "x": 55,
                    "y": 16,
                    "width": 18,
                    "height": 10,
                    "title": "Riscaldamento Primo",
                    "text": "[field=devices.B8-27-EB-7A-26-B9.caldaiaRelayPrimo,format=bool] [field=devices.B8-27-EB-7A-26-B9.temperature_detected_primo]\u00b0 [fontawesome]f18e[\/fontawesome] [field=config.temperature_target_primo]\u00b0"
                },

    viene renderizzato in html così:

  • Uso anche un bot Telegram per interazione. Ad esempio, se tiro il campanello di allarme della sauna, l’avviso arriva dal bot Memole. Risponde a comandi quali “accendi studio”, “spegni tutte le luci”, “dimmi lo stato uso corrente”, “accendi camino elettrico” etc.
  • Memole interroga anche gli altri Raspberry dislocati in casa, generalmente usati come sensori (temperature, umidità etc) o come interfaccie cablate ad altri sistemi (ad esempio ho un raspberry in caldaia che traduce comandi di Memole in comandi seriali via modbus alla pompa di calore).
  • La maggior parte dei pulsanti fisici (i ‘frutti’) sono pulsanti che Memole sente, e comanda altri device correlati.
    Ad esempio, in mansarda ho dei pulsanti tradizionali, che se premuti accendono delle fascie di led di Philips Hue. Se doppio-click, cambiano preset di colori.

Konnex

Ho un sistema Instabus/EIB/Konnex, uno standard open che permette l’interoperabilità di componenti elettriche.
In pratica quando ho costruito casa, ho fatto mettere una canalina che contiene un bus-dati EIB.
In un sistema elettrico normale ogni interruttore è collegato a una luce fisicamente, io invece in OGNI interrutture di casa ho un modulo che manda un telegramma “è stato premuto” e basta, e una centralina che reagisce in base alla configurazione, tipicamente un “accendi la luce X”.
Questo mi permette via API di controllare tutto (per dire, aprire il garage o il cancello elettrico dalla mia UI).
Permette anche la creazione di scenari, tipo “Se premo il bottone vicino all’uscita, spegni tutte le luci e chiudi tutti i vasistas”.

Uso il software ETS5.5 per la configurazione e debugging, e un Gira Ethernet per il controllo dai miei scripts.

Autoalimentazione elettrica

Ho diverse soluzioni semi-funzionanti per rilevare l’uso della corrente elettrica.
L’ultimo in uso oggi sono le API di TeslaWall2 (qui un esempio di output json), che mi permettono di leggere in realtime il consumo di casa, quanto produce il fotovoltaico, quanto è coperto dalla batteria di accumulo, quanto compro da Enel.

Ho un fotovoltaico da 18 kW, una batteria di accumulo da 13.5 kW (sto valutando se metterne altre due), il tutto in un trifase con stabilizzatore di tensione.

In estate ho un’autoalimentazione da oltre il 90%, in inverno con il riscaldamento una percentuale molto più bassa.

Riscaldamento

Questo è stato uno dei primi obiettivi del mio sistema, in quanto per scelta NON ho alcun termostato in casa e se il riscaldamento funziona male mia moglie giustamente sclera.

Attualmente ho tre Raspberry che rilevano temperatura e umidità per piano.
Il raspberry centralina li interroga, e in base a un’algoritmo scritto in uno script determina se comunicare ad un quarto Raspberry collegato via modbus alla caldaia l’attivazione dei relè.
Praticamente ho un termostato software.

Cerco di usare una caldaia a gas SOLO come sistema di backup, ma a regime il riscaldamento a pavimento è alimentato da una pompa di calore, un Hybrid Cube Daikin per l’acqua calda, otto splitter e altre tre macchine esterne degli splitter. Via modbus ho i dati in realtime dello stato caldaia e delle temperature (water inlet, leaving, outside, tank etc).

Al fine di aumentare l’autosostenimento, applico regole tipo il cercare di alzare la temperatura finchè il fotovoltaico produce evitando se ragionevole l’uso della corrente di notte.

Alexa – Amazon Echo

Come interfaccia di gestione vocale, per la copertura della maggior parte delle aree di casa, son costretto ad usare degli Echo (ne ho un po’, a memoria 8). Lo so, discutibile come privacy, e cloud-based.
Ma NON uso alcuna skill per la domotica. Mi son scritto la mia skill (Lambda su AWS), in modo che Alexa funzioni da gateway traslando comandi vocali per passarli a Memole.
Quindi un domani mi basterà trovare un’equivalente che faccia un riconoscimento e TextToSpeech. Ad oggi, con un Raspberry e soluzioni non-cloud, il riconoscimento di testo libero (senza esercitazione su word specifiche) è tragico.

Piscina

Uso un Blue Connect (cloud-based) come aiuto nella gestione, perchè è parecchio complicato gestire il PH, la salinità etc, ma il resto della gestione (come la schedulazione della pompa di filtraggio o il riscaldamento) è anch’essa gestita direttamente da Memole.

Rete lan

Ho 15 punti lan e diversi router wifi. La casa è ampia, è l’unico modo per avere una copertura decente da ogni punto della casa.
Sto testando l’uso di Ubiquiti con punti mesh per risolvere il problema di copertura con un’unico SSID.
Uso un Vigor 2760 come router primario per l’ADSL, QoS etc, principalmente perchè il mio ISP mi ha dato una configurazione IPv6 strana che riesco a far andare solo con quello. Ai tempi della richiesta IPv6, diversi anni fa, a detta del mio ISP fui il primo a chiederlo…

Antifurto

No. Cioè, c’è l’antifurto, un TecnoAlarm, ma per scelta è totalmente manuale e separato dalle mie diavolerie DIY.

Altri agganci con hub IoT

Memole interagisce con diversi hub di altre soluzioni domotiche (alcune cloud-based). Ribadisco, Memole è l’interfaccia primaria, i seguenti hub sono usati come ‘helper’ da Memole, mai direttamente.
Attualmente come gateways ho:

  • Un hub Z-Wave Fibaro con cui controllo qualche presa comandata e gestisco gli occhietti Fibaro
  • Un hub Philips Hue per diverse luci RGB.
  • Un Fingbox anche se sto cercando di abolirlo

Quindi attualmente quando devo agganciare un devices IoT, posso scegliere se Konnex, Z-Wave (via Fibaro), Zigbee, o perlomeno scelgo un device che potrò controllare direttamente da Memole via LAN (via API), o se ha un’interfaccia almeno seriale (modbus ad esempio), gli piazzo un Raspberry che Memole controllerà.

Altri devices agganciati

  • Un Lametric Time come UI per l’output di qualche valore
  • 4 Dyson Pure Cool, per rilevamento e pulizia qualità dell’aria in casa.
  • Un videocitofono Biticino (che odio, prima o poi lo costruisco da solo).
  • Una sauna Jacuzzi MI. La elenco qui perchè ho fatto io l’aggancio con Alexa per comandare Memole da dentro la sauna e per la gestione di musica d’ambiente e cromoterapia.
  • Una shower toilet Ghroe Sensia Arena , praticamente un bagno stile giapponese. Non è ancora collegata a Memole, non c’è motivo, ma lo riporto qui perchè è comunque un device tecnologico parte della casa.

Altri devices tecnologici in casa, non legati a IoT

  • Diversi sistemi di home-theater, nelle varie aree (cinema con proiettore in taverna, salotto, camere, palestra) di cui non sto a elencare hardware. Generalmente Android.
  • Sono un gran fan delle tecnologie VR. Ho 2 aree distinte, tantissimi headset, soprattutto una postazione gaming che cerco di tenere tecnologicamente all’avanguardia.
  • Un cabinato da bar originale Jamma ristaurato con una collezione di giochi arcade pre-anni-90. Mame, C64, Amiga, GameBoy e laser-disc emulation via Daphne. Monta un catodico originale, una scheda VGA custom per riprodurre il feeling esatto a 15 khz e risoluzione esatta nativa (Bubble Bobble per dire gira a 256×224, 256 colori), crediti inserendo monete.
  • Un laghetto per tartarughe (con pompa e cascata) controllato da Memole.

Fine

Bon, per ora mi fermo, magari se l’argomento piace integrerò qualche altra spiegazione.
Ciao!

RGB Bulb Review

I’m testing different RGB bulb in my home automation environment, to research the best bulb in the market.
I will update this post with my other research and with people comments.

Short review, current winner: Aeon Labs Bulb.


Philips Hue

Website: http://www.meethue.com
Protocol : ZigBee

Pros:

-A lot of app for it

Cons:

– Only HSB colors, difficult to set a precise RGB color.
– Only 3 values for colors: Hue, Saturation and Brightness.
– Poor colors quality. Read the BravoRomeo review here.
I can’t understand the difference between yellow and green with my Philips Hue.
– Slower, slower reaction when changing colors. For example if i set a sequence of 9 colors (without fade), it took around 3 seconds to do all.

———————-

Aeon Labs Bulb Gen5

Website: http://aeotec.com/z-wave-led-lightbulb
Protocol: ZWave
ZWave SwitchColor CC version: 1

Pros:

– A lot of led
– 5 values for colors: RGB + Warm White + Cold White
– True, exact RGB colors
– Faster reaction to colors. For example if i set a sequence of 9 colors (without fade), it took around a fraction of second to do all.

Cons:

– It seems that don’t support fade between two arbitrary RGB color. It’s limited to simply preset of effects like rainbow.

———————-

Zipato RGBW bulb – rgbwe27zw.eu

Website: http://www.zipato.com/default.aspx?id=24&pid=81&page=1&grupe=
Protocol: ZWave
ZWave SwitchColor CC version: 1

Pros:

– 5 values for colors: RGB + Warm White + Cold White
– True, exact RGB colors
– Faster reaction to colors. For example if i set a sequence of 9 colors (without fade), it took around a fraction of second to do all.

Cons:

– Don’t support any kind of fade or effects. Confirmed by their support.