Shutdown on signal.
This commit is contained in:
parent
2cbfe5781d
commit
5a9a53ec2f
107
thermostat.py
107
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()
|
||||
#
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user