Timelapse_Camera_Firmware/Software/ZK_python/camera_rc_001.py

143 lines
5.2 KiB
Python

from picamera import PiCamera
from time import sleep
from ftplib import FTP
from fractions import Fraction
from datetime import datetime
import ftplib
import time
import os
import logging
camera = PiCamera()
ftp = FTP('schuttercloud.com','uploader','1234')
ftp.cwd('/camera01')
camera.resolution = (3280,2464) #aufloesung der bilder maximal 3280,2464
#camera.framerate = 15 #Fraction(2,6) #framrate 15 bei video und 2592x1944
camera.shutter_speed = 500000
camera.awb_mode = 'auto'
camera.exposure_mode = 'auto'
wakeup_Time = [7,7,6,5,5,4,4,5,5,6,6,6]
i=0
camera_number = '01'
log_name = camera_number+'_'+str(datetime.now().strftime("%A %d. %B %Y"))+'.log'
log_name = log_name.replace(" ","-")
logging.basicConfig(filename=log_name,format='%(asctime)s [%(levelname)s] %(message)s',level=logging.DEBUG,datefmt='%d/%m/%Y %H:%M:%S')
print ('New ftp connection successfull! current dicertory is: '+ftp.pwd())
logging.info('New ftp connection successfull! current dicertory is: '+ftp.pwd())
#camera.brightness = 50 #0 bis 100; default 50
#camera.contrast = 0 #-100 bis 100; default 0
#camera.iso = 0 #0 bis 1600; default 0(auto)
#camera.zoom = (0, 0, 1.0, 1.0) #0.0 bis 1.0 (x, y, w, h)
#camera.sharpness = 0 #-100 bis 100; default 0
def uploadToFTP():
print('trying to upload file ...')
logging.info('trying to upload file ...')
try:
ftp.storbinary('STOR ' + picture_name, open(picture_path,'rb'),1024)
ftp.sendcmd('SITE CHMOD 754 '+picture_name)
os.remove(picture_path) #TODO fallback test
print('upload succesful!')
logging.info('upload succesful!')
except ftplib.all_errors as e:
print ('upload failed!')
print (e)
logging.error('upload failed!')
logging.error(str(e))
try:
print('trying to reconnect ...')
logging.info('trying to reconnect ...')
ftp.connect('schuttercloud.com')
ftp.login('uploader','1234')
ftp.storbinary('STOR ' + picture_name, open(picture_path,'rb'),1024)
ftp.sendcmd('SITE CHMOD 754 '+picture_name)
os.remove(picture_path) #TODO fallback test
except ftplib.all_errors as e9:
print('re-connecting failed!')
print(e9)
logging.error('re-connecting failed!')
logging.error(str(e9))
time_sleep_unix = time_next_unix - time.time()
print("sleeping now",time_sleep_unix,"seconds"+'\n')
logging.info('sleeping now '+str(time_sleep_unix)+' seconds'+'\n')
sleep(time_sleep_unix)
return
while 1:
time_next_unix = time.time() + 3000
time_name = time.asctime(time.localtime(time.time()))
time_name = time_name.replace(" ","_")
time_name = time_name.replace(":","-")
picture_name = '01_'+str(i).zfill(9)+'_'+time_name + '.jpg'
picture_path = '/home/pi/Pictures/' + picture_name
print ("Zeit Name:", time_name)
try:
camera.capture(picture_path) #nimmt bild 'image.jpg' auf
i=i+1
except Exception as e2:
logging.error(str(e2))
print ('Picture size:',os.path.getsize(picture_path),"Byte")
logging.info('Picture size: '+str(os.path.getsize(picture_path))+' Byte')
if os.path.getsize(picture_path) < 1800000:
print ('it seems to be night!')
logging.info('it seems to be night!')
if datetime.now().hour > wakeup_Time[datetime.now().month] and datetime.now().hour < 17:
print ('cannot be night!')
logging.warning('cannot be night!')
uploadToFTP()
else:
#uploading log file
print ('skipping picture upload!')
print('uploading todays log befor going to sleep!')
logging.info('skipping picture upload!')
logging.info('uploading todays log befor going to sleep!')
try:
ftp.storbinary('STOR ' + log_name, open('/home/pi/'+log_name,'rb'),1024)
ftp.sendcmd('SITE CHMOD 754 '+log_name)
except ftplib.all_errors as e:
print ('upload failed!')
print (e)
logging.error('upload failed!')
logging.error(str(e))
try:
print('trying to reconnect ...')
logging.info('trying to reconnect ...')
ftp.connect('schuttercloud.com')
ftp.login('uploader','1234')
ftp.storbinary('STOR ' + log_name, open('/home/pi/'+log_name,'rb'),1024)
ftp.sendcmd('SITE CHMOD 754 '+log_name)
except ftplib.all_errors as e8:
print('re-connecting failed!')
print(e8)
logging.error('re-connecting failed!')
logging.error(str(e8))
#sleep until next morning
print ('going to sleep for a while ...')
logging.info('going to sleep for a while ...')
midnight = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
seconds = (datetime.now() - midnight).seconds
sleep_time = 86400-seconds+(wakeup_Time[datetime.now().month-1]*60*60)
print ('sleeping now '+str(sleep_time)+' seconds or until '+str(wakeup_Time[datetime.now().month-1])+'am!')
logging.info('sleeping now '+str(sleep_time)+' seconds or until '+str(wakeup_Time[datetime.now().month-1])+'am!')
sleep(sleep_time-10)
#wake up 10 seconds before we should for exact start
print(str((datetime.now() - midnight).seconds)+' < '+str((wakeup_Time[datetime.now().month-1]*60*60)))
while(datetime.now() - midnight).seconds < (wakeup_Time[datetime.now().month-1]*60*60):
sleep(0.5)
log_name = camera_number+'_'+str(datetime.now().strftime("%A %d. %B %Y"))+'.log'
log_name = log_name.replace(" ","-")
logging.basicConfig(filename=log_name)
print('Time to wakeup! \n')
logging.info('Time to wakeup! \n')
else:
uploadToFTP()