In questo articolo realizzeremo in modo molto semplice e veloce un capiente sterilizzatore UV smart con pochi elementi acquistabili su Amazon, Shelly e un negozio di ferramenta o bricolage.
Durante la pandemia Covid-19, complice la carenza di mascherine e il conseguente innalzamento di costo, abbiamo tutti tentato di riutilizzare più volte le stesse mascherine. Visto il depositarsi di germi e batteri (non solo Covid-19!) tra le fibre non è possibile utilizzarle più di un giorno senza eliminare tali microorganismi. In quel periodo sono apparsi infatti diversi metodi per disinfettare le mascherine più o meno efficaci (ricordo ad esempio i vapori di alcool, il lavaggio in lavatrice, ecc).
Di tutti i metodi apparsi un fattore mi lasciava molto perplesso: tutti i metodi prevedevano un decadimento fisico delle fibre di cui è composta la mascherina, rischiando di renderle più che inutili: dannose!
Quando Shelly ha rilasciato la sua strip di led UVC ho pensato “ecco la soluzione”. I raggi UV-C!
Utilizzando tali raggi, infatti, non avviene alcun decadimento (se non a lungo termine) delle fibre di cui è composta la mascherina in quanto non vi è alcuna azione meccanica o chimica. La strip di Shelly dà un grado del 95% di effettiva uccisione di virus e batteri nel raggio di 2 metri (la nostra scatola sarà molto più piccola! 😉 ).
Così è nato questo progetto che tutti i giorni mi aiuta a risparmiare sulle mascherine ed è perfettamente integrato con il mio sistema di domotica Home Assistant ed Alexa tanto da essere molto apprezzato anche da mia moglie.
Se sei alle prime armi con Home Assistant potrebbe essere anche interessante capire come realizzare le semplici automazioni per la sua gestione, è una buona occasione per imparare diversi concetti con un po’ di pratica 🙂
Ti interessa? Segui le semplici istruzioni di seguito e avrai a breve il tuo sterilizzatore UV smart! 🙂
DISCLAIMER 2: Per realizzare questo sterilizzatore UV smart dovrai collegare dei cavi a 230V, niente di complicato ma fallo solo se ti senti in grado e puoi garantire la tua e altrui sicurezza facendo un lavoro a regola d’arte e sempre con tensione non collegata.
Sommario
Come sarà il nostro sterilizzatore UV smart esattamente?
Il nostro sterilizzatore UV smart avrà le seguenti caratteristiche:
- Interno del contenitore riflettente per massimizzare il raggiungimento dei raggi UV da tutte le direzioni
- Capiente con ganci per fissare fino a quattro mascherine contemporaneamente
- Accensione e spegnimento smart
- Sensore apertura porta per interrompere i raggi UV (dannosi per le persone) all’apertura del coperchio
- Integrazione con Home Assistant
- Integrazione con Alexa. Partenza del ciclo di sterilizzazione con il comando “Alexa, sterilizza mascherine”, annuncio di termine sterilizzazione e in caso di apertura e richiusura porta durante il funzionamento.
Realizzazione dello sterilizzatore UV smart
Prima di pensare all’hardware da usare e a come integrarlo in Home Assistant dobbiamo realizzare lo sterilizzatore e come prima cosa dobbiamo procurarci il materiale necessario. Non ti preoccupare, sembrano tante cose ma è tutto molto semplice.
Il materiale necessario
Di seguito l’elenco dei materiali necessari alla realizzazione dello sterilizzatore UV smart. Alcune cose possono essere fatte in modo differente per cui questa è una guida di massima di come l’ho fatto io, se avete idee differenti mettetele in pratica!
- La scatola di legno 40 x 30 x 14 su Amazon a 26,95€
- Scatola di derivazione (va bene qualsiasi un po’ capiente): 9,99€
- Shelly Strip di led UVC: 19,90€ (più spedizione)
- Shelly 1: 10,90€
- Aqara door & Window: 24,90€ (se devi già acquistare su Aliexpress li trovi a 10€)
- Rotolo di alluminio da cucina: 1,99€
- Colla Bostik trasparente o gialla. In ferramenta, negozio bricolage o su Amazon: 8,00€
- 12 viti autofilettanti lunghe meno di 1cm. In ferramenta, negozio bricolage o su Amazon
- 16 Viti con gancio a L (4 per mascherina, filetto fondo meno di 1cm). In ferramenta, negozio bricolage o su Amazon
- Catenella per limitare l’apertura massima della scatola. In ferramenta o negozio bricolage.
- Un alimentatore MicroUSB di recupero (sono sicuro che ne hai uno in giro di un vecchio telefono 🙂 )
- Chiusura magnetica per porte. In ferramenta, negozio bricolage o su Amazon
- 2 Morsetti elettrici a leva da 3 poli. Negozio articoli elettrici, bricolage o su Amazon
- Cavo guainato 2x1mmq per alimentazione e giunzioni interne: 9,99€ o al metro nei negozi di bricolage
- Presa volante da 10A: 0,99€
- Spina volante da 10A: 2,05€
- (opzionale) 16 tag NFC per l’attivazione della sterilizzazione (e tante altre belle cose) 11,99€
Realizziamo lo sterilizzatore UV smart
Come prima cosa prendi la scatola di legno e stendi uno strato di alluminio su tutti i lati interni dello stesso, cercando di lasciare l’alluminio il più possibile liscio e non increspato. In questo modo massimizzerai la riflessione dei raggi UV cercando di non disperderli. Attenzione anche a non sporcare di colla il lato visibile dell’alluminio, per non ridurne il potere riflettente.
Non è un lavoro simpatico. Consiglio di disporre tante striscioline sul fondo di Bostik (non spesse!) e di schiacciare bene l’alluminio per farlo aderire al meglio. Al termine rifila l’alluminio in eccesso dal bordo.
L’odore di colla perdurerà per diversi giorni. I primi giorni conviene conservarlo in un ambiente ventilato in cui non si soggiorna a lungo.
Posiziona a questo punto la chiusura magnetica per porte come in figura:
Dall’altra parte, sullo sportello che si apre, ho fissato una L di metallo che avevo in giro (occhio che sia attirata dalla calamita!), così che fosse fissabile lateralmente, come in figura:
Avrai notato che aprendo la scatola le cerniere fanno molta leva per sostenere il peso del coperchio. Il legno in quella zona non durerà a lungo senza un aiuto. Ecco il perchè delle catenelle che ne limitano l’apertura a poco meno della sua massima escursione, così da non esercitare una leva esagerata sul legno.
Dopo aver dimensionato le catenelle in modo uguale rimuovendo o tagliando un anello, posizionale in modo che sostengano il peso del coperchio aperto così che non gravi sulle cerniere e fissale con 4 delle viti lunghe meno di 1cm.
Sebbene meccanicamente sarebbe meglio, non disporre il fissaggio inferiore troppo verso il bordo anteriore altrimenti quando si chiuderà il coperchio andranno sopra alla strip UV Shelly che ha le piste elettroniche a vista… Tienilo in considerazione per individuare i punti di fissaggio delle viti.
Ora pensiamo alla parte elettrica
Per rendere l’operazione il più veloce e sicura possibile ho pensato di fissare una scatola di derivazione sul lato della scatola in cui contenere la parte in tensione, così che il tutto sia sicuro. E’ possibile farlo anche all’interno della scatola per renderla più estetica ma, ripeto, il leit motif di questa scatola era “pronta domani“.
Per fissare la scatola bastano quattro delle viti autofilettanti lunghe meno di 1cm, sul lato della scatola. A questo punto pratica un foro con una punta sufficientemente grande da permettere il passaggio del connettore microusb del cavo dell’alimentatore di recupero che hai trovato. Il foro va fatto sul fondo della scatola di derivazione in vicinanza a dove si fisserà la strip UV, come in figura:
Ora puoi fissare con due delle viti lunghe meno di 1cm la strip Shelly UV sul fianco nelle vicinanze del foro praticato precedentemente. Consiglio di fissare la strip con il cavo attaccato per verificare che il connettore non sforzi nella posizione di fissaggio:
Crea adesso i collegamenti elettrici partendo dalla spina volante a cui collegherai il cavo guainato 2×1 di lunghezza adeguata per arrivare dalla presa che vuoi usare allo sterilizzatore. Fora la scatola (tagliando la punta di un passacavo di gomma se usi quella linkata) e fai entrare il cavo nella scatola di derivazione.
All’interno usa i due morsetti e crea i collegamenti seguendo questo semplice schema:
Ora collega un Aqara Door & Window a protezione dell’apertura con il corpo nella parte inferiore e il magnete nel coperchio, come indicato nella seguente foto:
Se vuoi utilizzare un tag NFC puoi posizionarlo sul dorso del coperchio in modo che sia accessibile quando lo chiudi.
A questo punto non resta che inizializzare lo Shelly con la sua app o collegandosi al suo SSID, collaudare che accendendo lo Shelly la strip si accenda e chiudere la scatola di derivazione (lo sai vero che se la chiudi senza collaudare qualcosa andrà storto… 😀 )
Integrazione in Home Assistant
Realizzato il nostro sterilizzatore passiamo ora ad integrarlo creando le automazioni che ci servono per renderlo smart.
Presupposto di questo package è che lo Shelly che gestisce l’accensione della strip UV si chiami switch.sterilizzatore
, che l’Aqara si chiami binary_sensor.porta_sterilizzatore
e che tu abbia il mio package multinotify per le notifiche.
Il file zip scaricato contiene il file sterilizzatore.yaml
: posizionalo nella tua cartella config/packages (se non sai cosa sono leggi la pagina della documentazione ufficiale oppure questa sezione del blog di Vito Antonucci)
Configurazione Alexa
Se il tuo hardware è lo stesso e chiamato come specificato sopra dovresti già avere tutto funzionante. Resta solo da esporre ad Alexa lo script sterilizza
e configurare una routine per richiamarlo.
La prima operazione è semplicissima se utilizzi Nabu Casa per integrare Alexa (cosa che ti consiglio: 5$ al mese ben spesi per un ottimo servizio e aiuti il progetto di Home Assistant a rimanere vivo. E no… non me ne viene in tasca nulla…)
Se utilizzi l’UI per decidere quali device esporre vai in Impostazioni -> Home Assistant Cloud -> GESTIRE LE ENTITA’ (dal pannello Alexa) e verifica che l’entità sterilizza
sia selezionata.
Se invece utilizzi un package o un include yaml per definire cosa esporre ad Alexa (qui la documentazione alla voce Manual configuration) allora assicurati che lo script sterilizza
sia incluso nei criteri di inclusione e non sia presente in quelli di esclusione che hai definito.
Dopo un bel riavvio per far rilevare ad Alexa la nuova entità configuriamo una routine.
Apri la tua app Alexa dallo smartphone, vai in Altro, Routine, premi il tasto + in alto a destra, clicca su Quando questo accade, clicca Voce, e dopo “Alexa, ” scrivi sterilizza mascherine, poi premi Avanti in alto a destra.
Poi fai click su Aggiungi un’azione, scegli Casa intelligente, Controlla scenario e infine sterilizza.
Se hai fatto tutto correttamente dovresti vedere la routine fatta così:
Questo farà si che dicendo “Alexa, sterilizza mascherine” lo script “sterilizza” venga eseguito da Home Assistant.
Come funziona il package?
Come di consueto analizziamo il package per capire come funziona esattamente così da comprenderne i criteri e imparare a modificarlo secondo le nostre esigenze.
Partiamo dalle definizioni:
timer: sterilizzazione: name: sterilizzazione duration: '00:30:00' icon: mdi:shield-bug-outline input_number: sterilizzazione_min: name: Durata sterilizzazione (min) min: 1 max: 60 step: 1 mode: slider icon: mdi:timer-outline
Il timer, con durata 30 minuti ma in realtà configurabile, serve per tenere il conteggio del tempo di sterilizzazione e verrà avviato tramite lo script sterilizza
, messo in pausa e riavviato all’apertura e chiusura della porta fino al suo completamente quando verrà notificato il termine della sterilizzazione e spenta la luce UV.
L’input_number sterilizzazione_min
serve invece per poter scegliere tramite interfaccia utente il tempo desiderato di sterilizzazione (vedi capitolo in fondo).
Lo script sterilizza
script: sterilizza: description: Avvia ciclo di sterilizzazione per il tempo configurato sequence: - choose: - conditions: - condition: state entity_id: binary_sensor.porta_sterilizzatore state: 'off' sequence: - service: timer.start entity_id: timer.sterilizzazione data: duration: '{{ states("input_number.sterilizzazione_min") | int * 60 }}' - service: switch.turn_on entity_id: switch.sterilizzatore - service: script.multinotify data: message: 'Avvio sterilizzazione mascherine per {{states("input_number.sterilizzazione_min") | int}} minuti' alexa_target: media_player.pian_terreno alexa_volume_target: media_player.pian_terreno default: - service: switch.turn_off entity_id: switch.sterilizzatore - service: script.multinotify data: message: 'Non posso avviare lo sterilizzatore! Chiudi prima il coperchio!' alexa_target: media_player.pian_terreno alexa_volume_target: media_player.pian_terreno
La radice dello script è un choose che possiamo immaginare in questo caso come un if – else. La condizione è che lo stato di binary_sensor.porta_sterilizzatore
sia 'off'
. Se così procede nella prima sequenza in cui:
- avvia il timer
sterilizzazione
inizializzandolo al tempo espresso nell’input_number.sterilizzazione_min
ma trasformato in secondi - accende l’uscita dello Shelly chiamata
switch.sterilizzatore
- notifica tramite l’Echo Dot posizionato vicino allo sterilizzatore (personalizza il nome al tuo caso) con un annuncio come “Avvio sterilizzazione mascherine per 30 minuti”, a seconda di quanto era stato configurato il tempo nell’input_number.
Se invece la condizione è falsa, ovvero il binary_sensor.porta_sterilizzatore
è 'on'
, esegue la sequenza in default:
- spegne l’uscita dello Shelly che comanda la strip UV (serve nel caso sia richiamato dall’accensione direttamente dello Shelly da HA o dall’app Shelly, tramite un’automazione che vedremo)
- notifica all’Echo Dot posizionato vicino allo sterilizzatore (personalizza il nome al tuo caso) con un annuncio come “Non posso avviare lo sterilizzatore! Chiudi prima il coperchio!”
Le automazioni
# Accensione sterilizzatore da tag NFC - id: 45efb6ec-afe2-4b3e-ad66-e36d6c7d3804 alias: 'Sterilizzatore: accensione da NFC' description: "Alla lettura dell'NFC specifico attiva lo sterilizzatore" trigger: - platform: event event_type: tag_scanned event_data: device_id: bbe022fb618d4227 tag_id: 67b10970-5a9a-41af-b5b7-6dee41c943d5 condition: [] action: - service: script.sterilizza
La prima automazione serve per avviare la sterilizzazione tramite la lettura del tag NFC che avremo assegnato. Se non hai mai usato i tag NFC ti consiglio la lettura del post di Home Assistant.
Il trigger di lettura può avvenire indifferentemente tramite l’evento tag_scanned, come in questo codice, oppure tramite il seguente trigger come fa l’interfaccia utente (il risultato è identico):
- platform: tag tag_id: 67b10970-5a9a-41af-b5b7-6dee41c943d5
Ricorda anche di inserire sempre il valore
id:
con un valore univoco (io uso l’addon UUID Generator di VSCode) senza il quale il debug delle automazioni non verrebbe registrato.# Accensione sterilizzatore esterna - id: b368b4b6-0427-4a1c-b6de-60ed483dc2b2 alias: 'Sterilizzatore: accensione esterna' description: 'Accensione sterilizzatore da app Shelly o da Alexa usando direttamente lo switch, senza passare dallo script' trigger: - platform: state entity_id: switch.sterilizzatore to: 'on' condition: - condition: state entity_id: timer.sterilizzazione state: 'idle' action: - service: script.sterilizza
Questa automazione serve nel caso in cui si accenda direttamente lo Shelly che alimenta la strip UV, da Home Assistant o dall’esterno, se il cloud di Shelly è attivo, tramite l’app. (a tal proposito consiglio la lettura dell’articolo dedicato a quale integrazione usare per Shelly).
Determiniamo tramite la condizione che il timer sia idle, cioè inattivo. Se abbiamo fatto partire noi la sterilizzazione, infatti, il timer viene avviato PRIMA di attivare lo Shelly e quindi questa automazione troverà il timer già attivo, ignorandone le azioni.
Se invece il timer viene trovato inattivo all’attivazione dello Shelly significa che è stato attivato manualmente.
In questo caso viene quindi chiamato lo script sterilizza
che, a seconda dello stato della porta, fa partire il timer con coperchio chiuso o spegne lo Shelly con porta aperta, per poi pronunciare la notifica tramite Alexa.
Questo dovrebbe aver chiarito perchè spegnere lo Shelly dallo script nel caso di porta aperta 😉
# Apertura porta sterilizzatore durante il funzionamento - id: aae2f22c-0b08-401e-af28-fb33622b63ad alias: 'Sterilizzatore: porta aperta' description: Quando si apre la porta dello sterilizzatore mentre il ciclo è attivo trigger: - platform: state entity_id: binary_sensor.porta_sterilizzatore to: 'on' condition: - condition: state entity_id: switch.sterilizzatore state: 'on' action: - service: switch.turn_off entity_id: switch.sterilizzatore - service: timer.pause entity_id: timer.sterilizzazione - service: script.multinotify data: message: 'La sterilizzazione è stata interrotta per la tua sicurezza. Riprenderà alla chiusura del coperchio. Mancavano {{state_attr("timer.sterilizzazione", "remaining").split(":")[0] | int * 60 + state_attr("timer.sterilizzazione", "remaining").split(":")[1] | int }} minuti.' alexa_target: media_player.pian_terreno alexa_volume_target: media_player.pian_terreno
Cosa facciamo se qualcuno apre la porta dello sterilizzatore durante il funzionamento? Ci pensa questa automazione con trigger l’apertura e condizione la strip UV accesa.
Queste le azioni intraprese:
- Spegne la strip UV
- Mette in pausa il timer
- Pronuncia una notifica come “La sterilizzazione è stata interrotta per la tua sicurezza. Riprenderà alla chiusura del coperchio. Mancavano 13 minuti.“
Il template prende l’attributo remaining
dell’entità timer.sterilizzazione
che indica quanto tempo manca nel formato OO:MM (dove OO sono le ore e MM i minuti), ne fa lo split sul carattere “:” restituendo un array di due elementi (le ore e i minuti), le converte in intero e nel primo caso [0] moltiplica per 60 per trovare i minuti nel secondo caso [1] li somma come sono essendo già minuti. Il risultato è il numero di minuti totale mancante che verrà pronunciato.
# Chiusura porta quando la sterilizzazione è stata precedentemente interrotta - id: 5b9b25f2-5768-4b62-8af8-561a4af32a58 alias: 'Sterilizzatore: porta chiusa' description: Quando si chiude la porta dello sterilizzatore mentre il timer non è ancora a zero trigger: - platform: state entity_id: binary_sensor.porta_sterilizzatore to: 'off' condition: - condition: state entity_id: timer.sterilizzazione state: paused action: - service: switch.turn_on entity_id: switch.sterilizzatore - service: timer.start entity_id: timer.sterilizzazione - service: script.multinotify data: message: 'La sterilizzazione è stata ripresa. Mancano {{state_attr("timer.sterilizzazione", "remaining").split(":")[0] | int * 60 + state_attr("timer.sterilizzazione", "remaining").split(":")[1] | int }} minuti.' alexa_target: media_player.pian_terreno alexa_volume_target: media_player.pian_terreno
Questa è l’automazione complementare alla precedente: quando il coperchio viene chiuso dopo essere stato riaperto (lo determiniamo dalla condizione che vuole il timer in stato di pausa) vengono eseguite le seguenti azioni:
- Riaccensione della strip UV tramite lo Shelly
- Ripartenza del timer da dov’era rimasto
- Notifica sterilizzazione è ripresa pronunciando anche il numero di minuti rimanenti, con stessa tecnica spiegata precedentemetne.
# Fine sterilizzazione - id: c4d4f592-824e-448c-94c6-807933050077 alias: 'Sterilizzatore: fine' description: Quando il ciclo di sterilizzazione termina trigger: - platform: state entity_id: timer.sterilizzazione to: 'idle' condition: [] action: - service: switch.turn_off entity_id: switch.sterilizzatore - service: timer.finish entity_id: timer.sterilizzazione - service: script.multinotify data: message: 'La sterilizzazione è terminata. Puoi ora aprire il coperchio in sicurezza.' alexa_target: media_player.pian_terreno alexa_volume_target: media_player.pian_terreno
Non rimane che una automazione necessaria: la fine della sterilizzazione.
In questo caso il trigger è il termine del timer senza condizioni.
Le azioni intraprese saranno le seguenti:
- Spegnimento strip UV
- Termine del timer con ritorno allo stato idle (per sicurezza, non dovrebbe essere comunque necessario)
- Notifica che la sterilizzazione è terminata e si può aprire il coperchio in sicurezza.
Creazione della card per l’interfaccia grafica
Non è necessario per il funzionamento ma può essere utile per azionarne il funzionamento tramite app o verificare il tempo residuo creare una card per lo sterilizzatore UV smart. Il risultato sarà il seguente:
Per creare questa card modifica la plancia tramite i tre puntini in alto a destra, Modifica la plancia, tasto in basso a destra + AGGIUNGI SCHEDA, Manuale e incolla il seguente codice:
type: entities title: Sterilizzatore show_header_toggle: false entities: - entity: timer.sterilizzazione name: Timer - entity: switch.sterilizzatore name: In funzione - entity: binary_sensor.porta_sterilizzatore name: Coperchio
Oppure aggiungi il tipo di card entità e configurala in questo modo:
Avrai un’utile card di controllo e comando dello sterilizzatore, utile anche in caso di problemi per capire cosa stia accadendo.
Ti va di darmi una mano?
Il contenuto di questo sito è completamente gratuito senza pubblicità invasive e il fine non è certo guadagnare …ma mantenere un sito ha un costo. Se ti va di darmi una mano per sostenere le spese o ti va di sostenere questo progetto hai le seguenti modalità:
- Donazione con Paypal:
- Regalami un caffè su Buymeacoffee:
- Effettua i tuoi acquisti Amazon a partire da QUESTO LINK (o tramite i prodotti sotto)
- Acquistare i tuoi prodotti Shelly usando QUESTO LINK
- Effettuare i tuoi acquisti AliExpress usando QUESTO LINK