Hauptmenü

ESP32 Cam notify Schleife

Begonnen von urseigner, 23 Februar 2024, 13:06:50

Vorheriges Thema - Nächstes Thema

urseigner

@fz55: Danke für die Idee, das ging bei mir allerdings nicht.

@betateilchen:
Mit dieser DEF im NOTIFY
ESP32CAM_Ausloeser:push define temp_at at +*{3}00:00:02 get ESP32CAM image; set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg

Kommt über Telegram genau ein Bild an.

Im Logfile steht das:
2024.02.28 16:39:07 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:07 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:09 3: IPCAM (ESP32CAM) - Snapshot Image Format: jpg
2024.02.28 16:39:09 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:09 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:09 3: IPCAM (ESP32CAM) - Snapshot Image Format: jpg
2024.02.28 16:39:11 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:11 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 16:39:11 3: IPCAM (ESP32CAM) - Snapshot Image Format: jpg


betateilchen

Wie Du im Logfile sehen kannst, wird das Ganze aber korrekt 3 Mal ausgeführt.

Vermutlich bezeichnet 1708631745312 aber in allen drei Fällen immer das gleiche Bild?
Es sieht nach einem Timestamp aus, der sich in Thu Feb 22 2024 19:55:45 GMT+0000 auflösen lässt.
Aber um das korrekt zu interpretieren, kenne ich IPCAM zu wenig.

Hast Du vielleicht ein Rechteproblem, um das in ./www.snapshots/ liegende Bild zu überschreiben?
Hast Du in dem Verzeichnis mal nachgeschaut, ob da wirklich dreimal ein Bild abgelegt wird?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

urseigner

Nein, das hat etwas mit der Bildgröße und Auflösung zu tun.
Die Datei ./www/snapshots/ESP32CAM_snapshot.jpg wird bei jedem Aufruf von http://192.168.178.198/capture?_cb=1708631745312 mit einem neuen Bild überschrieben.
Das eine Bild, welches ich per Telegram bekomme, ändert sich, wenn ich zwischendurch die Kamera bewege.

Könnte es ein Timing-Problem geben? Der Prozess läuft vielleicht zu schnell ab. Allerdings ändert sich nichts, wenn ich die Zeit hochschraube:

ESP32CAM_Ausloeser:push define temp_at at +*{3}00:00:12 get ESP32CAM image; set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg

Wobei es im Logfile dann doch einen Hinweis gibt:

2024.02.28 17:25:46 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:25:46 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:25:46 3: IPCAM (ESP32CAM) - Snapshot Image Format: jpg
2024.02.28 17:25:58 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:25:58 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:25:58 3: IPCAM (ESP32CAM) - Snapshot Image Format: jpg
2024.02.28 17:26:10 3: IPCAM (ESP32CAM) - getSnapshot URI: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:26:10 3: IPCAM (ESP32CAM) - ExecuteSnapshotRequest blocking: 0, camUrl: http://192.168.178.198/capture?_cb=1708631745312
2024.02.28 17:26:17 0: IPCAM (ESP32CAM) - error while getting snapshot http://192.168.178.198/capture?_cb=1708631745312 - read from http://192.168.178.198:80 timed out

betateilchen

Den Timeout Fehler würde ich in diesem Fall als "Zufall" und nicht im Zusammenhang mit Deinen Experimenten sehen.

Zitat von: urseigner am 28 Februar 2024, 17:29:21Könnte es ein Timing-Problem geben? Der Prozess läuft vielleicht zu schnell ab. Allerdings ändert sich nichts, wenn ich die Zeit hochschraube:

Wenn es ein Timing Problem ist, dann sicher nicht an der Stelle, an der Du jetzt die Zeit verändert hast. Sondern vermutlich eher zwischen dem Abholen des Bildes (get...) und dem Verschicken (set...)

Du könntest versuchen, dazwischen noch ein sleep zu setzen.

ESP32CAM_Ausloeser:push define temp_at at +*{3}00:00:02 get ESP32CAM image; sleep 0.2; set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg
Damit wird 0,2 Sekunden nach dem Befehl zum Abholen des Bildes gewartet, bevor es verschickt wird. Wie lange Deine Kamera braucht, um das Bild zu liefern und abzuspeichern, musst Du bitte selbst rausfinden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

urseigner

Das ändert nichts. Ich habe das mal in die FHEM-Konsole kopiert und beobachtet, wie sich die Readings von temp_at ändern. Das geht einwandfrei. Sieht man ja auch im Logfile. Allerdings erscheint im DEF von temp_at kein
set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg

Das muss doch mit rein, sonst ist ja klar, dass nur ein Bild geschickt wird. Wie siehst Du das?

betateilchen

Deshalb hatte ich ja ursprünglich mehr als ein ; eingefügt und Dich gebeten, mit der Anzahl der Semikolon zwischen den Befehlen zu experimentieren.

Es sei denn, das IPCAM Modul verwurstet irgendwie den kompletten String nach dem "get..." und entsorgt den Rest, mit dem es nichts anfangen kann. Das kann ich nicht abschätzen.
Wenn ich das nachbaue und zwei andere FHEM Befehle in den Ausführungsteil des temp_at einfüge, funktioniert das problemlos.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

urseigner


Wenn ich es so über die Konsole abschicke, setzt er alles ein:
define temp_at at +*{3}00:00:02 get ESP32CAM image sleep 0.6 set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg;;;

Klar, dann fehlt was.

Sobald ich nach image ein ; setze, wird der Rest abgeschnitten. Kann man die ; escapen?

urseigner

Zitat von: betateilchen am 28 Februar 2024, 18:07:20Wenn ich das nachbaue und zwei andere FHEM Befehle in den Ausführungsteil des temp_at einfüge, funktioniert das problemlos.

Zeig mal bitte Deinen Nachbau.

betateilchen

Zitat von: urseigner am 28 Februar 2024, 18:40:51Kann man die ; escapen?

ja, indem man zwei ;; setzt.

Zitat von: urseigner am 28 Februar 2024, 18:48:38Zeig mal bitte Deinen Nachbau.

Kann ich jetzt gerade nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

defmod test_notify notify ESP32CAM_Ausloeser:push define test_at at +*{3}00:00:02 setreading ESP32CAM_Ausloeser d1 1;;;; setreading ESP32CAM_Ausloeser d2 2

Damit werden im device ESP32CAM_Ausloeser zwei readings d1 und d2 erzeugt.
Funktioniert hier einwandfrei.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

urseigner

Okay, dann haben wir's jetzt:
define temp_at at +*{3}00:00:02 get ESP32CAM image;; set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg;;;

Vielen Dank für die Geduld und Hilfe.

betateilchen

Die drei ;;; am Ende kannst Du weglassen, es sollte trotzdem funktionieren, weil danach ja nix mehr kommt.

Und jetzt entfernen wir - wie versprochen - noch das rote Fragezeichen:

define -temporary temp_at ...
 :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

urseigner

#27
Dass Du Dir das mit dem Fragezeichen noch gemerkt hast.
Das sleep war dann doch noch wichtig, da sonst beim erneuten Auslösen das letzte Bild vom vorherigen Auslösen geschickt wurde. So klappt es aber nun einwandfrei:

ESP32CAM_Ausloeser:push define -temporary temp_at at +*{3}00:00:02 get ESP32CAM image;; sleep 0.3;; set teleBot sendImage ./www/snapshots/ESP32CAM_snapshot.jpg

Nochmals Vielen Dank!

VG
Urs