|
23 | 23 | import time |
24 | 24 | import logging.handlers |
25 | 25 | import subprocess |
| 26 | +import picamera |
26 | 27 |
|
27 | 28 | from coderbot import CoderBot, PIN_PUSHBUTTON |
28 | 29 | from camera import Camera |
@@ -68,7 +69,8 @@ def get_locale(): |
68 | 69 |
|
69 | 70 | @app.route("/") |
70 | 71 | def handle_home(): |
71 | | - return render_template('main.html', host=request.host[:request.host.find(':')], stream_port=cam.stream_port, locale = get_locale(), config=app.bot_config, program_level=app.bot_config.get("prog_level", "std")) |
| 72 | + stream_port = cam.stream_port if cam else "" |
| 73 | + return render_template('main.html', host=request.host[:request.host.find(':')], stream_port=stream_port, locale = get_locale(), config=app.bot_config, program_level=app.bot_config.get("prog_level", "std"), cam=cam!=None) |
72 | 74 |
|
73 | 75 | @app.route("/config", methods=["POST"]) |
74 | 76 | def handle_config(): |
@@ -111,17 +113,32 @@ def handle_bot(): |
111 | 113 | motion.turn(angle=float(param2)) |
112 | 114 | elif cmd == "stop": |
113 | 115 | bot.stop() |
114 | | - motion.stop() |
| 116 | + try: |
| 117 | + motion.stop() |
| 118 | + except: |
| 119 | + logging.warning("Camera not present") |
| 120 | + pass |
115 | 121 | elif cmd == "take_photo": |
116 | | - cam.photo_take() |
117 | | - audio.say(app.bot_config.get("sound_shutter")) |
| 122 | + try: |
| 123 | + cam.photo_take() |
| 124 | + audio.say(app.bot_config.get("sound_shutter")) |
| 125 | + except: |
| 126 | + logging.warning("Camera not present") |
| 127 | + pass |
118 | 128 | elif cmd == "video_rec": |
119 | | - cam.video_rec() |
120 | | - audio.say(app.bot_config.get("sound_shutter")) |
| 129 | + try: |
| 130 | + cam.video_rec() |
| 131 | + audio.say(app.bot_config.get("sound_shutter")) |
| 132 | + except: |
| 133 | + logging.warning("Camera not present") |
| 134 | + pass |
121 | 135 | elif cmd == "video_stop": |
122 | | - cam.video_stop() |
123 | | - audio.say(app.bot_config.get("sound_shutter")) |
124 | | - |
| 136 | + try: |
| 137 | + cam.video_stop() |
| 138 | + audio.say(app.bot_config.get("sound_shutter")) |
| 139 | + except: |
| 140 | + logging.warning("Camera not present") |
| 141 | + pass |
125 | 142 | elif cmd == "say": |
126 | 143 | logging.info("say: " + str(param1) + " in: " + str(get_locale())) |
127 | 144 | audio.say(param1, get_locale()) |
@@ -190,7 +207,7 @@ def handle_photo(filename): |
190 | 207 | video = None |
191 | 208 | try: |
192 | 209 | video = cam.get_photo_file(filename) |
193 | | - except: |
| 210 | + except picamera.exc.PiCameraError: |
194 | 211 | pass |
195 | 212 |
|
196 | 213 | return send_file(video, mimetype.get(filename[:-3],'image'), cache_timeout=0) |
@@ -292,8 +309,12 @@ def run_server(): |
292 | 309 | bot = CoderBot.get_instance(servo=(app.bot_config.get("move_motor_mode")=="servo"), motor_trim_factor=float(app.bot_config.get('move_motor_trim', 1.0))) |
293 | 310 | audio = Audio.get_instance() |
294 | 311 | audio.say(app.bot_config.get("sound_start")) |
295 | | - cam = Camera.get_instance() |
296 | | - motion = Motion.get_instance() |
| 312 | + try: |
| 313 | + cam = Camera.get_instance() |
| 314 | + motion = Motion.get_instance() |
| 315 | + except picamera.exc.PiCameraError: |
| 316 | + logging.error("Camera not present") |
| 317 | + |
297 | 318 | if app.bot_config.get('load_at_start') and len(app.bot_config.get('load_at_start')): |
298 | 319 | app.prog = app.prog_engine.load(app.bot_config.get('load_at_start')) |
299 | 320 | app.prog.execute() |
|
0 commit comments