Hai mai pensato di controllare la tua casa da telefono o pc? Vuoi andare in vacanza ma tenere sotto controllo tutte le stanze o controllare se hai spento tutte le luci? Ecco una breve guida su come farlo a basso costo. In questo articolo imparerete come controllare 3 luci, monitorare la temperatura ambientale, e videosorvegliare le varie stanze (per questa guida ci limiteremo ad una stanza).
Ecco la lista di cosa abbiamo bisogno:
-Raspberry Pi Model B (acquistabile sul sito CONRAD qui);
Image credits: Le Journal du Geek
-SD Card basta una da 4 gb su cui caricheremo il s.o. e tutti i file necessari;
-Hub USB per alimentare il Raspberry se non avete un alimentatore esterno e per connettere quante webcam vorrete (io ho utilizzato questo D-Link sovralimentato così da non avere problemi di alimentazione con il raspberry e le webcam, ma questo va benissimo se poi alimenterete l’hub e quindi per alimentare le webcam non dovrà utilizzare la corrente del raspberry);
Image credits: Google Immages
-Se non avete un router dove collegare il raspberry via ethernet vi servirà una chiavetta Wi-Fi per fare da hotspot così da avere comunque la possibilità di gestirlo anche senza ADSL non appena arrivate a casa (acquistabile sempre sul sito CONRAD qui);
-Se volete prima fare delle prove avete bisogno dello starter kit (io ho iniziato così)(acquistabile sul sito CONRAD qui);
-Quando vorrete passare dalla millefori per fare test alle luci vere e proprie dovrete utilizzare le schede di espansione relè per fare i collegamenti tra raspberry e luci (ovviamente più collegamenti relè avete nell’espansione più luci potrete controllare; quì un esempio con 4 relè su CONRAD) ovviamente si puo’ spaziare dalle luci alla porta basculante del garage senza problemi, il codice rimane invariato, si dovra’ solo cambiare dove attaccare il rele’;
-Quante webcam vorrete, potete trovare una lista delle compatibili quì senza istallazioni di particolari driver, io ho utilizzato una Logitech C270 HD 720p con microfono integrato e potete trovarla quì).
Image credits: MakerMark
E dopo aver visto insieme tutto ciò che serve, possiamo
iniziare:
1) Installiamo il sistema operativi nel nostro Raspberry Pi:
nel nostro caso utilizziamo Raspbian e possiamo scricarlo da quì.
a. Una volta scaricato dovrete preparare la SD con win32diskimager per windows (selezionando la iso di raspbian, la sd di destinazione e cliccando su write) o con il comando dd per linux.
2) Una volta inserita la sd nel Raspberry e connesso l’alimentatore si accenderà il raspberry
e collegatolo ad uno schermo e una tastiera o tramite terminale ssh (se abbiamo un router e avremo collegato il raspberry via ethernet) ci connetteremo ed installeremo i pacchetti di cui avremo bisogno.
a. Collegarsi via ssh al raspberry: trovare l’indirizzo ip del raspberry collegato al router (io utilizzo advanced ip scanner per trovare gli ip) e tramite putty collegarsi a quell’ip utilizzando la porta 22.
Utente: pi
Password: raspberry
3) Primo Avvio – Configurazioni Opzionali:
a. Cambio password di sistema
i. sudo passwd pi (poi vi chiederà due volte la nuova password)
b. Configurazioni Varie:
i. sudo raspi-config (qui potrete cambiare l’hostname, la porta per il collegamento ssh, lingua del sistema e tanto altro)
c. Connettere il Wi-Fi tramite GUI sul programma di gestione di rete (Manage Networks)
4) Installiamo i pacchetti di cui abbiamo bisogno:
a. Aggiorniamo il S.O.
sudo apt-get update
sudo apt-get upgrade
b. Installiamo i pacchetti di cui abbiamo bisogno (il codice è scritto in python quindi avete bisogno delle librerie python per le GPIO e potete trovare una guida semplice qui Step 4, ciò non toglie che potete riscriverlo nel linguaggio che preferite):
sudo apt-get intall lighttpd motion python
Inoltre per il trasferimento dei file di codice che scriverete vi conviene utilizzare un server ftp qui potete trovare una guida.
5) Breve introduzione alle GPIO del Raspberry e colleghiamo i led per la nostra prova:
Image credits: Jeena.net
Come potete vedere dobbiamo controllare il polo positivo + in una delle GPIO disponibili del Raspberry. Nell’esempio in figura potremmo controllare l’accensione e lo spegnimento del led attraverso il pin 18. Nel nostro caso per controllare 3 luci e nell’esempio del codice che vedremmo tra poco verranno utilizzate le porte 17, 18 e 21. Per semplificare i collegamenti vi conviene collegare il tutto su una millefori.
Image credits: MakerMark
Una volta effettuati i collegamenti led resistenza e pin Raspberry ci occupiamo di preparare i file che gestiranno l’accensione e lo spegnimento dei led. Ecco il file per l’accensione:
import os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM)#Imposto il tipo di pin a millefori GPIO.setup(XX,GPIO.OUT)#imposto il pin XX in modalità OUTPUT GPIO.output(XX,True)#imposto come acceso l’output sul pin XX
Dove XX deve essere sostituito dalla numero della GPIO utilizzata mentre per lo spegnimento ecco il codice:
import os import RPi.GPIO as GPIO GPIO.setwarnings(False)#Non genero eccezioni per modifica di pin GPIO.setmode(GPIO.BCM) GPIO.setup(XX,GPIO.IN)#Reimposto lo stato iniziale del pin
Ho impostato il codice in modo da avere una certa organizzazione nello specifico avrete 2 file uno per l’accensione e uno per lo spegnimento di ogni luce e divisioni per cartelle ovvero potete creare una cartella con i file per ogni stanza che vorrete controllare.
6) Ora Passiamo al controllo e gestione della temperatura
Per questo esempio utilizzeremo il tutto in locale mentre per poterlo gestire nella vostra casa dovete avere un termostato abilitato alla gestione anche da fonti esterne o altrimenti avrete bisogno di un sensore per la temperatura per il raspberry e dei famosi relè di prima per poter accendere e spegnere la caldaia. In questa guida faremo la gestione in locale tramite un file di log nel caso di riavvio del sistema così da riprendere la cofigurazione nel momento del riavvio. Nello snippet di codice potete vedere l’aumento e la diminuzione della temperatura tramite bottoni e l’accensione di led verdi, gialli o rossi in base alla temperatura rilevata (Purtroppo non sono riuscito poi a concludere con il sensore di temperatura e collegamento al termostato per mancanza di tempo ma sicuramente ci sarà una versione 1.1 che permetterà qualcosa in più, intanto scusatemi per il disagio:
GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #PUD_DOWN = posizione della resistenza nel bottone GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #Bottone utilizzato per l’uscita dal sistema GPIO.setup(18,GPIO.OUT, initial = 0) GPIO.setup(27,GPIO.OUT, initial = 0) GPIO.setup(17,GPIO.OUT, initial = 0) try: in_file = open("temp","r") temp = int(in_file.readline()) in_file.close() print ("La temperatura di avvio è:" + str(temp)+"°C") except IOError: print ("File non esistente temperatura default a 0") temp=0 not_pressed = True while not_pressed: if GPIO.input(24): not_pressed=False if GPIO.input(4): temp=temp+1 time.sleep(0.3) print (temp) elif GPIO.input(23): temp=temp-1 time.sleep(0.3) print (temp) if temp<=15: GPIO.output(27,True)#verde GPIO.output(18,False) GPIO.output(17,False) if (temp >=16 and temp <=35): GPIO.output(18,True)#giallo GPIO.output(27,False) GPIO.output(17,False) if temp >= 36: GPIO.output(17,True)#rosso GPIO.output(18,False) GPIO.output(27,False) time.sleep(0.3) print("Ciao Ciao, la temperatura è: " + str(temp)+"°C") out_file = open("temp","w") out_file.write(str(temp)) out_file.close() GPIO.cleanup()
7) A questo punto passiamo a gestire la videosorveglianza, sicuramente punto più semplice:
Una volta installato motion potrete fare tutte le configurazioni che volete come ad esempio inviare le immagini direttamente via mail o caricarle su un server ftp e chi più ne ha più ne metta, per la configurazione iniziale vi rimando a questa guida anche se una volta installato il pacchetto è pronto all’uso.
Image credits: MakerMark
In questa immagine potete vedere la webcam collegata all’hub usb, il raspberry alimentato (tramite il cavo bianco su una porta da 2A dell’hub usb e infine l’hub usb collegato ad una delle due porte usb del Raspberry così la webcam sarà alimentata direttamente dall’hub e il raspberry ugualmente alimentato da una porta del hub evitando così sbalzi di corrente dovuti all’assorbimento diretto delle periferiche)
8) Configurazioni Finali:
Una volta effettuato tutto ciò detto sopra passiamo alla configurazione della gestione online:
Tutti i file python, html o php verranno inseriti in /var/www così da essere reperibili tramite portale internet. Nello specifico avremo dei bottoni nella pagina html per avviare i file python precedentemente scritti. Nello snippet di codice potete vedere all’interno del tag head i comandi php che faranno eseguire i file python mentre nella parte body i bottoni collegati a ciò che è stato dichiarato in php. Come si può notare dal codice php ho gerarchizzato i file python per stanza mentre vi è un terzo bottone per la visione delle webcam, di seguito trovereto lo snippet di codice.
Gestione delle luci:
<html> <head> <?php if (isset($_POST['CameraON'])) { exec("sudo python3 Camera/on.py"); } if (isset($_POST['CameraOFF'])) { exec("sudo python3 Camera/off.py"); } ?> </head> <body> <input type="button" value="WebCam" onclick="location.href='webcam.html';"> <form method="post"> <table> <tbody> <tr> <<button name="CameraON">Accendi Luce Camera </button></td> <<button name="CameraOFF">Spegni Luce Camera </button></td> </tr> </tbody> </table> </form> </body> </html>
WebCam:
In questo caso basta inserire l’indirizzo ip del raspberry o altrimenti inserire l’hostname per poter visionare lo streaming webcam altrimenti si può collegare con VLC al flusso di rete utilizzando l’ipdelraspberry:8081. Vi è poi un bottone per tornare alla home di gestione delle luci.
<html> <body> <img class="decoded" src="http://IPDELRASPBERRY:8081/" ></img> <input type="button" value="Premi per Home" onclick="location.href='index.php';"> </body> </html>
Image credits: MakerMark
So che è spartana come grafica in quanto non ho ancora avuto abbastanza tempo per gestirla ma come potete immaginare si può lavorare per rendere la grafica responsive e gestire il tutto anche da smartphone (anche se è già possibile pur avendo la grafica scarna come da pc).
Tramite ssh ecco cosa vi restituirà il terminale:
Image credits: MakerMark
Image credits: MakerMark
Per questa versione del progetto siamo arrivati alla conclusione, vi ringrazio per aver seguito la lunghissima guida e spero vi sia piaciuta. Spero in vostri commenti e critiche per aggiornare e magari creare una nuova versione migliorata…
In allegato potrete trovare un backup della cartella var/www del mio Raspberry con i codici pronti all’uso, inoltre qui potete scaricare la distribuzione di Raspbian correttamente configurata e funzionante (per montarla nel vostro raspberry potrete direttamente farlo come nella distribuzione di raspbian che scaricate dal sito con l’utilizzo di Win32DiskImager).
Grazie a tutti, potete trovare in allegato il sorgente completo
Marco Mancini
Utile il progetto e ben scritto l’articolo. Ottimo lavoro.
Avrei voglia di migliorarlo un po’, magari aggiungendo anche solo il bluetooth. Che ne dici?
Ciao Giorgio, innanzitutto grazie mille per i complimenti 🙂 …Certo che puoi/si può migliorare in qualsiasi modo, io sono aperto a tutto…come e cosa pensavi di fare con il bluetooth??
Mi sa tanto che qualcuno ha avuto le stesse idee di ivan 🙂
Bel lavoro.
Hai ragione, c’è solo una piccola differenza 🙂
Presto riprenderò a lavorare sulla seconda versione 😉
Ciao Ivan… magari se hai voglia si può fare qualcosa insieme…avevo visto il tuo progetto non mi ricordo dove però… 🙁 … Cmq se per caso hai voglia di collaborare facciamo una seconda versione in 2 🙂
Da neofita ho seguito passo passo passo l’articolo …. mi ritrovo un file nella cartella var/www/
luci-willy.py ma come posso eseguirlo ?
P.S. Scusate ma per ora sono propio una capra !!! Spero di migliorare …Grazie a chi vorrà rispondermi .
Ciao Willy puoi eseguirlo digitando a terminale:” sudo python3 /var/www/luci-willy.py” e dando invio 🙂
Ho provato e ringrazio, per la sollecitudine ma ottengo questo risultato :
root@willyraspberry:~# python/var/www/luci-willy.py
-bash: python/var/www/luci-willy.py: No such file or directory
root@willyraspberry:~# python3 /var/www/luci-willy.py
File “/var/www/luci-willy.py”, line 1
^
SyntaxError: invalid syntax
Di seguito allego il contenuto del file in questione !!! Spero che mi possa dare una dritta per ulteriori prove!!!
<Accendi Luce Camera
<Spegni Luce Camera
</html
Ringrazio ancora per la disponibilità e saluto cordialmente.
è sbagliato il comando che lanci non devi scrivere “python/var/www/luci-willy.py” ma “python3 /var/www/luci-willy.py” sempre se resti connesso come root come stai facendo ora altrimenti prima di python3 devi mettere anche sudo, nella seconda istruzione che lanci invece fai tutto corretto ma il codice che c’è scritto non è né python né altro… dentro il file python devi modificare lo stato delle GPIO del raspberrry nello specifico devi vedere i file scritti nel passo 5 di poche righe dove fai GPIO…. True
Ciao Marco, complimenti per ciò che hai fatto.
Ho da poco acquistato il raspberry e con le diverse guide che ci sono, si può fare davvero di tutto. Mi sono imbattuto in questa guida che ho letto tutta di un fiato.
Ti posso chiedere una cosa? anzi due: di ripristinare il link riguardante il settaggio di iniziale di motion. Poi come hai scritto, si può fare di tutto con motion come nviare il filmato ad una determinata parte etc etc, c’è una guida anche per questo, in modo da capir bene cosa fare
In allegato dove??
Allegato OK. Grazie della segnalazione.
salve, ma continuo a non riuscire a vedere il link per la configurazione di motion
Per cortesia si potrebbe avere il file immagine della SD …. comleto per sperimentare magari per provare aggiungere altre uscite … non riesco a far funzioare come descritto !!!
Grazie per la pazienza
Un Saluto da Willy
Buonasera,
Avrei un’altra domanda se qualcuno legge… Sono riuscito a accendere i led lanciando i comandi da terminalw SSH tramite putty …. ma non riesco a capire come posso lanciare il file per poter accedere tramite pc dal browser… ???
Qualcuno mi può aiutare ??
Rigrazio anticipatamente …
Ciao Willy, in agosto rispondiamo un po’ meno frequentemente…
Comunque ho segnalato le tue richieste all’autore, appena possibile saprà forniti le indicazioni necessarie 🙂
Spero in un progetto per Arduino Uno
Salve. Per Arduino uno trovi in giro tanti progetti di domotica a basso costo. Qualcuno piu complesso qualcuno piu semplice.
Ciao. Ho provato ad alimentare il Raspberry conl’hub USB descritto nell’articolo ma la scheda non parte (o meglio parte e si spegne). E’ la scheda che assorbe troppa corrente o ho sbagliato qualcosa?
Grazie per l’attenzione
Ciao, probabile… se l’hub esce con l’alimentazione standard a 0,5 A è probabile che il raspberry non si accenda nemmeno… l’hub utilizzato alimenta a 2.1 A e necessità di un suo alimentatore
L’hub è alimentato con il suo alimentatore da 3A. Secondo il manualetto con il led acceso verde dovrebbe erogare 1.2A sulle prese “rinforzate” ma lo stesso il raspberry non parte. Hai altri suggerimenti? Grazie
Sei sicuro di aver flashato la sd nel modo giusto allora??? non vorrei ci sia un errore nella sd…
Non credo. Se alimentata con il suo alimentatore la raspberry funziona. Non so cosa pensare. Volevo evitare il doppio alimentatore (raspberry e hub). Ciao
Certo quindi allora non basta l’alimentazione dell’hub che hai… prova magari un altro… non so che altro dirti
Ok grazie mille
Ciao, questo progetto mi interessa 🙂 ho una domanda: é possibile acquistare delle telecamere wifi, in modo che ogni telecamera viene alimentata da una stanza diversa, e ognuni telecamera invia le immagini al raspberry tramite il WiFi?
Premetto di non essere ancora riuscito a far funzionare la telecamera … ma vorrei sapere se è possibile far cambiare colore ai pulsanti che attivano gli otto relais che attualmente ho collegato… agiungere relais e adttare la tabella non ho avuto problemi ma fare i pulsanti con colori diversi e sopratutto che cambino colore a seconda dello stato non ci sono riuscito !!! quallcuno può darmi una spintarella per capire dove dove modificare ?? Saluti e grazie anticipatamente ,,
Salve, dato che l articolo parla di controllare casa da remoto e quindi anche se si è in vacanza, non trovo dove viene descritto come collegarsi da fuori la wifi di casa al raspberry, so che per fare ciò ci vuole un settaggio di port forwarding nel router di casa, potete farmi sapere? Grazie mille. Saluti