Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 56b08abd45 |
@@ -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,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)
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ class MajGenApiCom:
|
|||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -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,16 +8,18 @@ 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:
|
||||||
logger.critical(func.upper() + ": " + msg)
|
logger.critical(func.upper() + ": " + msg)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user