88import picamera
99import connexion
1010
11- from flask_cors import CORS
11+ from connexion .options import SwaggerUIOptions
12+ from connexion .middleware import MiddlewarePosition
13+ from starlette .middleware .cors import CORSMiddleware
1214
1315from camera import Camera
1416from motion import Motion
2224# Logging configuration
2325logger = logging .getLogger ()
2426logger .setLevel (os .environ .get ("LOGLEVEL" , "INFO" ))
25- # sh = logging.StreamHandler()
26- # formatter = logging.Formatter('%(message)s')
27- # sh.setFormatter(formatter)
28- # logger.addHandler(sh)
2927
3028## (Connexion) Flask app configuration
3129
3230# Serve a custom version of the swagger ui (Jinja2 templates) based on the default one
3331# from the folder 'swagger-ui'. Clone the 'swagger-ui' repository inside the backend folder
34- options = {"swagger_ui" : False }
35- connexionApp = connexion .App (__name__ , options = options )
36-
37- # Connexion wraps FlaskApp, so app becomes connexionApp.app
38- app = connexionApp .app
39- # Access-Control-Allow-Origin
40- CORS (app )
41- app .debug = False
32+ swagger_ui_options = SwaggerUIOptions (swagger_ui = True )
33+ app = connexion .App (__name__ , swagger_ui_options = swagger_ui_options )
34+ app .add_middleware (
35+ CORSMiddleware ,
36+ position = MiddlewarePosition .BEFORE_EXCEPTION ,
37+ allow_origins = ["*" ],
38+ allow_credentials = True ,
39+ allow_methods = ["*" ],
40+ allow_headers = ["*" ],
41+ )
4242app .prog_engine = ProgramEngine .get_instance ()
4343
4444## New API and web application
4545
4646# API v1 is defined in v1.yml and its methods are in api.py
47- connexionApp .add_api ('v1.yml' )
47+ app .add_api ('v1.yml' )
4848
4949def button_pushed ():
5050 if app .bot_config .get ('button_func' ) == "startstop" :
@@ -67,8 +67,16 @@ def run_server():
6767 try :
6868 try :
6969 app .bot_config = Config .read ()
70-
71- bot = CoderBot .get_instance ()
70+ bot = CoderBot .get_instance (motor_trim_factor = float (app .bot_config .get ('move_motor_trim' , 1.0 )),
71+ motor_max_power = int (app .bot_config .get ('motor_max_power' , 100 )),
72+ motor_min_power = int (app .bot_config .get ('motor_min_power' , 0 )),
73+ hw_version = app .bot_config .get ('hardware_version' ),
74+ pid_params = (float (app .bot_config .get ('pid_kp' , 1.0 )),
75+ float (app .bot_config .get ('pid_kd' , 0.1 )),
76+ float (app .bot_config .get ('pid_ki' , 0.01 )),
77+ float (app .bot_config .get ('pid_max_speed' , 200 )),
78+ float (app .bot_config .get ('pid_sample_time' , 0.01 ))),
79+ from_defaults = False )
7280
7381 try :
7482 audio_device = Audio .get_instance ()
@@ -78,6 +86,7 @@ def run_server():
7886 logging .warning ("Audio not present" )
7987
8088 try :
89+ logging .info ("starting camera" )
8190 cam = Camera .get_instance ()
8291 Motion .get_instance ()
8392 except picamera .exc .PiCameraError :
@@ -97,12 +106,12 @@ def run_server():
97106
98107 remove_doreset_file ()
99108
100- app .run (host = "0.0.0.0" , port = 5000 , debug = False , use_reloader = False , threaded = True )
109+ app .run (host = "0.0.0.0" , port = 5000 )
101110 finally :
102111 if cam :
103112 cam .exit ()
104113 if bot :
105114 bot .exit ()
106115
107116if __name__ == "__main__" :
108- run_server ()
117+ run_server ()
0 commit comments