Timelapse_Camera_Firmware/Software/ZK_python/camera_rc_005.py

167 lines
6.4 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')
f = open("picture_Number.txt",'r')
wakeup_Time = [7,7,6,5,5,4,4,5,5,6,6,6]
picture_number = int(f.read())
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 successful! current dicertory is: '+ftp.pwd())
logging.info('New ftp connection successful! current dicertory is: '+ftp.pwd())
#camera.framerate = 15 #Fraction(2,6) #framrate 15 bei video und 2592x1944
#camera.shutter_speed = 500000
camera.resolution = (3280,2464) #aufloesung der bilder maximal 3280,2464
camera.awb_mode = 'auto'
camera.exposure_mode = 'auto'
#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 successful!')
logging.info('upload successful!')
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')
print('re-connecting successful!')
logging.info('re-connecting successful!')
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 successful!')
logging.info('upload successful!')
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() + 20
time_name = time.asctime(time.localtime(time.time()))
time_name = time_name.replace(" ","_")
time_name = time_name.replace(":","-")
picture_name = '01_'+str(picture_number).zfill(6)+'_'+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
picture_number += 1
print('picture_number:',str(picture_number))
f = open("picture_Number.txt",'w')
f.write(str(picture_number))
f.close()
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)
print('uploaded log-file successful!')
logging.info('uploaded log-file successful!')
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')
print('re-connecting successful!')
logging.info('re-connecting successful!')
ftp.storbinary('STOR ' + log_name, open('/home/pi/'+log_name,'rb'),1024)
ftp.sendcmd('SITE CHMOD 754 '+log_name)
print('uploaded log-file successful!')
logging.info('uploaded log-file successful!')
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 #seconds since midnight
if seconds < (wakeup_Time[datetime.now().month-1]*60*60):
sleep_time = (wakeup_Time[datetime.now().month-1]*60*60)-seconds
else:
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)
#maybe needed! needs to be tested
# ftp.connect('schuttercloud.com')
# ftp.login('uploader','1234')
#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('slept for '+str(sleep_time)+' seconds')
print('Time to wakeup! \n')
logging.info('slept for '+str(sleep_time)+' seconds')
logging.info('Time to wakeup! \n')
else:
uploadToFTP()