Videosorveglianza con Raspberry Pi – Parte quarta

closeQuesto articolo è stato pubblicato 10 anni 5 mesi 3 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi.

Per chi si fosse perso le puntate precedenti: Parte prima, Parte seconda, Parte terza

Il nostro sistema funziona già bene, abbiamo impostato la struttura principale, adesso ci servono i ricami.

Se va via la corrente, come facciamo a farlo riprendere in automatico e avvisarci di questo? Ci viene in aiuto un nuovo pezzetto di codice, che ho chiamato “avvia_reboot.py”

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
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python2.7
import tweepy
import sys
import datetime
import time
import os
import requests
import json
 
# qualche costante
file_di_log = "/home/pi/tweepy/motion.log" # file di log del sistema di controllo
utente_dm = "@tuoutente" # utente a cui mandare i DM (magari poi saranno gestibili diversi utenti)
 
# Chiavi e autenticazione per Twitter
consumer_key = 'xxx'
consumer_secret = 'xxx'
access_token = 'xxx'
access_token_secret = 'xxx'
 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
 
api = tweepy.API(auth)
 
# apro il file di log in append
log = open (file_di_log, "a")
 
# memorizzo il timestamp attuale (cosi' lo metto nei tweet ed evito il blocco dei doppioni)
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
 
# avvio motion
os.system("/home/pi/motion-mmal/motion")
 
# recupero l'indirizzo IP pubblico assegnato al router, non si sa mai
req = requests.get("http://httpbin.org/ip")
if req.status_code == 200:
    text = json.loads(req.text)
    ip = text['origin']
 
api.send_direct_message(utente_dm,text="Reboot! Motion Attivato! Indirizzo IP pubblico: " + ip + " - " + st)
 
log.write(st + " - Motion attivato dopo reboot \n")
 
# chiudo il file di log
log.close()

Il codice è tutto commentato, direi che non dovrebbe essere di grande difficoltà. In parole povere quando viene eseguito il programma questo avvia il processo “motion”, recupera l’indirizzo IP pubblico assegnato al router (è una comodità e potrebbe sempre tornare utile nel caso in cui si volesse accedere da remoto alla propria rete, sempre se avete fatto le dovute configurazioni) e infine avvisa con un DM che il servizio è attivo e qual è l’IP pubblico nuovo.

Introduciamo qui il log delle attività del sistema. Perché un file di log? Perché è bene sapere cosa ha fatto il sistema per capire ed andare a trovare errori durante gli sviluppi e l’attività. Da ora in poi tutti i programmi scriveranno le cose essenziali nel file di log nel formato [dataora] – [evento]. Vi ricordo che con il comando

1
tail [nomefile] -f

potete vedere in tempo reale cosa viene scritto nel file di log. Questa visualizzazione occupa la console, aprite una sessione aggiuntiva sul Raspberry. Il file non si chiama “motion” o un nome che contenga “motion” perché nel caso in cui vogliate controllare il funzionamento visualizzando il file di log con il comando “tail”, quando cercheremo di scoprire se “motion” è attivo, il nome del file di log potrebbe falsare questa attività.

Questo programma per avviare il motion controller però deve essere eseguito dal Raspberry in automatico al riavvio del sistema, come si fa?

Dalla riga dei comandi scrivete

1
crontab -e

Si apre l’editor di testo “nano” con le impostazioni delle operazioni pianificate del processo cron, lo useremo ancora dopo questa parte. Andate al fondo ed aggiungere queste righe

1
2
# avvio il motion control all'avvio del sistema
@reboot python /home/pi/tweepy/avvia_reboot.py >/dev/null 2>&1

Premete Ctrl+o, confermate con Y, poi Ctrl+x e uscite dal programma, lo schedulatore viene immediatamente aggiornato. Avete appena detto al Raspberry che al riavvio deve eseguire il programma che abbiamo appena scritto, la parte al fondo “>/dev/null 2>&1” farà sì che il risultato dell’attività non vi arrivi come mail di sistema, insomma non lascia traccia

(continua…)

Un commento su “Videosorveglianza con Raspberry Pi – Parte quarta”

  1. Bel post,
    anche l’idea di pescare l’IP da httpbin.org/ip mi piace, anche se io personalemtne preferisco avere un hostname fisso su IP variabile.
    Ho registrato un hostname [0] su dnsdynamic.org e il mio rapsberry tramite il ddclient [1] aggiorna ogni 10 minuti l’IP del mio router, quindi male che va sono down per qualche minuto.
    Configurato il port forward sul router, posso accedere da ovunque nel mondo a ssh, sftp, http (https mi sta facendo venire il mal di testa) e un serverino cloud dropbox-like : seafile [2] . Una bella intervista con lo sviluppatore (in un inglese orribile btw) la trovi qui [3]

    A proposito di webserver, tu che mi pari ferrato : io uso lightppd, come va con apache ? Ho anche trovato vari proggetti che si appoggiano a nginix ma sono restio a usare questa roba su un dispositivo cosí scarso in risorse… Magari metteró un Raspberry (o BeagleBoard) dedicato solo a comunicare con l’esterno.

    [1] http://blog.mivia.dk/free-dynamic-dns-for-raspberry-pi/ 
    [2] http://draptik.github.io/blog/2014/04/21/installing-seafile-on-raspberry-pi/
    [3] http://twit.tv/show/floss-weekly/290

Nota importante, da leggere prima di commentare

Questo è un blog scritto per passione, non fornisco quindi risposte di tipo professionale, se avete bisogno di un aiuto tecnico rivolgetevi ad un professionista di fiducia, non offendetevi se mi astengo dal rispondere. Vi ringrazio per la comprensione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.