ESP32 Cam über IPCam Module (ohne MQTT) // Kamerabild beim Klingeln per Telegram

Begonnen von MaDu89, 09 Januar 2020, 08:41:47

Vorheriges Thema - Nächstes Thema

MaDu89

Da ich schon länger eine Low-Budget Variante für eine Kameraüberwachung der Hausklingel suche, ist mir nun endlich gelungen, mal was auf die Reihe zu stellen was scheinbar gut funktionieren könnte.
Grundlage ist das preiswerte ESP32 Modul (AI Thinker ESP32-CAM) mit Kamera.
Sobald meine Klingel also betätigt wird, löst die Kamera aus und schickt eine Nachricht + Bild per Telegram an mein Smartphone. Andere Events sind selbstverständlich auch umsetzbar.

Hierzu habe ich folgendes Tutorial benutzt um die ESP Cam erstmal zu laufen zu bekommen...  https://randomnerdtutorials.com/esp32-cam-take-photo-display-web-server/
Im Anschluss habe ich dann das IPCam Module benutzt und verwende folgende Definition...

defmod ESP32Cam IPCAM 192.168.2.117:80
attr ESP32Cam delay 1
attr ESP32Cam path saved-photo/
attr ESP32Cam storage ./www/snapshots


Und das passende notify was mir auf das Türklingeln triggert und ein Bild auslöst und weiterschickt per Telegram


defmod Webcam_Eingang notify ESPEasy_ESP_Hof_Klingel_Hof:Klingel_Hof:.on*

{
fhem "set ESP32Cam raw capture;".
"sleep 5;".
"get ESP32Cam image;".
"set teleBot send ESP32 Cam sendet...;".
"set teleBot sendPhoto /opt/fhem/www/snapshots/ESP32Cam_snapshot.jpg"
}


Das Warten von 5 Sekunden (sleep 5) wird benötigt da das Bild etwas Zeit zum speichern benötigt bevor es abgerufen werden kann (ABER NUR bei hoher Auflösung)
Wer es ganz schnell haben möchte muss nur im ESP32 Quelltext eine kleine Änderung (siehe weiter unten im Beitrag) vornehmen und das Bild wird mit weniger Auflösung = weniger Speicher abgelegt.

Ich werde die Tage die Kamera mal vor der Tür installieren und falls es jemanden interessiert auch gern berichten... habe zu mindestens eine Weile als blutiger Anfänger gebraucht um eine günstige, unauffällige Lösung dafür zu finden.
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

balli1187

Sehr coole Geschichte!
Ich weis zwar noch nicht so genau ob das bei mir nachbauen kann aber ich lese gern mit.


Gesendet von iPhone mit Tapatalk
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

steffen83

Ich lese auch gerne mit und habe zugleich interesse.
Hast du direkt bei Banggood bestellt oder Ali oder doch Amazon?
Hast du das Image/Code vom ihm noch verändert?
Braucht man zwingend eine SD Karte?!
Wenn du es draußen installierst, wie schaut es mit einem Gehäuse aus? Hast du da schon was im Blick?
Braucht man bei dem ESP noch eine externe Antenne?

Fragen über Fragen :D
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

MaDu89

Ich habe tatsächlich die ESP32Cam Module zu Weihnachten von einem Freund geschenkt bekommen und er hat sie aus China über Ebay bestellt.
Den Quellcode habe ich so gelassen und nur meine WLan-Daten eingetragen.
Eine SD Karte ist ebenfalls nicht nötig da das jpg-Bild intern abgelegt wird.
Da ich das Teil vor der Haustür installiere werde ich mir noch was schickes im 3D-Drucker drucken. Wenn ich soweit bin kann ich es auch auf https://www.thingiverse.com/ online stellen. Da ich es unauffällig möchte kommt es mit in die Aufputzdose wo auch die Außenbeleuchtung dran hängt. Wird also ehr was individuelles vom Gehäuse her... Hier aber mal eine Idee die schon nach was aussieht https://www.thingiverse.com/thing:3976752
Eine externe Antenne brauch ich zumindestens nicht da der nächste WLan-Acesspoint nur 7m entfernt steht...
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

MarkusN

Ich habe sowas in der Art bereits umgesetzt.

In einem 3D gedrucktem Gehäuse steckt ein ESP32CAM für das Bild, so wie ein WemosD1 Mini mit Homie an dem ein Klingeltaster (mit zwei Kontakten, einer davon betätigt die Kingel direkt), ein PIR Sensor und ein iButton Reader angeschlossen sind. Ursprünglich war mein Plan alles über das ESP32Cam laufen zu lassen, womit ich bisher jedoch keinen Erfolg hatte.

Das ganze Setup hat jedoch ein paar Probleme:

1) Die direkte Nähe zwischen den beiden ESPs führt zu sporadischen Verbindungsproblemen, und Homie verliert die Verbindung zum MQTT broker
2) Der ESP32Cam ist bei Dunkelheit nicht zu gebrauchen
3) Das eigentliche Ziel war es sowohl einen Videostream (für TabletUI) zu haben, als auch die Möglichkeit ein Snapshot zu machen und per Telegram zu verschicken. Ich habe jedoch keinen Sketch gefunden welcher mir diese Möglichkeiten bietet, und dabei auch stabil läuft. Aktuell läuft der Sketch aus diesem Beitrag auf meinem ESP32Cam. Dabei handelt es sich allerdings um einen MJPEG Stream den ich nicht per IPCam modul einbinden kann, daher habe ich ein kleines Script geschrieben, welches durch FHEM getriggert wird und via ffmpeg ein Snapshot aus dem MJPEG Stream erzeugt, was auch gut und schnell funktioniert (idR weniger als eine Sekunde). Ich kann diesen Stream jedoch nicht gleichzeitig im TabletUI verwenden, da dieser Sketch scheinbar nur eine Verbindung ermöglicht. Ein Stream im TabletUI würde dann den den Zugang blocken, und ffmpeg könnte kein Snapshot mehr extrahieren.

Insgesamt bin ich mit dieser Lösung nicht zufrieden und suche bereits nach Alternativen, besonders für die Kamera. Habe bereits an einen Pi Zero mit IR Kamera Modul gedacht, dort könnte ich vermutlich die zusätzlichen Sensoren problemlos anbinden.

Wie greifst Du dein Klingelsignal ab?

DeeSPe

Zitat von: MaDu89 am 09 Januar 2020, 08:41:47
Da ich schon länger eine Low-Budget Variante für eine Kameraüberwachung der Hausklingel suche, ist mir nun endlich gelungen, mal was auf die Reihe zu stellen was scheinbar gut funktionieren könnte.
Grundlage ist das preiswerte ESP32 Modul (AI Thinker ESP32-CAM) mit Kamera.
Sobald meine Klingel also betätigt wird, löst die Kamera aus und schickt eine Nachricht + Bild per Telegram an mein Smartphone. Andere Events sind selbstverständlich auch umsetzbar.

Hierzu habe ich folgendes Tutorial benutzt um die ESP Cam erstmal zu laufen zu bekommen...  https://randomnerdtutorials.com/esp32-cam-take-photo-display-web-server/
Im Anschluss habe ich dann das IPCam Module benutzt und verwende folgende Definition...

defmod ESP32Cam IPCAM 192.168.2.117:80
attr ESP32Cam delay 1
attr ESP32Cam path saved-photo/
attr ESP32Cam storage ./www/snapshots


Und das passende notify was mir auf das Türklingeln triggert und ein Bild auslöst und weiterschickt per Telegram


defmod Webcam_Eingang notify ESPEasy_ESP_Hof_Klingel_Hof:Klingel_Hof:.on*

{
fhem("set ESP32Cam raw capture");;
sleep 5;;
fhem("get ESP32Cam image");;
fhem("set teleBot send ESP32 Cam sendet...");;
fhem("set teleBot sendPhoto /opt/fhem/www/snapshots/ESP32Cam_snapshot.jpg");;
}


Das Warten von 5 Sekunden (sleep 5) wird benötigt da das Bild etwas Zeit zum speichern benötigt bevor es abgerufen werden kann.

Ich werde die Tage die Kamera mal vor der Tür installieren und falls es jemanden interessiert auch gern berichten... habe zu mindestens eine Weile als blutiger Anfänger gebraucht um eine günstige, unauffällige Lösung dafür zu finden.

Interessant...

Eine Krux habe ich an Deinem Code gefunden, denn das sleep so wie Du es verwendest ist ein Perl sleep und somit blockierend für FHEM. Soll heißen dass in den 5 Sekunden sleep FHEM komplett blockiert ist und nichts anderes abarbeiten kann.
Besser wäre es hier ein FHEM sleep zu benutzen und alle Befehle einfach zu chainen (verketten), etwa so:

{
fhem "set ESP32Cam raw capture;".
"sleep 5;".
"get ESP32Cam image;".
"set teleBot send ESP32 Cam sendet...;".
"set teleBot sendPhoto /opt/fhem/www/snapshots/ESP32Cam_snapshot.jpg"
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

MaDu89

Das Klingelsignal (glaub 8V Wechselspannung) hatte ich mit einer kleinen Platine gleichgerichtet und auf ein Relais gegeben was dann kurz anzieht und ebenfalls am ESP 8266 (Wemos D1) ein signal auslöst und es zu fhem weiterschickt. Das funktioniert seit einigen Jahren auch absolut zuverlässig.
Den Pi Zero W hatte ich auch schon am wickel für diese Aufgabe aber der ist schon wieder verbaut und somit muss erstmal der ESP32 hinhalten.
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

MaDu89

@Dan... Vielen Dank für den Tipp, hab ich gleich mal so umgesetzt ;) bin in Pearl auch eine absolute Null  ::)
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

MaDu89

Um die 5 Sekunden Verzögerung zu vermeiden habe ich im Quellcode für den ESP32 an der Stelle "config.frame_size" nur noch VGA eingetragen. Die Auflösung ist zwar auch "nur" noch 640x480 Pixel aber fürs Smartphone völlig ausreichend und nun passiert der ganze Vorgang unter 1 Sekunde das das jpg-Bild ca. 20kB groß noch ist.

if (psramFound()) {
    config.frame_size = FRAMESIZE_VGA; //Bild Qualität hier einstellen, Default = UXGA (1600x1200)
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_VGA; //Bild Qualität hier einstellen, Default = SVGA (1024x600)
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
 
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

MaDu89

@MarkusN

Zum Thema Raspberry Pi Zero W als Kameraüberwachung hatte ich mal MotionEyeOS aufm Zero laufen aber konnte keine Snapshots in Fhem per IPCam knipsen. Vielleicht war ich vor 2 Jahren noch nicht so weit und würde es jetzt vielleicht schaffen aber eine Idee die etwas blöd klingt aber funktioniert ist Octoprint (für 3D-Drucker eigentlich gedacht) auf dem Pi Zero zu installieren und damit gelingt sowohl ein Livestream in FHEM als auch die Snapshot-Funktion zu nutzen. Da ich es selbst habe (aber für den 3D-Drucker) kann ich die Funktion nur bestätigen.... ist eben nur etwas semi-professional
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

MaDu89

Gerade eben noch installiert nur leider muss ich das Kamerabild noch 180 Grad drehen. Ansonsten sehr schnelle Reaktion und erstaunlicherweise gutes Bild für das kleine Teil. Vorteil ist natürlich das im Dunkel an der Eingangstür auch ein Licht angeht und somit es überhaupt möglich ist ein Bild bei schlechtem Licht zu machen.

https://i.ibb.co/db1fKHJ/Telgramm-Screenshot.png
RPi 3 B+mit FHEM, PiHole, PiVPN, Homatic, ESP8266, ESP32 Cam, Sonoff, Sonoff Pow, Shelly, 433MHz Funksteckdosen, ETA Pelletheizung, IPCam, RGB Controller LK35, MediaServer, Volumio, NAS/Backup, Homebot LG, FRITZ!Box 7560, Telegram, Dot-Matrix MAX 7219, SmartMirror, 3D-Drucker...seit 2017 stabil!

Tungsten

Ich nutze diesen Sketch für die ESP32-cam:
https://github.com/easytarget/esp32-cam-webserver

Device:
defmod ESP32_Cam1 IPCAM 192.168.178.54
attr ESP32_Cam1 DbLogExclude .*
attr ESP32_Cam1 delay 0
attr ESP32_Cam1 icon it_camera
attr ESP32_Cam1 path capture
attr ESP32_Cam1 room 8_Webcams
attr ESP32_Cam1 snapshots 1
attr ESP32_Cam1 storage ./www/snapshots



Wemos D1 mini mit ESPeasy welcher an der Klingel hängt


defmod ESPEasy_ESP_Easy_miniPro_1_Klingel ESPEasy 192.168.178.34 80 espBridge ESP_Easy_miniPro_1_Klingel
attr ESPEasy_ESP_Easy_miniPro_1_Klingel DbLogExclude .*
attr ESPEasy_ESP_Easy_miniPro_1_Klingel IODev espBridge
attr ESPEasy_ESP_Easy_miniPro_1_Klingel Interval 60
attr ESPEasy_ESP_Easy_miniPro_1_Klingel group ESPEasy Device
attr ESPEasy_ESP_Easy_miniPro_1_Klingel presenceCheck 1
attr ESPEasy_ESP_Easy_miniPro_1_Klingel readingSwitchText 1
attr ESPEasy_ESP_Easy_miniPro_1_Klingel room ESPEasy
attr ESPEasy_ESP_Easy_miniPro_1_Klingel setState 3



Doif
defmod ESPeasyTuerklingel DOIF ([ESPEasy_ESP_Easy_miniPro_1_Klingel:Dummy]eq "on")\
\
\
(\
\
set FritzBox ring 613 12;;\
get ESP32_Cam1 image;;\
set telegram message @xyz Haustürklingel;;\
set telegram sendImage @xyz ./www/snapshots/ESP32_Cam1_snapshot_1.jpg\
\
\
) \
\
\
DOELSE

steffen83

ich hab das auch mal so umgesetzt. Und deinen Code noch etwas erweitert. So kannst du das Licht an/aus schalten

defmod ESP32_Cam1 IPCAM 192.168.0.135
attr ESP32_Cam1 cmd01 var=lamp&val=0
attr ESP32_Cam1 cmd02 var=lamp&val=50
attr ESP32_Cam1 cmd03 var=lamp&val=100
attr ESP32_Cam1 delay 0
attr ESP32_Cam1 eventMap /cmd 1:light0/cmd 2:light50/cmd 3:light100
attr ESP32_Cam1 icon it_camera
attr ESP32_Cam1 path capture
attr ESP32_Cam1 pathCmd control
attr ESP32_Cam1 room 8_Webcams
attr ESP32_Cam1 snapshots 1
attr ESP32_Cam1 storage ./www/snapshots
attr ESP32_Cam1 webCmd light0:light50:light100
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM