1 Commits

Author SHA1 Message Date
lars 56b08abd45 Intermediate state 2021-08-21 17:36:40 +02:00
6 changed files with 30 additions and 23 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
import configparser import configparser
config = configparser.RawConfigParser() config = configparser.RawConfigParser()
config.read("config.cfg") # edit this file for your specific configuration config.read("config.cfg") # edit this file for your specific configuration
+1 -1
View File
@@ -101,4 +101,4 @@ class BGenSecretary:
return {"unix_time": [entry[0] for entry in entries], "time_string": [entry[1] for entry in entries], "picture": [entry[2] for entry in entries]} return {"unix_time": [entry[0] for entry in entries], "time_string": [entry[1] for entry in entries], "picture": [entry[2] for entry in entries]}
bGenSecretary = BGenSecretary(config.config["File Locations"]["database_file"], config.config["File Locations"],["image_path"]) bGenSecretary = BGenSecretary(config.config["File Locations"]["database_file"], config.config["File Locations"]["image_path"])
+12 -10
View File
@@ -12,6 +12,8 @@ import RPi.GPIO as GPIO
import RaspberryPie.config as config import RaspberryPie.config as config
import RaspberryPie.dataHandling as dataHandling import RaspberryPie.dataHandling as dataHandling
GPIO.setwarnings(False)
captScribe = None captScribe = None
def _set_captScribe(_captScribe): def _set_captScribe(_captScribe):
@@ -22,9 +24,9 @@ def _set_captScribe(_captScribe):
class MajGenGPIOController: class MajGenGPIOController:
def __init__(self, pin_open, pin_close, delta_switchOff): def __init__(self, pin_open, pin_close, delta_switchOff):
self.pinOpen = pin_open self.pinOpen = int(pin_open)
self.pinClose = pin_close self.pinClose = int(pin_close)
self.deltaOff = delta_switchOff self.deltaOff = int(delta_switchOff)
GPIO.setmode(GPIO.BCM) GPIO.setmode(GPIO.BCM)
GPIO.setup(self.pinOpen, GPIO.OUT) GPIO.setup(self.pinOpen, GPIO.OUT)
@@ -68,7 +70,7 @@ class MajGenObserver:
return self.captured return self.captured
def __init__(self, schedule_timing): def __init__(self, schedule_timing):
self.schedule_timing = schedule_timing self.schedule_timing = int(schedule_timing)
def get_schedule(self): def get_schedule(self):
return self.schedule_timing return self.schedule_timing
@@ -79,7 +81,7 @@ class MajGenAirChecker(MajGenObserver):
schedule_timing = config.config["Timing"]["environmentdelta"] schedule_timing = config.config["Timing"]["environmentdelta"]
super().__init__(schedule_timing) super().__init__(schedule_timing)
def execute(): def execute(self):
sensor = Adafruit_DHT.DHT22 sensor = Adafruit_DHT.DHT22
pin = int(config.config["Hardware"]["dhtpin"]) pin = int(config.config["Hardware"]["dhtpin"])
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
@@ -94,9 +96,9 @@ class MajGenVisualObserver(MajGenObserver):
schedule_timing = config.config["Timing"]["picturedelta"] schedule_timing = config.config["Timing"]["picturedelta"]
super().__init__(schedule_timing) super().__init__(schedule_timing)
def execute(): def execute(self):
camera = PiCamera() camera = PiCamera()
majGensDictatingMachine = super.DictatingMachine() majGensDictatingMachine = super().DictatingMachine()
camera.start_preview() camera.start_preview()
time.sleep(5) # letting camera adjust to environment (exposure and wb) time.sleep(5) # letting camera adjust to environment (exposure and wb)
camera.capture(majGensDictatingMachine, format="jpeg") camera.capture(majGensDictatingMachine, format="jpeg")
@@ -109,7 +111,7 @@ class MajGenAirRecoder(MajGenAirChecker):
super().__init__(schedule_timing=schedule_timing) super().__init__(schedule_timing=schedule_timing)
def execute(self): def execute(self):
data = super.execute() data = super().execute()
self.dataCollector.recordeAir({"air": (str(datetime.datetime.now()), data)}) self.dataCollector.recordeAir({"air": (str(datetime.datetime.now()), data)})
class MajGenVisualRecoder(MajGenVisualObserver): class MajGenVisualRecoder(MajGenVisualObserver):
@@ -118,7 +120,7 @@ class MajGenVisualRecoder(MajGenVisualObserver):
super().__init__(schedule_timing=schedule_timing) super().__init__(schedule_timing=schedule_timing)
def execute(self): def execute(self):
data = super.execute() data = super().execute()
self.dataCollector.recordePicture({"picture": (str(datetime.datetime.now()), data)}) self.dataCollector.recordePicture({"picture": (str(datetime.datetime.now()), data)})
@@ -127,4 +129,4 @@ majGenGPIOController = MajGenGPIOController(config.config["Hardware"]["pinopen"]
majGenVisualObserver = MajGenVisualObserver() majGenVisualObserver = MajGenVisualObserver()
majGenAirChecker = MajGenAirChecker() majGenAirChecker = MajGenAirChecker()
majGenAirRecoder = MajGenAirRecoder(dataHandling.bGenSecretary) majGenAirRecoder = MajGenAirRecoder(dataHandling.bGenSecretary)
majGenVisualRecoder = MajGenVisualRecoder(dataHandling.bGenSecretary) majGenVisualRecorder = MajGenVisualRecoder(dataHandling.bGenSecretary)
+2
View File
@@ -94,6 +94,8 @@ class MajGenApiCom:
imap.logout() imap.logout()
except: except:
captScribe.error("Logout of imap failed.", "MajGenApiCom.get_emails") captScribe.error("Logout of imap failed.", "MajGenApiCom.get_emails")
return mail_box
def delete_mail(self, id): def delete_mail(self, id):
imap = None imap = None
+5 -3
View File
@@ -1,6 +1,6 @@
# general imports # general imports
import logging import logging
import logging.handlers
class CaptScribe: class CaptScribe:
def __init__(self, log_info, log_error): def __init__(self, log_info, log_error):
@@ -8,15 +8,17 @@ class CaptScribe:
self.logfile_error = log_error self.logfile_error = log_error
self.loggers = [logging.getLogger("log_info"), logging.getLogger("log_error")] self.loggers = [logging.getLogger("log_info"), logging.getLogger("log_error")]
self.formatters = [logging.Formatter("%(asctime)s : %(level), %(message)s"), logging.Formatter("%(asctime)s : %(message)s: %(sinfo)")] self.formatters = [logging.Formatter("%(asctime)s : %(level), %(message)s"), logging.Formatter("%(asctime)s : %(message)s: %(sinfo)")]
self.handlers = [logging.TimedRotatingFileHandler(self.logfile_info, when='midnight', interval=1), logging.TimedRotatingFileHandler(self.logfile_error, when='midnight', interval=1)] self.handlers = [logging.handlers.TimedRotatingFileHandler(self.logfile_info, when='midnight', interval=1), logging.handlers.TimedRotatingFileHandler(self.logfile_error, when='midnight', interval=1)]
for i, handler in enumerate(self.handlers): for i, handler in enumerate(self.handlers):
handler.setFormatter(self.formatters[i]) handler.setFormatter(self.formatters[i])
for i, logger in self.loggers: for i, logger in enumerate(self.loggers):
logger.addHandler(self.handlers[i]) logger.addHandler(self.handlers[i])
self.loggers[0].level = logging.INFO self.loggers[0].level = logging.INFO
self.loggers[1].level = logging.ERROR self.loggers[1].level = logging.ERROR
self.loggers[0].addHandler(logging.StreamHandler())
def critical(self, msg, func=""): def critical(self, msg, func=""):
for logger in self.loggers: for logger in self.loggers:
+9 -8
View File
@@ -15,12 +15,12 @@ import RaspberryPie.config as config
import RaspberryPie.logger as logger import RaspberryPie.logger as logger
import RaspberryPie.internetHandling as internetHandling import RaspberryPie.internetHandling as internetHandling
captScribe = logger.CaptScribe(config.config.config["File Locations"]["logfile_info"], config.config.config["File Locations"]["logfile_error"]) captScribe = logger.CaptScribe(config.config["File Locations"]["logfile_info"], config.config["File Locations"]["logfile_error"])
internetHandling._set_captScribe(captScribe) internetHandling._set_captScribe(captScribe)
hardwareControl._set_captScribe(captScribe) hardwareControl._set_captScribe(captScribe)
ltGenInterpreter, genScheduler = None ltGenInterpreter, genScheduler = None, None
tasks = [ tasks = [
tasks.Task(hardwareControl.majGenGPIOController.open, lambda msg: 1 if ("auf" == msg.subject.lower() or "open" == msg.subject.lower()) else 0), tasks.Task(hardwareControl.majGenGPIOController.open, lambda msg: 1 if ("auf" == msg.subject.lower() or "open" == msg.subject.lower()) else 0),
@@ -31,8 +31,8 @@ tasks = [
class LtGenInterpreter: class LtGenInterpreter:
def __init__(self, tasks: list, communicator: internetHandling.MajGenApiCom, schedule_timing=None): def __init__(self, tasks: list, communicator: internetHandling.MajGenApiCom, schedule_timing=None):
if not schedule_timing: if not schedule_timing:
schedule_timing = config.config.config["Timing"]["maildelta"] schedule_timing = config.config["Timing"]["maildelta"]
self.schedule_timing self.schedule_timing = schedule_timing
self.tasks = tasks self.tasks = tasks
self.communicator = communicator self.communicator = communicator
@@ -52,8 +52,8 @@ class GenScheduler:
self.schedule = {} self.schedule = {}
self.schedule_delta = {} self.schedule_delta = {}
for subordinate in self.subordinates: for subordinate in self.subordinates:
self.schedule[subordinate] = list(datetime.datetime.now()) self.schedule[subordinate] = [datetime.datetime.now()]
self.schedule_delta[subordinate] = list(subordinate.get_schedule()) self.schedule_delta[subordinate] = [subordinate.get_schedule()]
self.time = datetime.datetime.now self.time = datetime.datetime.now
def execute(self): def execute(self):
@@ -62,7 +62,7 @@ class GenScheduler:
for subordinate in self.schedule: for subordinate in self.schedule:
if self.schedule[subordinate][np.argmin(self.schedule[subordinate])] <= self.time(): if self.schedule[subordinate][np.argmin(self.schedule[subordinate])] <= self.time():
subordinate.execute() subordinate.execute()
self.schedule[subordinate][np.argmin(self.schedule[subordinate])] += self.schedule_delta[subordinate][np.argmin(self.schedule[subordinate])] self.schedule[subordinate][np.argmin(self.schedule[subordinate])] += datetime.timedelta(seconds=float(self.schedule_delta[subordinate][np.argmin(self.schedule[subordinate])]))
time_list = lambda: [self.schedule[subordinate][np.argmin(self.schedule[subordinate])] for subordinate in self.schedule] time_list = lambda: [self.schedule[subordinate][np.argmin(self.schedule[subordinate])] for subordinate in self.schedule]
sleep_duration = time_list()[np.argmin(time_list())] sleep_duration = time_list()[np.argmin(time_list())]
@@ -84,10 +84,11 @@ def init():
def main(): def main():
suspend_shutdown = False suspend_shutdown = False
if genScheduler is GenScheduler: if type(genScheduler) is GenScheduler:
try: try:
genScheduler.execute() genScheduler.execute()
except Exception as e: except Exception as e:
print(e)
captScribe.critical(str(e), "main()") captScribe.critical(str(e), "main()")
if e is KeyboardInterrupt: if e is KeyboardInterrupt:
suspend_shutdown = True suspend_shutdown = True