Controllare un interruttore Shelly dal Desktop di Windows

by maurizio
17 minuti
Controllare un interruttore Shelly dal Desktop di Windows

Nel mio lavoro, trascorro già un'infinità di ore seduto davanti al PC, e la domotica è riuscita a rendere la mia vita sedentaria... ancora più sedentaria! Ma, da vero appassionato di comfort estremo, mi sono chiesto: c'è un modo ancora più rapido per controllare i miei dispositivi domotici, direttamente dal PC, senza nemmeno dover allungare il braccio per afferrare il telefono?

Come chi segue questo blog sa, oltre che della vita sedentaria, sono un grande fan dei dispositivi Shelly, quindi la risposta naturale a questa domanda potrebbe essere: basta aprire la web-app My Shelly Cloud e si possono pilotare i propri dispositivi Shelly anche da PC.

Si, è vero, si può fare. Ma sarebbe comodissimo avere un bottone o un'icona direttamente sulla scrivania del proprio PC per pilotare l'accensione e  spegnimento di una luce o di un ventilatore o magari l'apertura di un cancello. Fortunatamente grazie alle API messe a disposizione dai dispositivi Shelly si può fare e in modo anche incredibilmente semplice!

Prima di iniziare però, ecco il solito disclaimer: Shelly è una linea di dispositivi per la domotica che a me piacciono molto. E' opportuno chiarire che tutte le opinioni che esprimo qui sono strettamente personali e non sono in nessun modo influenzate da considerazioni economiche di alcun tipo: non sono un rivenditore Shelly, non mi pagano per fare pubblicità e (purtroppo) non mi fanno nemmeno lo sconto :-(

Le API dei dispositivi Shelly

Ogni dispositivo Shelly offre un set completo di API che consente una comunicazione semplice ed efficace tramite chiamate HTTP, anche quando il dispositivo è connesso al cloud Shelly. Queste API, ampiamente documentate sul sito ufficiale, sono liberamente accessibili ai proprietari dei dispositivi e permettono di eseguire una vasta gamma di operazioni. Attraverso queste interfacce, è possibile sia monitorare lo stato attuale del dispositivo, acquisendo informazioni dettagliate su parametri come temperatura, stato delle uscite, livello di consumo energetico, sia intervenire direttamente per modificarne lo stato, come ad esempio accendere o spegnere un'uscita o regolare un dimmer. 

L'accesso a queste API è estremamente utile per integrare i dispositivi Shelly in ecosistemi domotici più ampi o per automatizzare operazioni quotidiane senza la necessità di un'app dedicata. Per sfruttare queste API, tuttavia, è fondamentale conoscere l'indirizzo IP assegnato al dispositivo Shelly all'interno della rete domestica. Questo indirizzo IP è l'elemento chiave che consente di inviare comandi al dispositivo e di ricevere feedback sulle sue condizioni operative. 

Inoltre, se si è scelto di proteggere il dispositivo con credenziali di sicurezza, sarà necessario conoscere anche il nome utente e la password associati. Questa misura di sicurezza è importante per impedire accessi non autorizzati, assicurando che solo chi è in possesso delle credenziali corrette possa interagire con il dispositivo.

Se avete un dispositivo Shelly nella vostra rete possiamo fare un veloce esperimento. In primo luogo occorre trovare l'indirizzo IP del dispositivo. Per farlo apriamo l'App Shelly, selezioniamo il dispositivo, ed entriamo nella scheda di configurazione della rete. Solitamente sotto "Wi-Fi 1" troviamo la configurazione dell'indirizzo IP attuale. Ad esempio io ho selezionato lo Shelly 1 che utilizzo per pilotare l'aspiratore del bagno di cui ho già parlato un po' di tempo fa, e questo è quello che vedo:

Ciò significa che questo dispositivo è raggiungibile dalla mia rete di casa attraverso l'indirizzo IP 192.168.10.57. Infatti se adesso digitassi questo IP nella barra degli indirizzi del browser, mi si aprirebbe l'interfaccia web del dispositivo.

Usare le API

Fino a qui, in realtà, niente di nuovo, ma vediamo che modificando la URL da inserire sul browser in questo modo (nel vostro caso dovrete modificare l'indirizzo da "192.168.10.57" a quello del vostrodispositivo Shelly):

http://192.168.10.57/relay/0

sul browser appare solo una scritta piuttosto concisa:

{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"timer"}

Questa risposta in realtà mi sta dicendo che in questo momento l'aspiratore del bagno è spendo, infatti il parametro "ison" (is on = è acceso) è impostato a "false". Se fosse acceso invece risponderebbe con "ison":true.

Quindi abbiamo scoperto come andare a vedere in maniera rapida lo stato di un relè di uno Shelly 1, ma è possibile modificarlo? Ovviamente si, se infatti digito sul mio browser la seguente URL:

http://192.168.10.57/relay/0?turn=on

magicamente l'aspiratore del bagno si accende. E ovviamente se modifico la URL in

http://192.168.10.57/relay/0?turn=off

l'aspiratore si spegne.

Nel caso di dispositivi con più canali come gli Shelly 2.5, è possibile indirizzare il secondo relè usando /relay/1 invece di /relay/0.

Facile vero? Purtroppo ci sono alcuni fattori da tenere presenti.

IP Statici e IP Dinamici

Come abbiamo visto, individuare l'indirizzo IP di un dispositivo Shelly all'interno della propria rete domestica è abbastanza semplice, ma è importante tenere presente che questi indirizzi IP possono cambiare nel tempo. Questo accade perché gli IP sono solitamente assegnati tramite un servizio del router chiamato DHCP (Dynamic Host Configuration Protocol). Il DHCP distribuisce dinamicamente gli indirizzi IP ai dispositivi collegati alla rete, ma non garantisce che lo stesso indirizzo venga sempre riassegnato allo stesso dispositivo.

Di norma, se si spegne un dispositivo e lo si riaccende, il DHCP tende a riassegnargli lo stesso indirizzo IP, grazie a una memoria interna che associa l'indirizzo IP alla scheda di rete del dispositivo. Tuttavia, se il router viene spento o resettato, questa memoria può essere cancellata, e al successivo avvio i dispositivi potrebbero ricevere indirizzi IP diversi da quelli precedentemente assegnati. Questo è il motivo per cui gli indirizzi IP distribuiti automaticamente dal router vengono definiti "dinamici".

Se invece si ha la necessità che un dispositivo mantenga sempre lo stesso indirizzo IP, indipendentemente dal fatto che il router venga resettato o meno, è possibile configurare un indirizzo IP statico. Un indirizzo IP statico è un indirizzo fisso che non cambia nel tempo, garantendo che il dispositivo sia sempre raggiungibile allo stesso indirizzo.

Esiste anche un'altra soluzione, chiamata "DHCP reservation", che consiste nel configurare una sorta di prenotazione dell'indirizzo IP all'interno del DHCP del router. Questa opzione permette di associare un indirizzo IP specifico a un dispositivo, garantendo che il DHCP gli assegni sempre lo stesso indirizzo ogni volta che si collega alla rete. Tuttavia, la gestione delle DHCP reservation varia a seconda del modello di router che si possiede, quindi non entreremo nei dettagli qui. Per chi volesse approfondire, suggerisco di cercare su Google "DHCP reservation" insieme al modello del proprio router per trovare informazioni specifiche su come configurare questa opzione.

In sintesi, se si desidera che un dispositivo Shelly o qualsiasi altro dispositivo mantenga un indirizzo IP costante, si può optare per la configurazione di un IP statico o esplorare la soluzione della DHCP reservation, a seconda delle proprie esigenze e delle funzionalità del router.

La soluzione più semplice è quindi quella di utilizzare degli indirizzi statici, ma occorre tenere presente che: occorre assegnare ad ogni dispositivo un indirizzo :

  • che non sia già utilizzato da un altro dispositivo,
  • che faccia parte della subnet della propria rete domestica 
  • e che sia fuori dal range del DHCP.

Senza andare troppo nel tecnico cerco di fare un esempio. Qui di seguito vedete la pagina di configurazione della rete del mio router.

 

La prima cosa che vediamo è che il router ha indirizzo 192.168.10.1 e che la sua subnet mask è 255.255.255.0. Inoltre più sotto vediamo che il DHCP utilizza gli indirizzi da 192.168.10.64 a 192.168.10.199.

In pratica questo significa che per i dispositivi della mia abitazione io potrò usare un qualunque indirizzo da 192.168.10.1 a 192.168.10.254, ma da questo blocco di indirizzi dovrò sicuramente evitare di usare il .1, perché è l'indirizzo usato dal router e gli indirizzi da .64 a .199 perché saranno utilizzati dal DHCP, ossia verranno distribuiti automaticamente ai dispositivi in rete che utilizzano IP dinamico.

Poiché in una rete non devono esistere due dispositivi con lo stesso indirizzo IP, è essenziale tenere traccia degli indirizzi IP assegnati ai vari dispositivi. Un suggerimento utile è quello di creare un registro, sia esso su carta, in un documento Word, Excel o qualsiasi altro formato vi sia comodo, in cui annotare tutti gli indirizzi IP utilizzati nella vostra rete, inclusi l'indirizzo del router e il range del DHCP. Questo vi aiuterà a evitare futuri conflitti di indirizzi IP, garantendo che ogni dispositivo abbia un indirizzo unico all'interno della rete.

Avere questa documentazione a portata di mano vi permetterà di gestire la rete in modo più efficiente e di prevenire problemi di connessione che potrebbero sorgere in futuro a causa di duplicazioni accidentali di indirizzi IP.

Ora, se avete seguito attentamente tutto fino a qui, avrete certamente realizzato che al dispositivo Shelly 1 che pilota l'aspiratore di cui parlavo, è stato assegnato un IP statico, infatti il 192.168.10.57 è fuori dal range del mio DHCP.

Creare i bottoni sul desktop

Abbiamo esplorato diverse informazioni riguardanti gli indirizzi IP e le API, ed è finalmente giunto il momento di mettere in pratica ciò che abbiamo appreso per raggiungere l'obiettivo prefissato.

Prima di procedere, però, desidero fare una breve parentesi: chi mi conosce sa che non utilizzo Windows sul mio PC, poiché da oltre 15 anni sono un soddisfatto utente Linux. Tuttavia, sono consapevole che Windows rimane, per ragioni che mi sfuggono, il sistema operativo desktop più diffuso. Pertanto, nei paragrafi seguenti, mi concentrerò su come aggiungere i bottoni per controllare i dispositivi Shelly su un sistema operativo Microsoft, specificamente Windows 10.

Per iniziare creiamo su disco C:\ una cartella che chiameremo Shelly. 

Dentro questa cartella andremo a creare dei file di comando (.bat) dove inseriremo il codice necessario a richiamare le azioni che ci interessano sugli Shelly. Per farlo seguite queste istruzioni.

Aprire la cartella C:\Shelly, andare nel menu Visualizza della cartella e assicurarsi che sia abilitata la spunta sull'opzione "Estensioni nomi file"

Poi clicchiamo dentro la cartella con il tasto DESTRO del mouse e selezioniamo dal menu popup Nuovo => Documento di testo. Poi cambiamo nome al documento chiamandolo con un nome significativo e modificando l'estensione da ".txt" a ".bat".

Nel mio caso ho creato un file chiamato "accendiAspiratore.bat". 

Clicchiamo sul file appena creato sempre con il tasto DESTRO del mouse e selezioniamo Modifica: si aprirà il Notepad e potremo digitare l'indirizzo completo del comando che vogliamo impartire al device Shelly (come abbiamo visto prima) racchiuso tra virgolette e preceduto dalla parola "curl". Ad esempio nel mio caso ho scritto:

curl "http://192.168.10.57/relay/0?turn=on"

Salviamo il file e chiudiamo il notepad.

In pratica ho creato creato uno script di comando che se attivato accende l'aspiratore del mio bagno. Il comando "curl" è una specie di "browser da riga di comando". In pratica esegue la chiama API passata come argomento.

Per provare il comando basta fare click don il tasto DESTRO del mouse sul file .bat e selezionare Esegui. 

Il nostro obiettivo è creare una icona direttamente sul desktop di Windows per un accesso rapido. Per farlo, è sufficiente trascinare il file .bat sul desktop usando il tasto DESTRO del mouse. Quando rilasciamo il file, apparirà un menu popup: selezioniamo l'opzione "Crea collegamento qui". Così facendo, verrà creata una nuova icona sul desktop che, quando cliccata, eseguirà il comando contenuto nel file .bat.

A questo punto possiamo procedere a personalizzare l'aspetto della nostra icona.

Clicchiamo su di essa con il tasto DESTRO del mouse e sul menu contestuale selezioniamo "Proprietà". 

Andiamo nella tab "Generale" dove potremo modificare l'etichetta dell'icona. Nel mio caso l'ho cambiata da "accendiAspiratore.bat - collegamento" a "Accensione Aspiratore Bagno".

Poi selezioniamo la tab "Collegamento" e qui andiamo ad impostare impostare nella casella "Esegui" la voce "Ridotta a icona" per evitare di far comparire sullo schermo la finestra del prompt dei comandi durante l'esecuzione.

Infine possiamo cliccare sul bottone "Cambia icona..." per modificare l'icona del collegamento. Il sistema ne propone un elenco standard da cui selezionare ma eventualmente è possibile caricare un'imagine qualsiasi purchè nel formato ".ico", tipico delle icone di Windows.

Infine clicchiamo su OK e il gioco è fatto: con un doppio click su questa nuova icona attiveremo il nostro Shelly!

E ovviamente seguendo il medesimo procedimento è possibile creare più icone ognuna dedicata ad uno specifico comando, fino a creare una comoda bottoniera sul desktop.

Attivare dispositivi Shelly dal desktop Linux

Abbiamo visto come creare un comando direttamente sul desktop di Windows per attivare o disattivare un interruttore Shelly, vediamo come fare la stesso cosa sul desktop di molte distro Linux.

Solitamente sull'ambiente grafico delle distro Linux, cliccando con il bottone DESTRO del mouse su un punto libero del desktop, si apre un menu dove è presente la voce "Crea nuovo lanciatore qui..." (o qualcosa di simile). Selezionandola si apre una finestra dove è possibile andare a specificare il comando da far attivare al lanciatore. Il comando da utilizzare nel caso di Linux è il medesimo già visto anche per Windows.

Anche in questo caso è possibile scegliere un nome da assegnare al lanciatore e una icona per poterlo identificare. L'icona può essere selezionata tra le molte offerte dal sistema oppure possiamo fornire un'immagine in formato PNG. Il risultato finale è lo stesso: creeremo un'icona sul desktop che al doppio click attiverà (o disattiverà) l'uscita di uno Shelly.

Conclusioni

Come ho detto all'inizio, mi piacciono molto i dispositivi Shelly, per la loro semplicità di adozione ma anche e soprattutto perché permettono grande libertà e autonomia nella gestione.

Nel caso delle API, il solo fatto di poterle utilizzare senza dover scollegare i dispositivi dal loro cloud per me è impagabile perché consente, con grande semplicità, di realizzare automatismi e controlli diretti, che non hanno nemmeno bisogno di collegamento ad Internet per poter funzionare.

Quindi se siete pigri come me, adesso avete l'opportunità di riempire il desktop del vostro PC di icone che comandano l'illuminazione di casa, dei ventilatori, degli aspiratori o la coperta elettrica (magari non adesso che non è stagione).

E' facile ed è anche molto divertente. Buon relax! :-)