diff --git a/thermostat.py b/thermostat.py index cd036b1..9ca617b 100644 --- a/thermostat.py +++ b/thermostat.py @@ -14,6 +14,8 @@ import requests import subprocess from threading import Thread from threading import Lock +from threading import Event +import signal import sqlite3 # This code has been written for @@ -156,6 +158,16 @@ def get_forced_mode(cursor): return data['value'] ## +stop = Event() + +def handler(signum, frame): + global stop + logging.info("Got interrupt: "+str(signum)) + stop.set() + logging.info("Shutdown") + +signal.signal(signal.SIGTERM,handler) +signal.signal(signal.SIGINT,handler) app = Flask(__name__) app.config.from_mapping(flask_settings) @@ -183,6 +195,13 @@ Set_mode_resource_fields = { } Set_mode_model = api.model('Set_mode_Model', Set_mode_resource_fields) +#TODO: Add this to swagger documentation +#'Temporary forced modes (will stay in effect for '+str(int(forced_mode_duration))+' seconds):\n'\ +#+'\n'.join(['# /'+target+'\n' for target in targets])\ +#+'\n'\ +#+'Permanent forced modes:\n'\ +#+'\n'.join(['# /'+mode+'\n' for mode in modes]) + @ns_thermostat.route('/set_mode') class Set_mode_thermostat(Resource): @auth_required @@ -260,13 +279,12 @@ def thermostat_loop(): dbconn = sqlite3.connect("./instance/thermostat.db") cursor = dbconn.cursor() + logging.info("====== Starting ======") while True: - # if stop.is_set(): - # httpd.shutdown() - # httpd.server_close() - # dbconn.close() - # break + if stop.is_set(): + dbconn.close() + break if new_forced_mode is not None: cursor.execute("INSERT OR REPLACE INTO set_mode (value) VALUES ('"+new_forced_mode+"')") @@ -368,82 +386,3 @@ t1 = Thread(target=thermostat_loop) t1.daemon = True t1.start() logging.info("====== Ended successfully ======") - -#import signal -#from threading import Event -#from http.server import BaseHTTPRequestHandler -#import threading -#import socketserver - - -# -#def api_help(): -# return """ -#### HTTP API description: -## /status -# -## /help : This message -# -#"""\ -#+'Temporary forced modes (will stay in effect for '+str(int(forced_mode_duration))+' seconds):\n'\ -#+'\n'.join(['# /'+target+'\n' for target in targets])\ -#+'\n'\ -#+'Permanent forced modes:\n'\ -#+'\n'.join(['# /'+mode+'\n' for mode in modes]) -# - - - -#logging.info("====== Starting ======") -#stop = Event() -#last_data = {} -# -#def handler(signum, frame): -# global stop -# logging.info("Got interrupt: "+str(signum)) -# stop.set() -# logging.info("Shutdown") -# -#signal.signal(signal.SIGTERM,handler) -#signal.signal(signal.SIGINT,handler) -# -#class MyHandler(BaseHTTPRequestHandler): -# def do_GET(self): -# global new_forced_mode -# request = self.path[1:] -# if request in targets or request in modes: -# self.send_response(200) -# new_forced_mode = request -# elif self.path == '/status': -# self.send_response(200) -# self.send_header('Content-type', 'text/plain') -# self.end_headers() -# self.wfile.write(status_as_text().encode("utf-8")) -# elif self.path == '/help': -# self.send_response(200) -# self.send_header('Content-type', 'text/plain') -# self.end_headers() -# self.wfile.write(api_help().encode("utf-8")) -# else: -# self.send_response(404) -# # This rewrites the BaseHTTP logging function -# def log_message(self, format, *args): -# if verbosity == 'INFO': -# xprint("%s - - [%s] %s" % -# (self.address_string(), -# self.log_date_time_string(), -# format%args)) -# -#class WebThread(threading.Thread): -# def run(self): -# httpd.serve_forever() -# - -#httpd = socketserver.TCPServer(("", http_port), MyHandler, bind_and_activate=False) -#httpd.allow_reuse_address = True -#httpd.server_bind() -#httpd.server_activate() -#webserver_thread = WebThread() -#webserver_thread.start() -# -