8
8
import picamera
9
9
import connexion
10
10
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
12
14
13
15
from camera import Camera
14
16
from motion import Motion
22
24
# Logging configuration
23
25
logger = logging .getLogger ()
24
26
logger .setLevel (os .environ .get ("LOGLEVEL" , "INFO" ))
25
- # sh = logging.StreamHandler()
26
- # formatter = logging.Formatter('%(message)s')
27
- # sh.setFormatter(formatter)
28
- # logger.addHandler(sh)
29
27
30
28
## (Connexion) Flask app configuration
31
29
32
30
# Serve a custom version of the swagger ui (Jinja2 templates) based on the default one
33
31
# 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
+ )
42
42
app .prog_engine = ProgramEngine .get_instance ()
43
43
44
44
## New API and web application
45
45
46
46
# 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' )
48
48
49
49
def button_pushed ():
50
50
if app .bot_config .get ('button_func' ) == "startstop" :
@@ -67,8 +67,16 @@ def run_server():
67
67
try :
68
68
try :
69
69
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 )
72
80
73
81
try :
74
82
audio_device = Audio .get_instance ()
@@ -78,6 +86,7 @@ def run_server():
78
86
logging .warning ("Audio not present" )
79
87
80
88
try :
89
+ logging .info ("starting camera" )
81
90
cam = Camera .get_instance ()
82
91
Motion .get_instance ()
83
92
except picamera .exc .PiCameraError :
@@ -97,12 +106,12 @@ def run_server():
97
106
98
107
remove_doreset_file ()
99
108
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 )
101
110
finally :
102
111
if cam :
103
112
cam .exit ()
104
113
if bot :
105
114
bot .exit ()
106
115
107
116
if __name__ == "__main__" :
108
- run_server ()
117
+ run_server ()
0 commit comments