RaspberryPi, le basi: Allarme di casa con PIR e IFTTT #12


Informatica / mercoledì, Dicembre 30th, 2020

Bentornato alla dodicesima puntata della rubrica “RaspberryPi, le basi“. Che ne dici di creare un antifurto domestico con avviso su smartphone, usando un sensore PIRquattordici righe di codice?

Nelle puntate precedenti

  1. RaspberryPi, le basi: Cos’è e cosa non è. #1
  2. RaspberryPi, le basi: Sistemi operativi ed installazione. #2
  3. RaspberryPi, le basi: post installazione. #3
  4. RaspberryPi, le basi: i software. #4
  5. RaspberryPi, le basi: Comandi e file utili #5
  6. RaspberryPi, le basi: accesso remoto al Desktop. #6
  7. RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7
  8. RaspberryPi, le basi: le porte GPIO. #8
  9. RaspberryPi, le basi: pulsanti e led. #9
  10. RaspberryPi, le basi: Robot e Smartphone, con BlueDot. #10
  11. Raspberry Pi, le basi: DHT11 umidità e temperatura. #11

Cos’è il sensore PIR

sensore pir

Il PIR, letteralmente Passive InfraRed sensor (Sensore a infrarossi passivo), è un dispositivo elettronico che misura i raggi infrarossi (IR) irradiati dagli oggetti nel suo campo visivo. È infatti composto da un elemento sensibile capace di rilevare una fonte di calore in movimento e trasformarla in un segnale elettrico. Questa caratteristica lo rende particolarmente utile come sensore di movimento.

Requisiti per l’antifurto

Un utilizzo molto richiesto con RaspberryPi è la sorveglianza domestica, dalla videosorveglianza con motion e MotionEyeOs, a qualcosa di più personalizzato. Volevo illustrarvi l’uso del sensore di movimento PIR, ma con un tocco in più per renderlo più interessante.

Cosa ci servirà:

  • RaspberryPi con sistema operativo installato. Se non sai come fare, torna alle guide precedenti.
  • Sensore PIR
  • Librerie GPIOZERO
  • Account IFTTT
  • Smartphone
  • solo 3 fili

Collegamenti sensore PIR

I sensori in commercio sembrano avere la stessa forma, ma a volte hanno i pin posizionati in modo diverso, quindi prima di collegarli verifica il datasheet.

Tips: se segnala sempre movimento, hai invertito GND con 5V

Nel mio caso, partendo da sinistra (vedi foto) avrò il cavo giallo che andrà al pin 5v, il verde dove passeranno i dati che vanno ad un pin a mia scelta (25), ed il GND.

collegamento sensore pirNel caso non ti ricordassi la posizone dei pin GPIO, sarà sufficiente eseguire il comando pinout da shell

pinout raspberrypi

In questo esempio, per semplificare, ho pensato di inviare un messaggio su smartphone in caso di rilevamento di movimento, ma nulla vieta di collegare relè per attivare le luci di casa, sirene o altre tecnologie.

Configurare IFTTT

IFTTT è un servizio online in grado di unire azioni tra vari servizi web, gratuito ed estremamente facile da usare ed ampliare. In sintesi l’idea è questa, SE succede qualcosa ALLORA fai qualcosa.

Un esempio è SE l’RSS del blog EnricoSartori.it segnala un nuovo post, ALLORA inviami un email.

Nel nostro caso, tramite RaspberryPi possiamo sfruttare il servizio chiamato Webhooks, in grado di reagire ad una richiesta web POST o GET protetta dalla classica chiave univoca per utente.

Webhooks ed url POST e GET

Registriamoci sul sito IFTTT, io per comodità uso Google. Dalla home selezionamo la voce Search , cerchiamo la voce Webhooks sotto il tab services.

ifttt weboohks

Attenzione ora, dovremmo selezionare in alto a destra la voce Documentation che ci fornirà i link da usare personalizzati, con la possibilità di cambiare la voce {event}.

Scriviamo già come {event} , la parola, movimento e salviamoci il link per la parte succesiva. Come vedi se preferisci bash, con un semplice curl potrai eseguire degli eventi scegliendo tra i molti servizi disponibili.

Creazione dell’applet

Premendo l’icona del profilo, nel menù a comparsa, troveremo la voce “create” , dove ci verrà richiesto quando avviarla IF e come reagire THEN.

Come opzione IF cerchiamo Webhooks, e come Event name scriviamo movimento (puoi usare quello che preferisci, in questo tutorial avevo poca fantasia coi nomi…) .

Andiamo nella voce THEN e scegliamo cosa vogliamo fargli fare una volta rilevato il movimento, ho scelto Notifications perché una notifica sullo smartphone la leggiamo sempre, ma per sfruttarla sarà necessaria l’app IFTTT. Nulla vieta di postare la foto del ladro su Twitter, ma partiamo in modo semplice, poi mi raccomando guarda tutte le possibilità offerte da IFTTT.

ifttt notification

Nella successiva schermata, potremmo personalizzare la notifica con messaggi, url e foto, magari catturate da una webcam collegata al RaspberryPi.

Installiamo l’app IFTTT e verifichiamo che abbia i permessi per eseguire le notifiche.

Comandare il sensore di movimento PI

E’ stata lunga, ma ne è valsa la pena, ora torniamo a giocare col nostro RaspberryPi, nel quale scriveremo un semplice script python3 da avviare in automatico.

Verifichiamo di avere le librerie GpioZero installate ed aggiornate.

apt update ; sudo apt install -y python3-gpiozero

Io di norma lavoro tramite ssh, quindi per creare un file python basterà usare il comando.

nano antifurto.py

dove potremmo copiare i nostri comandi che analizzaremo in seguito.

from gpiozero import MotionSensor
from signal import pause
import time 
import requests

IFTTT_URL = "https://maker.ifttt.com/trigger/movimento/with/key/ergfjebfefrerefeghegheg"
IFTTT_MESSAGGIO = "Allarme Movimento"

pir = MotionSensor(25)

while True:
  if pir.motion_detected:
    ORA = time.strftime('%a %H:%M:%S')
    print(ORA)
    requests.post(IFTTT_URL, data = IFTTT_MESSAGGIO)
    time.sleep(10)
pause()
  1. importiamo il sensore PIR dalla libreria Gpiozero.
  2. importiamo la pausa.
  3. importiamo time per l’ora corrente.
  4. importiamo requests per le richieste POST e GET.
  5. IFTTT_URL sarà il link copiato prima da webhooks.
  6. IFTTT_MESSAGGIO semplicemente il testo da inviare.
  7. Creiamo l’oggetto pir collegato al pin 25 (nel mio caso).
  8. Iniziamo il ciclo che scansionerà i valori del sensore PIR, il codice seguente verrà eseguito solo se verrà rilevato movimento.
  9. stampiamo nella shell l’ora del rilevamento, vi consiglio di creare dei log, magari grazie a IFTTT su un file google drive.
  10. inviamo la richiesta ai server di IFTTT che eseguiranno le azioni definita in THEN .
  11. diamogli un attimo di tregua, magari più alta di 10 millisecondi, altrimenti lo smartphone esploderà di notifiche. Fate delle prove.

Ovviamente questo è un script di esempio, che dovrete perfezionare a vostro piacimento.

Ora possiamo dire di avere un sistema antifurto pronto e funzionante, che ne dite? Io lo integrerei con MotionEye inviando le registrazioni su server remoti e foto via email…

Spero vi stiate divertendo con la mia rubrica “RaspberryPi, le basi“, ditemi cosa ne pensate nei commenti!

Materiale utilizzato

Ci vediamo alla prossima puntata di RaspberryPi, le basi !