Webcam: "Kamera offline"-Overlay + Auto-Recovery des Streams
ESP32-CAM haengt sich gelegentlich auf -> Bild blieb leer ohne Hinweis. - Grabber merkt sich last_frame_ts; /api/webcam_status liefert online-Flag (online = letzter Frame < 5s her) - webcam.html pollt alle 2s und blendet ein Offline-Overlay ein - Auto-Recovery: kommt die Kamera zurueck, wird der MJPEG-Stream neu angestossen (<img> reconnectet sonst nach Abbruch nicht von selbst) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
12
app.py
12
app.py
@@ -437,6 +437,7 @@ class WebcamGrabber:
|
||||
|
||||
self.latest_jpeg: bytes | None = None
|
||||
self.frame_seq = 0
|
||||
self.last_frame_ts = 0.0 # time.time() des letzten gelieferten Frames
|
||||
self.viewers = 0
|
||||
self.reset_flag = Event()
|
||||
self.line = dict(SAVED_LINE)
|
||||
@@ -511,6 +512,7 @@ class WebcamGrabber:
|
||||
with self.frame_cond:
|
||||
self.latest_jpeg = jpeg
|
||||
self.frame_seq += 1
|
||||
self.last_frame_ts = time.time()
|
||||
self.frame_cond.notify_all()
|
||||
|
||||
def _clear(self):
|
||||
@@ -519,6 +521,10 @@ class WebcamGrabber:
|
||||
self.frame_seq += 1
|
||||
self.frame_cond.notify_all()
|
||||
|
||||
def is_online(self) -> bool:
|
||||
"""True, wenn zuletzt vor < 5s ein Frame kam (Kamera liefert)."""
|
||||
return self.latest_jpeg is not None and (time.time() - self.last_frame_ts) < 5.0
|
||||
|
||||
# -- Hintergrund-Thread (laeuft die ganze Prozess-Lebensdauer) ----------
|
||||
def _run(self):
|
||||
state = new_state()
|
||||
@@ -755,6 +761,12 @@ def get_counting_line():
|
||||
return jsonify(get_line_from_session())
|
||||
|
||||
|
||||
@app.route("/api/webcam_status", methods=["GET"])
|
||||
def webcam_status():
|
||||
"""Liefert, ob der Webcam-Grabber gerade Frames bekommt (Kamera online)."""
|
||||
return jsonify({"online": webcam.is_online()})
|
||||
|
||||
|
||||
@app.route("/api/reset_count", methods=["POST"])
|
||||
def reset_count():
|
||||
data = request.get_json(silent=True) or {}
|
||||
|
||||
Reference in New Issue
Block a user