Changeset - 4ccedc2f8509
[Not reviewed]
default
0 2 0
matthewreed - 9 years ago 2016-08-17 21:36:57

Added logging to replace debug print statements
2 files changed with 29 insertions and 26 deletions:
0 comments (0 inline, 0 general)
hydrobot.py
Show inline comments
 
@@ -10,24 +10,36 @@ from canard.hw import cantact
 
from canard.file import jsondb
 
from influxdb import InfluxDBClient
 
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):
 
    
 
    # Meta class stores time series helper configuration.
 
    class Meta:
 
        # The client should be an instance of InfluxDBClient.
 
@@ -101,37 +113,29 @@ class CanBus:
 

	
 
    def process_can(self):
 
        while True:
 
            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):
 
        self.relay_send_msg.Nothing.value = 0
 
        if self.relay_send_msg.Output1.value == 0:
 
            self.relay_send_msg.Output1.value = 1
 
        else:
 
            self.relay_send_msg.Output1.value = 0
 
        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())
 
        
 
        if msg.lookup_signal(output) == msg.Output1:
 
            MySeriesHelper(measurement='output_1', value=state)
 
@@ -219,22 +223,20 @@ class Scheduler:
 
                    
 
    def interval_off(self, module, output, timer_off, timer_on, on_duration):
 
        self.canbus.set_output(module, output, 1)
 
        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)
 
        input_reading = msg.lookup_signal(signal_in).value
 
        input_reading = 19
 
        pid_out = pid.Update(input_reading)
 
@@ -258,9 +260,14 @@ def main():
 
    scheduler = Scheduler(canbus)
 
    scheduler.start()
 

	
 
    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())
hydrobot_example.conf
Show inline comments
 
[system]
 
name: my-system
 
log_level: INFO
 

	
 
[database]
 
host: www.example.org
 
port: 8086
 
username: admin
 
password: admin
 
database: hydrobot
 

	
 
[debug]
 
can: True
 
can_detail: False
 
timer: False
 

	
 
[timer1]
 
module: RelayDriveOut
 
output: Output1
 
trigger: cron
 
#day(1-31), weekday(0-6), hour(0-23), minute(0-59), second(0-59)
 
on_time: [None, None, None, None, 0]
0 comments (0 inline, 0 general)