# HG changeset patch # User matthewreed # Date 2016-08-17 21:36:57 # Node ID 4ccedc2f8509b1ee65a90f72882fd65d3cb07795 # Parent 18ae0de640b9e91b1e43ee7f19307d786fdaa668 Added logging to replace debug print statements diff --git a/hydrobot.py b/hydrobot.py --- a/hydrobot.py +++ b/hydrobot.py @@ -13,18 +13,30 @@ from influxdb import SeriesHelper from apscheduler.schedulers.background import BackgroundScheduler import PID from pytz import timezone +import logging +import signal #TODO #fix temperature offsets -#database time interval logging -#set initial state for cron timers +#add periodic output refresh +# load config file config = configparser.ConfigParser(allow_no_value = True) config.read("hydrobot.conf") -DEBUG_CAN = config.getboolean("debug", "can") -DEBUG_CAN_DETAIL = config.getboolean("debug", "can_detail") -DEBUG_TIMER = config.getboolean("debug", "timer") + +# set up logger +logger = logging.getLogger('hydrobot') +log_level = config.get("system", "log_level") +levels = {"CRITICAL" : 50, "ERROR" : 40, "WARNING" : 30, "INFO" : 20, "DEBUG" : 10, "NOTSET" : 0} +logger.setLevel(levels[log_level]) +fh = logging.FileHandler('hydrobot.log') +fh.setLevel(logging.INFO) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +fh.setFormatter(formatter) +logger.addHandler(fh) + +logger.info("Starting HydroBot!") class MySeriesHelper(SeriesHelper): @@ -104,12 +116,7 @@ class CanBus: frame = self.dev.recv() message = self.msgdb.decode(frame) if message: - if DEBUG_CAN: - print("Received CAN message! ID: " + hex(message.id)) - for s in message._signals.values(): - if DEBUG_CAN_DETAIL: - print(s) - print(s.value) + logger.debug("Received CAN message! ID: " + hex(message.id)) self.database.log_data(self.msgdb, message) def send_can(self): @@ -121,14 +128,11 @@ class CanBus: self.relay_send_msg.Output2.value = 1 self.relay_send_msg.Output3.value = 1 self.relay_send_msg.Output4.value = 1 - if DEBUG_CAN: - print("Send CAN message! ID: " + hex(self.relay_send_msg.id)) - if DEBUG_CAN_DETAIL: - print(self.relay_send_msg) + logger.debug("Send CAN message! ID: " + hex(self.relay_send_msg.id) + " Data: " + str(self.relay_send_msg.data)) self.dev.send(self.relay_send_msg.encode()) def set_output(self, module, output, state): - print("Output! " + module + " " + output + " " + str(state)) + logger.info("Output! " + module + " " + output + " " + str(state)) msg = self.msgdb.lookup_message(module) msg.lookup_signal(output).value = state self.dev.send(msg.encode()) @@ -222,16 +226,14 @@ class Scheduler: self.apscheduler.get_job(timer_on).reschedule("interval", weeks = on_duration[0], days = on_duration[1], hours = on_duration[2], minutes = on_duration[3], seconds = on_duration[4]) self.apscheduler.get_job(timer_on).resume() self.apscheduler.get_job(timer_off).pause() - if DEBUG_TIMER: - print("Turning " + timer_on + "! " + str(datetime.datetime.now().time())) + logger.info("Turning " + timer_on + "!") def interval_on(self, module, output, timer_off, timer_on, off_duration): self.canbus.set_output(module, output, 0) self.apscheduler.get_job(timer_off).reschedule("interval", weeks = off_duration[0], days = off_duration[1], hours = off_duration[2], minutes = off_duration[3], seconds = off_duration[4]) self.apscheduler.get_job(timer_off).resume() self.apscheduler.get_job(timer_on).pause() - if DEBUG_TIMER: - print("Turning " + timer_off + "! " + str(datetime.datetime.now().time())) + logger.info("Turning " + timer_off + "!") def process_PID(self, pid, module_out, signal_out, module_in, signal_in): msg = self.canbus.msgdb.lookup_message(module_in) @@ -261,6 +263,11 @@ def main(): while True: time.sleep(0.001) +def close_program(signum, frame): + logger.info("Closing now!") + sys.exit(0) + +signal.signal(signal.SIGINT, close_program) if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/hydrobot_example.conf b/hydrobot_example.conf --- a/hydrobot_example.conf +++ b/hydrobot_example.conf @@ -1,5 +1,6 @@ [system] name: my-system +log_level: INFO [database] host: www.example.org @@ -8,11 +9,6 @@ username: admin password: admin database: hydrobot -[debug] -can: True -can_detail: False -timer: False - [timer1] module: RelayDriveOut output: Output1