Timelapse_Camera_Firmware/Software/ZK_python/camera_rc_001.py

143 lines
5.2 KiB
Python
Raw Permalink Normal View History

2021-09-04 23:20:35 +02:00
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()