Nell’articolo di oggi vedremo come creare un sistema che ti permette di notificare qualsiasi movimento che rileva la Raspberry Pi Camera.
Per questo scopo utilizzeremo un bot telegram.
Secondo la definizione classica data al termine Bot (abbreviazione di robot), esso è un codice di programmazione che permette di automatizzare un servizio e di dialogare con utenti reali, tramite chat, senza che dall’altro lato ci sia un essere umano. Un Bot, infatti, permette di programmare input di messaggi che possono aiutare coloro che fanno parte di questi gruppi o canali.
I materiali da utilizzare sono i seguenti:
- Raspberry Pi
- Pi camera
- Tastiera
- Mouse
- Monitor
- Telegram
- Connessione a internet
INSTALLAZIONI PRELIMINARI
ATTENZIONE: questa procedura è valida solo per la Raspberry Pi Camera, non funzionerà con una webcam USB
Apri il terminale.
Per sicurezza effettuiamo un update:
1 2 |
sudo apt-get update sudo apt-get upgrade |
Per l’implementazione del bot occorre una specifica libreria. Per installare questa libreria basta eseguire il comando.
pip install telepot
INSTALLAZIONE RASPBERRY PI CAMERA
Ho scritto una guida approfondito a riguardo, per leggerla potete utilizzare il seguente link: Come installare e configurare la Raspberry Pi Camera
INSTALLAZIONE INTERFACCIA WEB
Ho scritto una guida approfondito a riguardo, per leggerla potete utilizzare il seguente link: Come creare interfaccia web con la Raspberry Pi Camera
IMPOSTA MODALITA’ DI RILEVAMENTO SU MONITOR
Andiamo su “Camera Settings”
Andiamo su Motion detect mode e impostiamo su monitor
CREAZIONE BOT
Il primo passo consiste nell’aprire l’applicazione telegram. Una volta aperta cerchiamo “BotFather” tramite la funzione cerca cliccando sull’apposita lente di ingrandimento.
“BotFather” è un bot che permette di creare altri bot.
Avviamo il bot scrivendo “/start“, poi premiamo invio.
Per creare un nuovo bot digitiamo “/newbot”.
BotFather ci chiederà di assegnare un nome al nostro nuovo Bot, basta digitare un qualsiasi nome e poi premere Invio.
Dobbiamo anche inserire un username che lo renderà riconoscibile pubblicamente. Username deve terminare in “Bot” o ” _bot”.
In seguito alla assegnazione del nome e dell’username BotFather ci comunicherà informazioni importanti in seguito per compilare il codice per il funzionamento del sensore e dell’invio dati. ATTENZIONE: QUESTE INFOMAZIONI LE DOVREMMO TENERE SOLO PER NOI. La prima parte riguarda il percorso per trovare il nostro bot. La seconda è la API che sarà utilizzato nel nostro codice.
Per recuperare il chat_id bisogna andare al link https://api.telegram.org/bot<TOKEN>/getUpdates, dove al posto di <TOKEN> dovete inserire il TOKEN di accesso alle API http del bot.
A questo punto mandate un messaggio nella chat ed aggiornate la pagina del link. In questa pagina vedrete popolarsi un file JSON in cui vi viene mostrato il CHAT_ID nella chiave “chat” e nel campo “id” (come nello screenshot sottostante):
TEST FUNZIONAMENTO BOT
Ora che possiedi il Token API e chatid possiamo ricevere un messaggio dal nostro bot. Digitiamo nel terminale quanto segue (sostituiamo dove è opportuno il token e il chatid).
1 |
curl -s -X POST https://api.telegram.org/botINSERISCITOKEN/sendMessage -d text="A message from your bot" -d chat_id=INSERISCICHATID |
Apri telegram e verifica che ti è arrivato il messaggio.
SCRIPT BASH
Dobbiamo creare due script per inviarti notifiche quando viene rilevato un movimento.
PASSO 1
Creiamo un nuovo file di configurazione per memorizzare i vari parametri di Telegram necessari per lo script.
Inserisci questo comando nel terminale:
1 |
sudo nano /var/www/html/macros/configfile.cfg |
Inserisci questo codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/bin/bash #Camera details cameraName="picamera" #Telegram details tokenurl="https://api.telegram.org/botINSERISCITOKEN" chatid="INSERISCICHATID" #Folder paths webfolder="/var/www/html" nomsg="/home/pi/nomsgfile.lck" logfile="${webfolder}/scheduleLog.txt" curlout="${webfolder}/curlout.txt" #Keeps a log of the curl output for troubleshooting #Logging function logging () { #logging yes true "This is my error message" #$1 yes/no - send telegram msg #$2 true/false - disable audible notification or pop-up msg on receiving device ext="$1" notification="$2" msg="$3" NOW="`date +"-%Y/%m/%d %H:%M:%S-"`" echo "$msg" echo "${NOW} ${msg}" >> $logfile if [ $ext == "yes" ]; then curl -s \ -X POST \ ${tokenurl}/sendMessage \ -d text="$msg" \ -d disable_notification=${notification} \ -d chat_id=${chatid} >> ${curlout} & fi |
Crea un nuovo file che verrà eseguito ogni volta che viene rilevato un movimento.
Digita il seguente comando:
1 |
sudo nano /var/www/html/macros/motion_event.sh |
Inserisci il seguente codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
while : do #!/bin/bash . /var/www/html/macros/configfile.cfg #If you wish to disable notifications, create a file using "touch /home/pi/nomsgfile.lck" if [ -f $nomsg ]; then logging no true "Message alerting has been disabled, exiting..." exit fi #Copy the low res snapshot image from memory to a file cp /dev/shm/mjpeg/cam.jpg ${webfolder}/cam_new.jpg #On motion detection start (parameter is 1 for on, 0 for off) fileparams=$1 if [ $fileparams -eq 1 ] then #Send both a single text message and a photo because sometimes the photo message times out if the Telegram servers are busy logging yes false "Motion detected from ${cameraName}" curl -s -X POST \ ${tokenurl}/sendPhoto \ -F chat_id=${chatid} \ -F photo="@${webfolder}/cam_new.jpg" \ -F caption="Motion detected on ${cameraName}" >> ${curlout} & fi sleep 1m done |
Ora dobbiamo eseguire lo script motion_event.sh e cambiare alcune proprietà con i seguenti comandi:
1 2 3 |
sudo chmod +x /var/www/html/macros/motion_event.sh sudo chown www-data:www-data /var/www/html/macros/motion_event.sh sudo chown www-data:www-data /var/www/html/macros/configfile.cfg |
Ora siamo pronti ad utilizzare il BOT.
Accediamo sulla nostra interfaccia web.
TEST
Attiviamo la modalità motion detection
Avviamo il bot telegram
Ed ecco che se ci muoviamo arriverà un messaggio.
Ed ecco che abbiamo creato il nostro bot telegram tramite il quale riceveremo notifiche se ci sono movimenti intorno della picamera.
Voglio ringraziare AZ-Delivery per avermi dato la possibilità di avere la rpicam.
Preferireste aspettare 8 settimane per l’autoimportazione dalla Cina, incerti se le merci arriveranno mai, le terre alla dogana o semplicemente saranno rispedite indietro? O acquistare in Germania ad un prezzo totalmente gonfiato da un rivenditore specializzato? Preferisci acquistare il prodotto a buon mercato in Cina senza essere sicuro di quale versione del prodotto riceverai, o ordinarlo dal rivenditore tedesco incl. istruzioni e scheda dati?
Nel seguente link è presente il sito ufficiale AZdelivery
Per chi fosse interessato può acquistare la rpicam nel seguente link.
Iscriviti ai nostri gruppi Telegram
Link utili