Skip to content

Commit 8120504

Browse files
author
previ
committed
lack of camera resilience CoderBotOrg#47
1 parent bf3d27d commit 8120504

File tree

6 files changed

+58
-30
lines changed

6 files changed

+58
-30
lines changed

main.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import time
2424
import logging.handlers
2525
import subprocess
26+
import picamera
2627

2728
from coderbot import CoderBot, PIN_PUSHBUTTON
2829
from camera import Camera
@@ -68,7 +69,8 @@ def get_locale():
6869

6970
@app.route("/")
7071
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)
7274

7375
@app.route("/config", methods=["POST"])
7476
def handle_config():
@@ -111,17 +113,32 @@ def handle_bot():
111113
motion.turn(angle=float(param2))
112114
elif cmd == "stop":
113115
bot.stop()
114-
motion.stop()
116+
try:
117+
motion.stop()
118+
except:
119+
logging.warning("Camera not present")
120+
pass
115121
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
118128
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
121135
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
125142
elif cmd == "say":
126143
logging.info("say: " + str(param1) + " in: " + str(get_locale()))
127144
audio.say(param1, get_locale())
@@ -190,7 +207,7 @@ def handle_photo(filename):
190207
video = None
191208
try:
192209
video = cam.get_photo_file(filename)
193-
except:
210+
except picamera.exc.PiCameraError:
194211
pass
195212

196213
return send_file(video, mimetype.get(filename[:-3],'image'), cache_timeout=0)
@@ -292,8 +309,12 @@ def run_server():
292309
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)))
293310
audio = Audio.get_instance()
294311
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+
297318
if app.bot_config.get('load_at_start') and len(app.bot_config.get('load_at_start')):
298319
app.prog = app.prog_engine.load(app.bot_config.get('load_at_start'))
299320
app.prog.execute()

program.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,25 @@ def run(self):
141141
try:
142142
#print "run.1"
143143
bot = coderbot.CoderBot.get_instance()
144-
cam = camera.Camera.get_instance()
145144
program = self
146-
if config.Config.get().get("prog_video_rec") == "true":
147-
get_cam().video_rec(program.name)
148-
logging.debug("starting video")
145+
try:
146+
cam = camera.Camera.get_instance()
147+
if config.Config.get().get("prog_video_rec") == "true":
148+
get_cam().video_rec(program.name)
149+
logging.debug("starting video")
150+
except:
151+
logging.error("Camera not available")
152+
149153
exec(self._code)
150154
#print "run.2"
151155
except RuntimeError as re:
152156
logging.info("quit: " + str(re))
153157
finally:
154-
get_cam().video_stop() #if video is running, stop it
155-
get_motion().stop()
158+
try:
159+
get_cam().video_stop() #if video is running, stop it
160+
get_motion().stop()
161+
except:
162+
logging.error("Camera not available")
156163
self._running = False
157164

158165
def as_json(self):

templates/blocks_adv.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@
225225
</block>
226226
</value>
227227
</block>
228-
</category>
228+
</category>{%if cam%}
229229
<category name="{% trans %}Camera{% endtrans %}" colour="120">
230230
<block type="coderbot_camera_photoTake"></block>
231231
<block type="coderbot_camera_videoRec"></block>
@@ -251,7 +251,7 @@
251251
</block>
252252
<block type="coderbot_adv_findCode"></block>
253253
<block type="coderbot_sonar_get_distance"></block>
254-
</category>
254+
</category>{%endif%}
255255
<category name="{% trans %}Sound{% endtrans %}" colour="220">
256256
<block type="coderbot_audio_say"></block>
257257
<block type="coderbot_audio_record"></block>

templates/blocks_basic.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
<field name="TEXT">Ciao</field>
1010
</block>
1111
</value>
12-
</block>
12+
</block>{%if cam%}
1313
<block type="coderbot_camera_photoTake"></block>
1414
<block type="coderbot_camera_videoRec"></block>
15-
<block type="coderbot_camera_videoStop"></block>
15+
<block type="coderbot_camera_videoStop"></block>{%endif%}
1616
<block type="coderbot_repeat"></block>
1717
<value name="TIMES">
1818
<block type="math_number">

templates/blocks_std.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
</block>
5858
</value>
5959
</block>
60-
</category>
60+
</category>{%if cam%}
6161
<category name="{% trans %}Sensor{% endtrans %}" colour="290">
6262
<block type="coderbot_adv_pathAhead"></block>
6363
<block type="coderbot_adv_findLine"></block>
@@ -69,7 +69,7 @@
6969
</block>
7070
</value>
7171
</block>
72-
</category>
72+
</category>{%endif%}
7373
<category name="{% trans %}Sound{% endtrans %}" colour="290">
7474
<block type="coderbot_audio_say"></block>
7575
</category>

templates/control.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ <h1>CoderBot</h1>
3838
</div>
3939
</div>
4040
<div class="ui-grid-solo">
41-
<div class="ui-block-a">
42-
<button id="b_camera" class="ui-btn ui-btn-inline ui-icon-camera ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Photo{% endtrans %}</button>
41+
<div class="ui-block-a">{%if stream_port%}
42+
<button id="b_camera" class="ui-btn ui-btn-inline ui-icon-camera ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Photo{% endtrans %}</button>{%endif%}
4343
</div>
4444
</div>
4545
<div class="ui-grid-solo">
46-
<div class="ui-block-a">
46+
<div class="ui-block-a">{%if stream_port%}
4747
<button id="b_video_rec" class="ui-btn ui-btn-inline ui-icon-video ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Rec{% endtrans %}</button>
48-
<button id="b_video_stop" class="ui-btn ui-btn-inline ui-icon-cb-stop ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Stop{% endtrans %}</button>
48+
<button id="b_video_stop" class="ui-btn ui-btn-inline ui-icon-cb-stop ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Stop{% endtrans %}</button>{%endif%}
4949
</div>
50-
<div class="ui-block-a">
51-
<button id="b_photos" class="ui-btn ui-btn-inline ui-icon-grid ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Photos{% endtrans %}</button>
50+
<div class="ui-block-a">{%if stream_port%}
51+
<button id="b_photos" class="ui-btn ui-btn-inline ui-icon-grid ui-btn-icon-top ui-btn-traslucent" type="button">{% trans %}Photos{% endtrans %}</button>{%endif%}
5252
</div>
5353
</div>
5454
</div>

0 commit comments

Comments
 (0)