Problema de la care am pornit este destul de des întâlnită. Plecăm de acasă și dorim să știm ce se întâmplă cu plantele sau cu acvariul cu pești - cazul nostru. Nu sunt un fan al camerelor de supraveghere pentru că pot să fie folosite ușor ca instrument de atac la intimitatea fiecăruia, iar postarea online a datelor nu garantează securitatea. De fapt, reprezintă mai mult decât este nevoie pentru a avea o simplă soluție de monitorizare. Cerințele aplicației noastre sunt modeste: realizarea unei poze la un interval de douăzeci de minute și postarea acestora pe un site ftp la care să avem acces.
Aceste componente ar trebui să se găsească în casa oricărui programator. O placă Raspberry PI, o cameră video pe interfața CSI sau USB și o conexiune la internet. Vom folosi sistemul de operare Raspbian, iar ca limbaj de operare, am ales Python deoarece are un bun suport în zona librăriilor IOT. Librăriile folosite sunt:
time și datetime - pentru controlul intervalului în care se fac pozele și pentru numele pozelor;
picamera - captura de poze ;
ftplib - comunicarea ftp.
from time import sleep
from picamera import PiCamera
import ftplib
import datetime
def startCamera():
camera = PiCamera()
camera.rotation = 180
camera.resolution = (1024, 768)
camera.framerate = 2
camera.exposure_compensation =20
return camera
def startFtpConn():
ftp = ftplib.FTP()
ftp.set_debuglevel(2)
ftp.connect('ftp.ourwebsite.ro'
,21, timeout=10)
ftp.set_pasv(False)
print(ftp.welcome)
try:
print('logging in')
ftp.login('ovidiu@ourwebsite.ro',
'parola')
except:
print('unable to login')
return ftp
camera = startCamera()
while True:
camera.start_preview()
ftp = startFtpConn()
now = datetime.datetime.now()
if now.hour > 18 or now.hour < 8:
print("night vision")
camera.shutter_speed = 200000
camera.exposure_mode =
'backlight'
filename =
'/home/pi/picture_capture.jpg'
camera.capture(filename)
try:
print("got the picture")
file = open(filename)
print(
"saving it: %s" % now.time())
ftp.storbinary(
'STOR /IOT/%s_photo.jpg' %
now.time(), file, 1)
file.close()
print("done")
except Exception as e:
print(e)
finally:
print("finally")
camera.stop_preview()
ftp.close()
print("waiting 20 min")
sleep(20 * 60)
S-ar putea ca Raspberry PI să nu vă recunoască camera video. Pentru inițializarea driverului lansați următoarea comandă:
sudo modprobe bcm2835-v4l2
Pentru a rula aplicația, trebuie doar să înlocuiți datele de logare și site-ul ftp.
Lansați aplicația remote prin intermediul unui remote sharing cum este VNC Viewer în loc de SSH. Lansarea prin SSH va cauza oprirea aplicației în momentul unui timeout și nu cred că doriți să păstrați un SSH deschis pe toată perioada concediului.
În afară de soluția prezentată în acest articol, am mai folosit pentru fluxul de aer din acvariu o priză inteligentă ce se poate controla de pe internet.
Soluția de față este un simplu mecanism de monitorizare la îndemâna tuturor. Următorul pas ar fi controlul hranei și al luminii în acvariu. Vom reveni cu ea după următorul concediu.
de Ovidiu Mățan
de Adrian Cozac
de Ovidiu Mățan