Home
Accesso / Registrazione
 di 

Vorresti controllare casa anche da lontano? Ecco come farlo in un click, domotica a basso costo.

Immagine Principale

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 

AllegatoDimensione
SorgenteRaspberry.rar2.44 KB

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Giorgio B.

Utile il progetto e ben

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?

ritratto di Marco.Mancini

Grazie, info

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??

ritratto di Boris L.

Mi sa tanto che qualcuno ha

Mi sa tanto che qualcuno ha avuto le stesse idee di ivan :)
Bel lavoro.

ritratto di Ivan Scordato

Hai ragione, c'è solo una

Hai ragione, c'è solo una piccola differenza :)
Presto riprenderò a lavorare sulla seconda versione ;)

ritratto di Marco.Mancini

Teniamoci in contatto

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 :)

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti