asteroidsteam icon

SSTV Auto Cam

asteroidsteam | PRO | 04/15/22 04:30:35 AM UTC | 0 ⭐ | 1136 👁️ | Never ⏰ | []
Python |

2.2 KB

|

None

|

0 👍

/

0 👎

# pip3 install requests boto3 watchdog
 
import time
import logging
import mimetypes
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler, FileCreatedEvent
import boto3
import os
from botocore.exceptions import NoCredentialsError
 
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
S3_BUCKET_NAME = 'sstv'
SSTV_FOLDER = '/mmsstv/images/'
 
 
def upload_to_aws(local_file, bucket, s3_file):
    s3 = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY_ID,
                      aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
 
    try:
        mime = mimetypes.guess_type(local_file)[0] or 'binary/octet-stream'
        s3.upload_file(local_file, bucket, s3_file, ExtraArgs={
            "ContentType": mime
        })
        logging.info(f"File Upload Successful ({s3_file})")
        return True
    except FileNotFoundError:
        logging.warning("File Upload Failed: File not found")
        return False
    except NoCredentialsError:
        logging.warning("File Upload Failed: No credentials")
        return False
 
 
def upload_to_website(awsname):
    # Handle uploading file to your website
    pass
 
 
class SSTVEvent(LoggingEventHandler):
    def dispatch(self, event):
        if isinstance(event, FileCreatedEvent):
            if not event.is_directory:
                logging.info(f"New SSTV image detected: {event.src_path}")
                awsname = f"sstv/{time.time()}.jpg"
                if upload_to_aws(event.src_path, S3_BUCKET_NAME, awsname):
                    if upload_to_website(awsname):
                        logging.info("Removing SSTV file from local disk")
                        os.remove(event.src_path)
                        logging.info("Done!")
 
 
if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    event_handler = SSTVEvent()
    observer = Observer()
    observer.schedule(event_handler, SSTV_FOLDER, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
 

Comments