From 57bdbf85ee95a471dd89b85f45a2589ab9e5d945 Mon Sep 17 00:00:00 2001 From: Tilman Date: Thu, 13 May 2021 15:51:08 +0200 Subject: [PATCH] logging and JSON --- garage/garage.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/garage/garage.py b/garage/garage.py index e991dd9..2d9b35b 100644 --- a/garage/garage.py +++ b/garage/garage.py @@ -1,16 +1,22 @@ import RPi.GPIO as GPIO import logging +import logging.handlers as handlers import time from threading import Thread - import cherrypy # https://docs.cherrypy.org/en/latest/tutorials.html#tutorial-1-a-basic-web-application +import urllib.request, json cherrypy.config.update({ 'server.socket_host' : '192.168.178.49', 'server.socket_port' : 8081, }) -logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s - %(message)s') +logger = logging.getLogger('Rotating Log') +logger.setLevel(logging.INFO) +logHandler = handlers.RotatingFileHandler('garage.log', maxBytes=1000000, backupCount=2) +logHandler.setLevel(logging.INFO) +logHandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s - %(message)s')) +logger.addHandler(logHandler) PIN_GARAGE_BUTTON = 23 @@ -23,7 +29,6 @@ PIN_DOOR_CLOSED = 13 PIN_SENSOR_GATE= 19 - GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_GARAGE_BUTTON, GPIO.IN, GPIO.PUD_UP) GPIO.setup(PIN_GATE_BUTTON, GPIO.IN, GPIO.PUD_UP) @@ -35,29 +40,30 @@ GPIO.setup(PIN_DOOR_CLOSED, GPIO.IN, GPIO.PUD_UP) GPIO.setup(PIN_SENSOR_GATE, GPIO.IN, GPIO.PUD_UP) + def garage_button(channel): time.sleep(0.01) # el cheapo relay module creates lots of interference, so we check again after a waiting period (see https://electronics.stackexchange.com/a/361793/253533) if channel == 0 or GPIO.input(PIN_GARAGE_BUTTON) == False: - logging.info("trigger motor") + logger.info("trigger motor") GPIO.output(PIN_GARAGE, GPIO.LOW) GPIO.output(PIN_LED, GPIO.HIGH) time.sleep(0.4) GPIO.output(PIN_GARAGE, GPIO.HIGH) GPIO.output(PIN_LED, GPIO.LOW) else: - logging.info("flare (motor button)") + logger.info("flare (motor button)") def gate_button(channel): time.sleep(0.01) if channel == 0 or GPIO.input(PIN_GATE_BUTTON) == False: - logging.info("trigger remote") + logger.info("trigger remote") GPIO.output(PIN_GATE, GPIO.HIGH) GPIO.output(PIN_LED, GPIO.HIGH) time.sleep(0.4) GPIO.output(PIN_GATE, GPIO.LOW) GPIO.output(PIN_LED, GPIO.LOW) else: - logging.info("flare (remote button)") + logger.info("flare (remote button)") GPIO.add_event_detect(PIN_GARAGE_BUTTON, GPIO.FALLING, callback=garage_button, bouncetime=250) GPIO.add_event_detect(PIN_GATE_BUTTON, GPIO.FALLING, callback=gate_button, bouncetime=250) @@ -88,29 +94,29 @@ class GarageService(object): def garage(self, action=None): if (action == "open" and GPIO.input(PIN_DOOR_CLOSED) and not GPIO.input(PIN_DOOR_OPEN)): Thread(target=garage_button,args=[0]).start() - return "{ action: open }" + return '{ "action": "open" }' elif (action == "close" and GPIO.input(PIN_DOOR_OPEN) and not GPIO.input(PIN_DOOR_CLOSED)): Thread(target=garage_button,args=[0]).start() - return "{ action: close }" + return '{ "action": "close" }' if (GPIO.input(PIN_DOOR_OPEN) and not GPIO.input(PIN_DOOR_CLOSED)): status = "true" else: status = "false" - return "{ status: " + status + " }" + return '{ "status": "' + status + '" }' @cherrypy.expose def gate(self, action=None): if (action == "open" and not GPIO.input(PIN_SENSOR_GATE)): Thread(target=gate_button,args=[0]).start() - return "{ action: open }" + return '{ "action": "open" }' elif (action == "close" and GPIO.input(PIN_SENSOR_GATE)): Thread(target=gate_button,args=[0]).start() - return "{ action: close }" + return '{ "action": "close" }' if GPIO.input(PIN_SENSOR_GATE) == 0: status = "false" else: status = "true" - return "{ status: " + status + " }" + return '{ "status": "' + status + '" }' @cherrypy.expose def all(self): @@ -120,12 +126,12 @@ class GarageService(object): @cherrypy.expose def status(self): - return "{ open: " + str(GPIO.input(PIN_DOOR_OPEN)) + ", closed: " + str(GPIO.input(PIN_DOOR_CLOSED)) + ", gate: " + str(GPIO.input(PIN_SENSOR_GATE)) + " }" + return '{ "open": ' + str(GPIO.input(PIN_DOOR_OPEN)) + ', "closed": ' + str(GPIO.input(PIN_DOOR_CLOSED)) + ', "gate": ' + str(GPIO.input(PIN_SENSOR_GATE)) + ' }' cherrypy.quickstart(GarageService()) -logging.info('Shutdown') -logging.info('Reset GPIO configuration and close') +logger.info('Shutdown') +logger.info('Reset GPIO configuration and close') GPIO.cleanup() \ No newline at end of file