Security Cam

Last Updated on 30 december 2024 by Syds

Op internet zijn er legio tutorials te vinden over het omturnen van een ESP32-Cam ontwikkelbord tot een heuse beveiligingscamera. Tijd om er eens zelf te maken.

Het idee is om een ESP32-Cam ontwikkelbord, met een cameralens, te voorzien van een Tasmota Webcam image. Vervolgens te koppelen met Domoticz. Op de plek waar ik de security cam wil plaatsen, namelijk gericht op de oprit, hangt een bewegingsmelder voor het aansturen van de buitenverlichting. Deze bewegingsmelder is reeds geïntegreerd binnen Domoticz (zie mijn tutorial https://www.sydspost.nl/index.php/2021/04/26/bewegingsmelder-slim-maken-met-shelly-i3/). Ik wil de door deze bewegingsmelder gesignaleerde beweging de security cam laten triggeren en één of meer foto’s laten maken of een video gedurende de tijd dat er beweging wordt gesignaleerd. Zodra er beweging wordt gesignaleerd wordt er een notificatie via Domoticz verstuurd naar mij emailadres en/of een pushsaver bericht. De bewegingsmelder is aangesloten op het elektriciteitsnet. Qua voeding zit ik te denken aan een HI-Link PCB voeding of iets dergelijks die aangesloten wordt op het elektriciteitsnet via de bewegingsmelder zodat ik geen extra kabels hoef te trekken.

Onderdelenlijst:

AantalOnderdeelTe bestellen bijKosten
1ESP32-Cam ontwikkelbordwww.aliexpress.com€ 6,71
1WiFi 2.4ghz antenne + IPX naar SMA kabelwww.aliexpress.com€ 3.55
1Hi-Link HLK-PM03 converterwww.aliexpress.com€ 3,35
22-voudige PCB terminalOp voorraad
2Female dupont connectorsOp voorraad
1PCB prototype board 70x30mmOp voorraad
1FD 10S kabeldoos 80x43x36mmMarkthal Berltsum€ 1,99
0,5 meterdun twee-aderig draadOp voorraad

Benodigdheden:

  • ESP32-CAM-MB USB module of FTDI-USB adapter
  • USB-C kabel
  • Krimptang voor dupont connectors
  • 3D-printer + PLA
  • Boormachine met 6mm boortje

Up-and-running:

  • Domoticz server, met MQTT plugin
  • MQTT-server
  • Optioneel t.b.v. Stap 6:
    • Google account (of account voor andere cloudopslag)
    • rclone geïnstalleerd op Domoticz server en geconfigureerd voor Google Drive (of andere cloudopslag), zie ook https://rclone.org/drive/

Stap 1. Domoticz configureren

We voegen eerst een virtuele sensor toe aan Domoticz. Kies voor Instellingen, Hardware en op de regel “Virtuele devices” voor “Maak virtuele sensoren”:

Het volgende scherm verschijnt:

Geef de virtuele sensor een logische naam, bijvoorbeeld “Beveiligingscamera Oprit” en als Sensor Type “Schakelaar”, en klik op OK:

Kies in het hoofdmenu van Domoticz voor het tabblad “Schakelaars”, en zoek de virtuele sensor op die je net aangemaakt hebt. Klik op “Aanpassen”, het volgende scherm verschijnt:

Noteer het IDX-nummer voor de volgende stap, in mijn geval dus 346. Onderstaand een toelichting op de niet default instellingen:

AttribuutWaardeToelichting
NaamBeveiligingscamera OpritLogische naam
Schakelaar icoonSecurity CamZie de wiki voor het toevoegen van eigen iconen aan Domoticz. Icons kun je hier downloaden.

En klik op “Aanpassen”. Je keert terug naar het overzicht met je schakelaars. We gaan nu de webcam toevoegen aan Domoticz. Kies in het hoofdmenu voor Instellingen -> Meer Opties -> Camera’s. Klik op “+ Camera toevoegen”, het volgende scherm verschijnt:

Onderstaand een toelichting op de niet default instellingen:

AttribuutWaardeToelichting
NaamBeveiligingscamera OpritLogische naam
IP Adresbeveiligingscamera-opritfqdn-naam of IP-adres van je ESP32, zie volgende stap
ImageUrlwc.jpgDefault voor Tasmota

Klik op “Add” om de camera toe te voegen, we testen deze later na de volgende stap. We koppelen nu de camera aan de schakelaar die je hiervoor hebt toegevoegd. Selecteer de camera en kies onderaan het scherm bij “Apparaat/Groep:” de Beveiligingscamera Oprit schakelaar die je hiervoor hebt aangemaakt, en klik op toevoegen:

Bij de schakelaar komt nu een klein camera icoontje te staan ten teken dat de schakelaar gekoppeld is aan een camera:

De volgende stap is optioneel. In mijn geval wil ik de camera een snapshot laten maken zodra de bewegingsmelder op de oprit beweging detecteert. Hiervoor voeg ik ook de bewegingsmelder toe aan “Actieve apparaten/groepen”:

Tot slot configureren we in de emailinstellingen dat er een foto meegestuurd moet worden bij de emailnotificatie. Klik op Instellingen -> Instellingen, kies voor het tabblad “E-mail”, het volgende scherm verschijnt:

Vink de optie “Stuur camerabeelden als bijlage (Gmail)” aan en klik op “Bewaar Instellingen”.

Indien je E-mail notificaties überhaupt nog niet hebt ingesteld, volg dan de instructies op de wiki van Domoticz. Voor het configureren van Pushsafer notificaties verwijs ik je graag naar stap 8. van mijn Bel camera tutorial: https://www.sydspost.nl/index.php/2021/03/16/slimme-bel-met-camera/

Je bent klaar met het configureren van Domoticz.

Stap 2. ESP-32 CAM voorzien van Tasmota Webcam image en configureren

Sluit de ESP-32 CAM met behulp van een ESP32-CAM-MB USB Module of FTDI-USB adapter en USB-C kabel aan op je laptop/desktop.

Installeer Tasmota Webcam m.b.v. de webtool op https://tasmota.github.io/install/. Kies voor de Tasmota32 WebCam (english) release, de rest wijst zich zelf dit inclusief het instellen van je WiFi SSID en Password.

Open het menu van het device in je browser, en kies voor “Configuration”, het volgende scherm verschijnt:

Kies voor “Configure Other”, het volgende scherm verschijnt:

Onderstaand een toelichting op de niet default instellingen:

AttribuutWaardeToelichting
Template{“NAME”:”AITHINKER CAM”,”GPIO”:[4992,1,672,1,416,5088,1,1,1,6720,736,704,1,1,5089,5090,0,5091,5184,5152,0,5120,5024,5056,0,0,0,0,4928,576,5094,5095,5092,0,0,5093],”FLAG”:0,”BASE”:2}Knip en plak de waarde in dit veld
ActivateVink aanHiermee activeer je bovenstaande template
HTTP API enableVink aanDe HTTP API is nodig zodat Domoticz de foto kan ophalen
MQTT enableVink aanDe communicatie met Domoticz verloopt via de MQTT server
Device NameBeveiligingscamera-OpritHerkenbare naam van het device, komt boven het hoofdmenu te staan.

Klik op “Save”, als je op het hoofdmenu terugkeert kies dan opnieuw voor “Configuration” en vervolgens voor “Configure Wifi”, het volgende scherm verschijnt:

Onderstaand een toelichting op de niet default instellingen:

AttribuutWaardeToelichting
HostnameBeveiligingscamera-OpritFQDN-naam van het device, zie ook stap 1.

Klik op “Save”, als je op het hoofdmenu terugkeert kies dan opnieuw voor “Configuration” en vervolgens voor “Configure Wifi”, het volgende scherm verschijnt:

Onderstaand een toelichting op de niet default instellingen:

AttribuutWaardeToelichting
Host<ip-address of FQDN-naam van je MQTT server>

Klik op “Save”, als je op het hoofdmenu terugkeert kies dan voor “Tools” en vervolgens voor “Console”. De console verschijnt. Toets achtereenvolgens de volgende commando’s in op de command prompt:

Rule1 ON System#Boot DO WcInit ENDON
Rule1 1
WcResolution 5
WcFlip 1

Toelichting op de commando’s:

CommandoToelichting
Rule1 ON System#Boot DO WcInit ENDONDeze rule zorgt ervoor dat de camera geinitialiseerd wordt bij het opstarten van het systeem.
Rule1 1Zet de rule aan
WcResolution 5Zet de camera resolutie op CIF (400×296)
WcFlip 1Roteert het beeld 180 graden

Je bent nu klaar met het configureren van Tasmota. We sluiten dit af met enkele tests. We gaan eerst de camera testen. Ga hiervoor terug naar Domoticz, en kies voor Instellingen -> Meer opties -> Camera’s. Klik op het video icoontje om de video stream te starten.

Het volgende scherm verschijnt:

Excuses voor de slechte foto,
het was al schemerig toen ik deze foto nam

De camera werkt binnen Domoticz ! Nu nog de email notificatie testen. Navigeer binnen Domoticz naar Schakelaars en kies de virtuele schakelaar die je in stap 1. hebt aangemaakt, zet die aan en check je mail:

Zet de schakelaar daarna uit. Dat werkt allemaal, op naar de volgende stap, het printen van een casing.

Stap 3. Casing printen

Ik heb een mooie behuizing voor de ESP32-Cam gevonden op Thingiverse: https://www.thingiverse.com/thing:5373465. Download de files en print die uit, je krijgt dan onderstaande onderdelen.

Hieronder de geprinte onderdelen:

Stap 4. Assemblage

Met een 6mm boortje maken we één van de uitsparingen in de body iets groter zodat we daar de antennekabel in kunnen monteren.

oplus_262144

Vervolgens klikken we de antennekabel op de ESP32-CAM, de aansluiting zit net boven de S van ESP-32S. Dit gaat best moeizaam, gebruik eventueel voorzichtig een tangetje om ze op elkaar te klikken.

oplus_262176

Vervolgens plaatsen we de ESP32-CAM in de body en zekeren die met het geprintje stripje en een zelftappend schroefje.

Nu gaan we de voedingsdraad doorvoeren. Neem een stukje twee-adering draad en voer dit door de swivel, voer de draad door het rechtergat van de body, en klik de body op de swivel. Haal de draad door de connector en druk de connector in de swivel. Haal de draad door de muursteun en klik de swivel met connector op de muursteun.

We splitsen de draad en strippen deze 3-4mm. Met een krimptang knippen we er twee female dupont connectors op. We werken dit af met een klein stukje krimpkous. Vervolgens koppelen we de ene draad met de 3.3v (3v3) aansluiting van de ESP32-CAM, en de andere met een ground (GND) aansluiting. Tot slot drukken we het deksel op de body.

Stap 5. Voeding

Voor de voeding gebruik ik een Hi-Link HLK-PM03 converter, deze zet 220 volt AC om naar 3.3v DC. De converter soldeer ik samen met twee terminals op een stukje printplaat.

oplus_262176

Soldeer de componenten op de PCB, en verbindt de terminals m.b.v. een stukje koperdraad met de in- en output pins van de Hi-Link.

oplus_262176

Nu gaan we de security cam bevestigen op de kabeldoos. Hiervoor boren we twee 3mm gaatjes in het deksel van de kabeldoos. Leg de “Wall mount” die je geprint hebt op het deksel en teken alle drie de gaten af. Boor met een 3mm boortje alle drie de gaten. Schroef m.b.v. twee moertjes en boutjes de Wall mount op het deksel van de kabeldoos. Steek het draad door het middelste gat en schuif de camera op de kabeldoos. Verbindt de draden met de output terminal van de voeding, let er op dat je de + (3.3v) en de – (gnd) goed om bevestigd.

Plaats de voeding onderste boven in de kabeldoos en sluit het deksel.

Je security cam is klaar om ergens gemonteerd te worden, veel kijkplezier 😉

Stap 6. Video verzenden via Pushsafer

Deze stap is optioneel, maar stelt je in staat om een video opname te maken na een gesignaleerde beweging, via Pushsafer hiervan een notificatie te krijgen op je telefoon en de video op je telefoon te bekijken.

Grofweg is de werking als volgt. De bewegingsmelder triggert een Unix Shell script. Dit Shell script maakt m.b.v. de utility ffmpeg een videoclip van n seconden, slaat deze videoclip op in Google Drive zodat deze toegankelijk is via internet. En stuurt vervolgens een notificatie naar je telefoon met een link naar voorgenoemde video.

We beginnen met het Unix script:

#!/bin/sh
# Auteur: S. Post
# Website: www.sydspost.nl
# Versie: 1.0
#
Prefix="<prefix>"                           # Prefix bestandsnaam
domoticzUrl="http://<FQDN of IP-address>:8080" # http(s) url van je Domoticz server
if [ ! -f /tmp/$Prefix.txt ]; then          # Als oprit.txt al bestaat, dan draait dit script al/nog en volgt een exit
  echo 1 > /tmp/$Prefix.txt                 # Maakt <Prefix>.txt aan
  now=$(date +%d-%m-%Y_%T)                  # vult variable now met juiste datum/tijd formaat t.b.v. unieke bestandsnaam

  TempDir="/tmp/"                           # Directory voor wegschrijven tijdelijke bestanden
  SnapFile="$Prefix_$now.mp4"               # vult variable SnapFile met bestandsnaam van video
  PictureFile="$Prefix_$now.jpg"            # vult variable PictureFile met bestandsnaam van snapshot
  remote="<rclone config naam>"             # Naam van rclone configuratie google Drive
  driveMap="<mapnaam>"                      # Naam van de map in google Drive waar de camerabeelden in opgeslagen dienen te worden
  idx="<idx schakelaar beveiligingscamera>" # IDX van de beveiligingscamera in Domoticz
  VideoLength=10                            # Seconds to record
  WaitTime=15                               # Seconds the script waits before it sends another video
  rtspUrl="rtsp://<FQDN op IP-address camera>:8554/mjpeg/1" # URL van beveiligingscamera
  httpUrl="http://<FQDN op IP-address camera>/wc.jpg"       # http(s) URL van beveiligingscamera
  PushsaferAPIToken="<Pushsafer Token>"     # Pushsafer API token

  wget -q http://<FQDN op IP-address camera>/wc.jpg -O $TempDir$PictureFile # Haal een snapshot op
  ffmpeg -y -hide_banner -nostats -loglevel error -i $rtspUrl -r 30 -vcodec copy -an -t $VideoLength $TempDir$SnapFile # Haal video op

  rclone move $TempDir$SnapFile $remote:$driveMap # Verplaats video naar Google Drive, map $driveMap
  DriveLink=`rclone -v link $remote:$driveMap/$SnapFile` # Haal link van SnapFile op uit Google Drive
  Picture=`cat $TempDir$PictureFile | base64 -w 0`  # vult variable Picture met base64 gecodeerde snapshot jpg
  rm $Tempdir$PictureFile                           # Verwijder tijdelijk snapshot bestand
  curl -s --form-string "t=Beveiligingscamera-Oprit" --form-string "m=Beweging op de oprit" --form-string "i=82" --form-string "d=<a|<device group>|<device>" --form-string "u=$DriveLink" --form-string "ut=Video" --form-string "p=data:image/jpeg;base64,$Picture" --form-string "k=$PushsaferAPIToken" https://www.pushsafer.com/api # Zend video en snapshot naar Pushsafer API
  sleep $WaitTime                           # Wacht ingestelde wachttijd WaitTime
  rm /tmp/$Prefix.txt                       # Verwijder <Prefix>.txt zodat een volgende instantie van dit script kan draaien
fi
curl -s --url http://192.168.2.29:8080/json.htm\?type=command\&param=switchlight\&idx=$idx\&switchcmd=Off # Zet schakelaar Beveiligingscamera in domoticz uit

Toelichting op eventueel aan te passen variabelen:

VariabeleMogelijke waardeToelichting
PrefixLogische unieke naamLogische unieke naam als prefix voor bestandsnamen
domoticzUrl<FQDN|IP-address>FQDN of IP-address van je domoticz server
TempDir/<mapnaam>/Map voor je tijdelijke bestanden, let op afsluitende /. Als je hem leeg laat dan wordt de huidige directory gebruikt.
SnapFile$Prefix_$now.mp4Unieke naam van videobestand
PictureFile$Prefix_$now.jpgUnieke naam van jpg snaphot
remote<rclone config naam>Achterhaal je rclone config naam van Google Drive (of andere cloudopslag) middels het commando “rclone config”
driveMap<mapnaam>Naam van de map in Google Drive waar de opgenomen beelden in opgeslagen dienen te worden
idx<idx>IDX van de virtuele schakelaar van de beveiligingscamera die je in stap 1. hebt aangemaakt
VideoLengthinteger, in secondenopnamelengte video in seconden
WaitTimeinteger, in secondenWachttijd na verwerking beelden voordat nieuwe video verzonden kan worden
rtspUrlrtsp://<FQDN op IP-address camera>:8554/mjpeg/1rtspUrl van de videostream ingeval van een Tasmota Camera
httpUrlhttp://<FQDN op IP-address camera>/wc.jpghttpUrl van de snapshot van een Tasmota Camera
PushsaferAPIToken<PushsaferAPIToken>Het Pushsafer API Token kun je achterhalen in je Pushsafer account en/of Domoticz instellingen (Instellingen -> Instellingen -> Notifications -> Pushsafer -> API Sleutel)

Pas het unix script aan met jou specifieke instellingen en sla de file op in ~/domoticz/scripts. Geef de file een logische naam, bijvoorbeeld “beveilgingscamera.sh”. Zorg voor execute rechten d.m.v. het commando:

chmod 777 <filenaam>

Om de ESP32-CAM een rtsp video stream te laten genereren dient dit nog aangezet te worden. Ga naar je ESP32-CAM en open de console. Type hier het commando:

WcRTSP 1

Laatste stap is het laten starten van het Unix script zodra de bewegingsmelder beweging detecteert. Ga in Domoticz naar de virtuele schakelaar die je in Stap 1. hebt aangemaakt, en klik op “Aanpassen”, het volgende scherm verschijnt:

Plaats onderstaande code in het veld “Aan actie”:

script:///<path to domoticz>/domoticz/scripts/<Unix script naam> > /dev/null 2>&1 &

Verander <path to domoticz> naar het pad van jou domoticz installatie, en <Unix script naam> in de naam van het script die je hierboven hebt aangemaakt. Mijn code ziet er als volgt uit:

script:///home/pi/domoticz/scripts/beveiligingscamera-oprit.sh > /dev/null 2>&1 &

Sla op. Je kunt de werking nu testen door de schakelaar van je Beveiligingscamera op “Aan” te klikken. Als alles goed is gegaan zie je de volgende notificatie in Pushsafer:

screenshot_2024-12-30-16-17-43-53_67c943117fb812afe40d666790a5c6674680939404537456843

Klik op “Video”, en bijbehorende video wordt afgespeeld.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *