Slimme bel met camera

Last Updated on 10 juli 2023 by Syds

Je wordt natuurlijk doodgeslagen met allerlei slimme beldrukkers met camera’s, voor ettelijke tientjes heb je al zo’n ding in huis. Veel leuker is natuurlijk je eigen beldrukker met camera te maken. In deze tutorial leg ik uit hoe je met een beperkt budget een beldrukker met camera kan maken. Basis van deze bel-cam is een ESP32-cam.

Use-cases

Als er op de beldrukker gedrukt wordt:

  • wordt er een foto gemaakt
  • deze foto wordt via de app pushsaver naar je android telefoon gestuurd worden, je krijgt dan ook te zien wie er voor de deur staat en
  • de foto wordt opgeslagen in google drive voor archiefdoeleinden en
  • als het donker is gaat het licht in de hal aan
  • de belgong gaat en
  • meerdere keren op de beldrukker drukken wordt gedurende 10 seconden genegeerd

Onderdelen:

ArtikelAantalPrijsWaar
ESP32 Cam1€ 5,57www.aliexpress.com
68/160 Graden OV2640 Camera Module1€ 7,63www.aliexpress.com
Waterdichte Metalen Drukknop Led Licht1€ 1,89www.aliexpress.com
M3 10mm zelftappers2€ 0,20
Zakje Dioxidizer1€ 0Uit doos PLA
PLA40g€ 0,80
KBP310 Bruggelijkrichter 1000V 3A1€ 0,30budgetelectronica.nl
Condensator 50v 4700uF1€ 1,44budgetelectronica.nl
2-voudige terminal1€ 0,10Op voorraad
LM2596S step-down converter1€ 2,95hobbyelectronica.nl
Totaal€ 20,88

Benodigdheden

  • Jumperkabeltjes
  • Soldeerbout + tin
  • Lock-tide lijm
  • 3D printer
  • Schroevendraaier
  • 5V voeding (bijv. oude telefoonlader)
  • Krimpkous
  • Google account
  • FT232RL FTDI – USB TTL Seriële Adapter (alternatief: Raspberry-Pi)
  • Dremel
  • Boormachine met 10mm boor en 2mm en 2,5mm boortje

Up-and-running

  • esptool.py op windows of linux machine
  • Node-red
  • Domoticz
  • MQTT-broker
  • Apache webserver of andere vanaf het web benaderbare opslag (bijv. google drive)
  • Android telefoon
  • Belgong benaderbaar via WiFi/Domoticz

Stap 1. ESP32-CAM flashen met Tasmota32-webcam

Tasmota ondersteund vanaf versie 9 de ESP32-CAM versie. Als volgt de meest recente versie (ten tijde van schrijven van deze tutorial versie 11.0.0) van Tasmota32 op de ESP32-CAM geïnstalleerd. De ESP32-CAM beschikt niet over een usb-poort, dus je moet een FTDI Seriële adapter (of Raspberry Pi) gebruiken om de ESP32-CAM te flashen. Sluit deze aan conform onderstaande pinout:

Pinout

Raspberry Pi/FTDIESP32-CamKleur jumpercable
RXD (GPIO 15)UOT (GPIO 1)Wit
TXD (GPIO 14)UOR (GPIO 3)Blauw
3.3v3.3vPaars
GroundGNDBruin
GroundIO0 (GPIO 0)Bruin

Sluit de FTDI-adapter aan op je laptop. De hardware-setup is hiermee afgerond. Download de meest recente versie van Tasmota32-webcam vanaf deze website: http://ota.tasmota.com/tasmota32/release/tasmota32-webcam.bin

Start vervolgens een command-prompt op en ga naar de directory waar je de binary hebt gedownload, maak het flash-geheugen van de ESP32-CAM leeg met het volgende commando:

esptool.py --chip esp32 --port <jouw compoort> erase_flash

Verander <jouw compoort> in de com-port waar je de FTDI-adapter op hebt aangesloten, bijv. com3. Let op: Zodra esptool de files gaat wegschrijven in het flash-geheugen, de verbinding tussen Ground en GPIO 0 verbreken !

Daarna flashen we ESP32-CAM met de Tasmota32-webcam binary. Verbind opnieuw de GROUND en GPIO 0 pin en herstart de ESP32-CAM door op de reset-knop te drukken

esptool.py --chip esp32 --port <jouw compoort> --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_freq 40m --flash_size detect 0x1000 bootloader_dout_40m.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 tasmota32-webcam.bin

Let op: Zodra esptool de files gaat wegschrijven in het flash-geheugen, de verbinding tussen Ground en GPIO 0 verbreken ! Zodra de esptool klaar is herstart je de ESP32-CAM opnieuw door op de reset-knop te drukken, de ESP32-CAM start nu in AP-mode.

Maak verbinding met de AP (met een naam als tasmota_F12734-1844 oid) en open 192.168.4.1 in de browser (gebeurt automatisch). Vul de WIFI-settings in, sla op door op “Save” te klikken, en de ESP32-Cam reboot.

Achterhaal op je router of DHCP-server het IP-address wat de ESP32-CAM heeft gekregen, en maak met je browser verbinding. In mijn geval heeft de ESP32-CAM IP-address 192.168.2.144 gekregen.

Als je de camera aangesloten hebt geeft deze gelijk beeld. We gaan nu het device verder configureren, klik op ‘Configuration” en daarna op ‘Configure module’. Kies bij Module type voor “ESP32-Cam (2)”, stel GPIO12 als “Switch” “1” in, en klik op “Save”. De ESP32-CAM reboot.

Klik opnieuw op “Configuration” gevolgd door “Configure WiFi”, stel de Hostname in op “bel-cam” en klik op “Save”. De ESP32-CAM reboot.

Klik opnieuw op “Configuration” en daarna op “Configure MQTT”. Vul bij “Host” de naam of het IP-address van je MQTT-server in, in mijn geval “192.168.2.29”. De rest van de instellingen kun je default laten (tenzij je een ander Port-nummer aan je MQTT-server hebt toegekend, vul die dan bij “Port” in). Klik op “Save”, de ESP32-CAM reboot.

Het configureren van Domoticz slaan we even over, dat komt later. Als je geen syslog-server (zie ook mijn tutorial over het inrichten van een syslog server hier) hebt kun je ook de volgende stap overslaan.

Klik opnieuw op “Configuration” en daarna op “Configure logging”. Vul bij “Host” de naam of het IP-address van je SYSLOG-server in, in mijn geval “192.168.2.29”. De rest van de instellingen kun je default laten (tenzij je een ander Port-nummer aan je SYSLOG-server hebt toegekend, vul die dan bij “Port” in). Klik op “Save”.

Kies voor “Configure Template”, selecteer bij GPIO12 “Switch” en “1” als dit nog niet default ingesteld staat en klik op “Save”. De ESP32-CAM reboot.

Stap 2. Beldrukker aan Domoticz toevoegen, en Tasmota afconfigureren.

Kies binnen Domoticz voor “Instellingen”, “Hardware”. Klik bij “Virtuele devices” op “Maak virtuele sensoren”. (Mocht je nog geen “Virtuele devices” optie onder Hardware hebben, maak deze dan aan conform de beschrijving op de Domoticz site). Geef de virtuele sensor de “Naam” $Beldrukker, en als “Sensor Type” kies je voor “Schakelaar”. Klik op “OK”.

Kies nu voor “Instellingen”, “Apparaten” en zoek het device wat je net hebt toegevoegd (gebruik eventueel de Search optie, of sorteer op IDX aflopend). Noteer de IDX van het device, in mijn geval IDX 123.

We gaan nu terug naar de ESP32-CAM met Tasmota. Kies nu in het hoofdmenu voor “Consoles” en vervolgens op “Console”

Typ op de commando lijn achtereenvolgens de volgende commando’s in, afgesloten met een [Enter]. Vul bij <IDX> het IDX-nummer in wat je net hebt opgeschreven. In mijn geval dus 123.

SwitchMode1 14
SwitchTopic 0
Rule1 on Switch1#State do publish domoticz/in {"idx":<IDX>,"nvalue":%value%,"svalue":"0"} endon
Rule1 

Klik vervolgens op “Consoles”, “Main Menu” en op “Configure Domoticz”. Vul bij “Switch idx 1” het IDX nummer in wat je net hebt genoteerd, en mijn geval “123”. Klik op “Save”, de ESP32-CAM reboot.

Je bent nu klaar met het configureren van Domoticz en de ESP32-CAM met Tasmota.

Stap 3. Assemblage van de hardware

We gaan nu de hardware in elkaar zetten. Haal de FTDI-adapter uit je laptop/raspberry pi en haal de jumperkabeltjes los. Pak drie female-female kabeltjes in verschillende kleuren, en knip van één zijde het stekkertje af. Strip de uiteinden en vertin de draadjes, schuif een klein stukje krimpkous op de jumperkabeltjes. Soldeer nu de drie jumperkabeltjes conform onderstaande pinout op de metalen drukknop.

Pinout

ESP32-CamBeldrukker
GPIO 12NO
GNDC
VCC OUT+
GND
De – en de C heb ik met een klein stukje draad aan elkaar verbonden.

Steek de stekkertjes vervolgens conform bovenstaande pinout-beschrijving op de ESP32-CAM. Voed nu de ESP32-CAM vanuit de FTDI-adapter door alleen de 5v en GND met jumperkabeltjes te verbinden, of maak van een oude USB kabel een tijdelijke voedingskabel. Door een USB 2.0 kabel af te knippen, en het rode draadje te verbinden aan de 5VDC input van de ESP32-Cam, en de zwarte draad aan de GND heb je een tijdelijke voedingskabel gemaakt. Gebruik eventueel een kroonsteentje en twee male-female jumperkabeltjes, dit vergemakkelijkt het aansluiten.

Sluit de OV2640 camera aan door het klepje van de FPC-connector te openen. Daarna kan de camera module in de connector worden geschoven en het klepje weer ingedrukt worden.

ESP32-CAM - WiFi en Bluetooth Board met OV2640 Camera - ESP32CAM

In de volgende stap gaan we een 3D geprinte behuizing maken waarin we bovenstaande electronica onderbrengen.

Stap 4. Behuizing printen

Op thingiverse.com een mooi ontwerp gevonden voor de beldrukker, deze bestaat uit een basis waar een cover overheen schuift.

Meer info over beide delen van de behuizing in onderstaande tabel.

OnderdeelAantalKleurDoorlooptijdDoorlooptijd totaalGramTotaal gramFile
Body1Wit1502121Doorbell_body_v1_2.stl
Basis1Wit1451919Doorbell_base_v1_2.stl

De beide delen met de volgende printsettings op mijn Creality Ender 5 Pro geprint. Hierbij de volgende printersettings gehanteerd

SettingWaarde
Extruder temperature200o
Hotbed temperature50o
Layer height0,2 mm
Infill density30% cubic
Wall/Top thickness1,2 mm
Generate supportUitgevinkt
RetractionAangevinkt
Printing Speed80mm/s
Cooling100%

En hier de verschillende geprinte onderdelen:

Stap 5. Electronica in behuizing plaatsen

Het gat voor de beldrukker was iets te klein. Waarschijnlijk heeft de ontwerper van de behuizing een 16mm variant gebruikt. Met een dremel heb ik het gat iets opgeruimd. Duw de beldrukker door het gat in de behuizing en borg de beldrukker door de meegeleverde schroef aan de achterkant vast te draaien.

Ook het gat voor de camera was iets te klein. Volgens de schuifmaat was de diameter van mijn OV2640 camera 10mm. Met een 10mm metaalboor en mijn boormachine het gat iets groter gemaakt. Met een drup Lock-tide secondenlijm de camera vastgezet in het gat. Let op dat je de camera met de juiste kant naar boven plaatst. Had dit van te voren even getest en een pijltje op de achterkant van de camera gezet.

De camera-module op de FDC connector van de ESP32-CAM gemonteerd, de jumperkabeltjes van de beldrukker aangesloten en het geheel in de behuizing geplaatst. Dit inclusief een zakje Dioxidizer die ervoor zorgt dat eventueel vocht opgenomen wordt.

De basis en de body op elkaar geplaatst en door de zijkant met een 2mm boortje twee gaatjes geboord. Daarna de basis en de body weer uit elkaar gehaald en de gaatjes in de body iets ruimer gemaakt met een 2,5mm boortje. Tevens in de basis twee gaatjes geboord waar straks de schroeven door heen kunnen om de beldrukker naast de deur te bevestigen. Tijdelijk de USB-kabel als voedingskabel gebruikt en doorgevoerd door het gaatje van de basis. De basis en de body weer op elkaar geplaatst en met twee M2,5 10mm zelftappende schroefjes vastgezet.

Stap 6. Voeding gemaakt

Mijn intentie is om de bel-camera te voeden vanuit de beltrafo die in mijn meterkast zit. Dit betreft een Hager ST303N trafo die 8v wisselstroom levert. Aangezien de ESP32-CAM 5v gelijkstroom nodig heeft dient de wisselstroom omgezet te worden naar gelijkstroom, en qua voltage teruggebracht naar 5v.

Hiervoor gebruik ik een KBP310 gelijkrichter in combinatie met een 4700uF 50v condensator en een LM2596S DC-DC step-down converter. Door het gelijkrichten van de wisselstroom neemt het voltage toe met √2, dus 8 * 1,41 = 11,3v, echter de KBP310 “verbruikt” ongeveer 1.2v, dus de output wordt zo’n 10,1v. Door het toepassen van de step-down converter kun je dit trapsgewijs door het instellen van de potmeter terugbrengen naar de gewenste 5v.

Het aansluiten gaat als volgt. De twee binnenste poten van de KBP310 is de input, let daarbij op de + en de -. Sluit hier de bel-trafo op aan. De buitenste twee poten van de KBP310 zijn de output, plaats daar de 4700uF condensator tussen. Let daarbij ook weer goed op dat de – van de condensator op de – output van de KBP310 komt. Sluit vervolgens de + en de – vanaf de condensator aan op de input van de LM2596S.

Nadat je de output spanning van de LM2596S step-down converter met behulp van een multimeter en een klein schroevendraaiertje terug hebt gebracht naar 5v kun je de output aansluiten op 5v en ground pins van de ESP32-CAM. De voeding is daarmee gereed.

Tot slot van Thingiverse.com een handige Project box gedownload met met mijn 3D printer geprint. Zie https://www.thingiverse.com/thing:4801005/files, ik heb voor de 80x50x35 variant gekozen. Hierbij in Ultimaker CURA het Z-coordinaat gescaled naar 60mm, zodat de grootte 80x50x60 (lxbxh) wordt.

Tot zover de hardware. Verder met de logica om de verschillende use-cases te kunnen invullen.

Stap 7. Node-red flow aangemaakt

De use-case “de foto wordt opgeslagen in google drive voor archiefdoeleinden” heb ik op twee manieren ingevuld, de foto wordt opgeslagen op mijn raspberry pi zodat ik de foto’s via een webserver kan raadplegen (en wellicht later nog een fancy user interface voor kan maken) én de foto wordt opgeslagen in Google Drive. We beginnen met het opslaan van de foto’s op de raspberry pi.

Maak een directory aan waar de gecapturede foto’s van je camera worden opgeslagen, bijv. /home/pi/bel-cam, en geef de juiste rechten

$ sudo mkdir /home/pi/bel-cam
$ sudo chmod 755 /home/pi/bel-cam

Als je geen webserver op je raspberry pi hebt draaien, kun je de volgende stap overslaan. In het geval je wel een webserver up-and-running hebt, maak dan een symbolic link vanuit de root van je webserver naar /home/pi/bel-cam. In mijn geval is de domeinnaam van mijn webserver sydspost.nl, de root van de webserver is dan /var/www/html/sydspost.nl. Mbv het volgende commando een symbolic link gemaakt

$ sudo ln -s /home/pi/bel-cam /var/www/html/sydspost.nl/bel-cam

Tweede stap is een directory aanmaken in je Google Drive waar je je camerabeelden wilt opslaan, ik mijn geval heb ik er voor gekozen om een map “Camerabeelden” aan te maken in de hoofdmap van Google Drive. Ik gebruik het unix commando “rclone” om de foto’s te kopieren naar Google Drive. Om dit commando te kunnen gebruiken moet je wel het een en ander configureren. Hoe en wat heb ik eerder een keer beschreven in mijn blog “Backup maken”, zie https://www.sydspost.nl/index.php/2021/05/10/backup-maken/, stappen 1 t/m 3.

Vervolgens in node-red de volgende flow gemaakt:

Hieronder per node een toelichting

NodeToelichting
domoticz/inMQTT node, luistert naar het topic “domoticz/in”. Verander onder server het IP-address (en eventueel port nummer) van je MQTT-server
Select deviceAls er een MQTT-bericht langskomt, filter dan de berichten voor idx:<IDX> uit. Verander in deze node de IDX 123 in het IDX wat je eerder in stap 4. hebt opgeschreven. Dus “idx”:<IDX>,”nvalue”:1 is in mijn geval “idx”:123,”nvalue”:1
Filename timestamp fcmGenereerd op basis van datum/tijd een unieke filenaam
Capture pictureCaptured een image van je ESP32-CAM. Verander hier bij URL de FQDN hostname van je ESP32-CAM, http://bel-cam.<domainname>/wc.jpg (is in mijn geval http://bel-cam.sydspost.nl/wc.jpg)
OutputSchrijft de gecapturede foto weg naar /home/pi/bel-cam
Rclone copyHiervoor een exec node gebruikt die het volgende commando genereert: rclone copy <msg.filename> drive:Camerabeelden

Hieronder de export van de flow

[{"id":"31072e17.f2fae2","type":"tab","label":"Bel-cam to FCM","disabled":false,"info":""},{"id":"11cdf6e4.1f9f39","type":"mqtt in","z":"31072e17.f2fae2","name":"domoticz/in","topic":"domoticz/in","qos":"2","datatype":"utf8","broker":"51525e54.17f38","x":130,"y":200,"wires":[["18369cb2.39f1f3"]]},{"id":"18369cb2.39f1f3","type":"switch","z":"31072e17.f2fae2","name":"Select device","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"\"idx\":156,\"nvalue\":1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":340,"y":200,"wires":[["3f2345be.b2429a"]]},{"id":"c4aeb59a.e707a8","type":"http request","z":"31072e17.f2fae2","name":"Capture picture","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://bel-cam.sydspost.nl/wc.jpg","tls":"","persist":false,"proxy":"","authType":"","x":800,"y":200,"wires":[["4c9e8b20.c0fa54"]]},{"id":"4c9e8b20.c0fa54","type":"file","z":"31072e17.f2fae2","name":"Output","filename":"msg.filename","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1010,"y":200,"wires":[["c09a5027.4103c"]]},{"id":"3f2345be.b2429a","type":"function","z":"31072e17.f2fae2","name":"Filename timestamp fcm","func":"\nDate.prototype.pad2 =      function(n) {  \n  return (n < 10 ? '0' : '') + n;\n};\n\nDate.prototype.yyyymmdd = function() {\n  return  this.getFullYear()+this.pad2(this.getMonth() + 1)+this.pad2(this.getDate());\n};\n\nDate.prototype.yyyymmddThhmmss = function() {\n  return \"D\"+this.yyyymmdd()+\"T\"+ this.pad2(this.getHours())+ this.pad2(this.getMinutes())+ this.pad2(this.getSeconds());\n};\n\nmFilename = new Date().yyyymmddThhmmss() + \".jpg\"\n\nmsg.filename = \"/home/pi/bel-cam/\" + mFilename;\nmsg.gdriveFilename = \"drive:Camerabeelden/\" + mFilename;\nmsg.url = \"https://sydspost.nl/bel-cam/\" + mFilename;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":200,"wires":[["c4aeb59a.e707a8"]],"info":"Standard timestamps can't be used to build filenames, but sometimes it is useful to have a time indication in a unique file name (logs, data, etc.)\nThis node creates timestamps to be used in filenames.\n### How it works\nThis node adds 3 new functions to Date()\n * pad2(n) returns like \"03\"\n * yyyymmdd() returns like \"20200310\"\n * yyyymmddThhmmss() returns like \"D20200310T104655\"\n\n### How use it\n**input:** a trigger msg (any)\n\n**output:** msg.payload = timestamp by yyyymmddThhmmss()\n"},{"id":"c09a5027.4103c","type":"exec","z":"31072e17.f2fae2","command":"rclone copy","addpay":"filename","append":"drive:Camerabeelden","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1230,"y":200,"wires":[[],[],[]]},{"id":"51525e54.17f38","type":"mqtt-broker","name":"pi","broker":"192.168.2.29","port":"1883","clientid":"","usetls":false,"compatmode":false,"protocolVersion":4,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Nadat je het IP-address van je MQTT-server en de IDX van de beldrukker hebt aangepast klik je op “Deploy”.

Stap 8. De app Pushsafer installeren op je android telefoon

Let op: Pushsafer is niet gratis, je betaald per push bericht. Vanaf € 0,99 per 1000 pushberichten. Er zijn alternatieven, maar de meesten bieden niet de functionaliteit op een foto mee te sturen.

Zoek binnen de play-store naar de app “Pushsafer”, en installeer deze op je telefoon.

Open de app, en geef de app toestemming tot toegang tot je fysieke activiteits- en locatiegegevens

Vervolgens vraagt de app jou om een device toe te voegen, in dit geval de telefoon die je in je hand hebt, geef je toestel een logische naam en klik op “Add Device”

Stap 9. Push notificaties instellen in Domoticz

Ga binnen Domoticz naar het menu Instellingen -> Instellingen, en selecteer het tabblad “Notifications”

Klik de optie Pushsafer open:

Klik binnen de Pushsafer app op je telefoon op het instellingen tandwieltje, het volgende scherm verschijnt:

Neem de private key (rood omrand) over in het veld “API Sleutel” in Domoticz, vul bij ImageURL de url in van de shapshot functie van de bel camera, in mijn geval http://bel-cam.sydspost.nl/snaphot.jpg. Klik op “Testen”, en als het goed is ontvang je nu een test pushbericht in de Pushsafer app.

Stap 10. Blocky script

Tot slot om de overige use-cases in te vullen een blocky script ontwikkeld. Dit blocky script maakt gebruik van de variabele “Beldrukker_actief” en “Donker”, dus die maken we eerst aan. Kies binnen Domoticz voor Instellingen -> Meer Opties -> Gebruikersvariabelen. En voeg de variabelen “Beldrukker_actief” en “Donker”, met als type “Integer” en waarde “0” toe:

Kies vervolgens binnen Domoticz voor Instellingen -> Meer Opties -> Gebeurtenissen. Klik op de (+) om een nieuw blocky script toe te voegen, en importeer onderstaande XML

<xml xmlns="http://www.w3.org/1999/xhtml"><block type="domoticzcontrols_if" id="r6:2Z9Y+)JQK/WXN(9J:" x="31" y="15"><value name="IF0"><block type="logic_operation" id="q7RK%ywG.eKkNR]YeKvX"><field name="OP">AND</field><value name="A"><block type="logic_compare" id="RE6_n|]_ROqIN^7D9qK3"><field name="OP">EQ</field><value name="A"><block type="switchvariablesAF" id="mSot5?:k}|/(18Ex6@7b"><field name="Switch">156</field></block></value><value name="B"><block type="logic_states" id="/9cH3!_$Ko+jgGZIl[7d"><field name="State">On</field></block></value></block></value><value name="B"><block type="logic_compare" id="MMWiAr;QZ$1*_kUOJYO="><field name="OP">EQ</field><value name="A"><block type="uservariablesAF" id="g^(ukYsDn[DGUGy`n*vZ"><field name="Variable">42</field></block></value><value name="B"><block type="math_number" id="w#-2F!o/3,Lf=w#XrzAr"><field name="NUM">0</field></block></value></block></value></block></value><statement name="DO0"><block type="logic_setdelayed" id="=qkpn2-utRk?tHX6uHwv"><value name="A"><block type="switchvariablesAF" id="*35WgzO#W_sckQ/IA!|_"><field name="Switch">124</field></block></value><value name="B"><block type="logic_states" id="m,d;R6U$vq*19Ax_$2y}"><field name="State">On</field></block></value><value name="C"><block type="math_number" id="5_Cv3ezilvIIu!(=CwgT"><field name="NUM">0.01</field></block></value><next><block type="writetolog" id="Qvsc:JSyD`S~1J#WRSoW"><value name="writeToLog"><block type="text" id="xRjDX/%U4(?t^FdgBeH`"><field name="TEXT">Bel gaat: Zet belgong aan</field></block></value><next><block type="send_notification" id="xV`+z:zwn+4zsK9M`WPz"><field name="notificationSubsystem">pushsafer</field><field name="notificationPriority">1</field><field name="notificationSound">pushover</field><value name="notificationTextSubject"><block type="text" id="*$(C/P.:dQ$jkIy)iDtp"><field name="TEXT">Bel gaat</field></block></value><value name="notificationTextBody"><block type="text" id="QGu-zL9rV!8Qc-A=gfKA"><field name="TEXT">Snel naar de deur</field></block></value><next><block type="domoticzcontrols_ifelseif" id="v?8:Pd3puat:J!rQ?g+,"><mutation elseif="2"></mutation><value name="IF0"><block type="logic_timeofday" id="c]%DWF;E+,E?l[w0w=rZ"><field name="OP">GTE</field><value name="Time"><block type="logic_sunrisesunset" id="k;V8m0#Po|_*d^_8Uv/["><field name="SunriseSunset">Sunset</field></block></value></block></value><statement name="DO0"><block type="logic_set" id="?mW3BHZasT~^VwpBK.AD"><value name="A"><block type="uservariablesAF" id="{^kfM0xV:^^:pB.$c$ri"><field name="Variable">45</field></block></value><value name="B"><block type="math_number" id="aBzr4S=:MZqF+Dp~BN|h"><field name="NUM">1</field></block></value></block></statement><value name="IF1"><block type="logic_timeofday" id="wQ}a8rS:DmTB;kRPpXLh"><field name="OP">LTE</field><value name="Time"><block type="logic_sunrisesunset" id="lWM,sg@9$chQvA#)FF5."><field name="SunriseSunset">Sunrise</field></block></value></block></value><statement name="DO1"><block type="logic_set" id="L!-7u5x_M8QGL~h!eZCl"><value name="A"><block type="uservariablesAF" id=":}lInl5!08w8FaAj)@q."><field name="Variable">45</field></block></value><value name="B"><block type="math_number" id="DIuuFnPJ*4d=(EqVtiU{"><field name="NUM">0</field></block></value></block></statement><value name="IF2"><block type="logic_compare" id="9G|HzzK@1_|%PwCm=/M`"><field name="OP">EQ</field><value name="A"><block type="uservariablesAF" id="FQ/vJ0m[%II96[U=D!ig"><field name="Variable">45</field></block></value><value name="B"><block type="math_number" id="mL%+bwyg*%BTqeEA{VfM"><field name="NUM">1</field></block></value></block></value><statement name="DO2"><block type="logic_set" id="d]P[=EK:X3gh2ISe`yD."><value name="A"><block type="switchvariablesAF" id="[/.5~*g=n63F^x-RcJXG"><field name="Switch">110</field></block></value><value name="B"><block type="logic_states" id="jB_A.u^/D?V_kurR*[kz"><field name="State">On</field></block></value><next><block type="start_script" id="2wOpWkZeV;Q2L7|gddMe"><field name="TextPath">/home/pi/domoticz/scripts/Entree.sh &amp; #</field><field name="TextParam"></field><next><block type="writetolog" id="`upe)9twZ]YD5|v1G*MZ"><value name="writeToLog"><block type="text" id="Z/HCaNDLQ:;R!r$[j|A:"><field name="TEXT">Bel gaat en het is donker: Zet licht Entree aan voor 5 minuten</field></block></value></block></next></block></next></block></statement><next><block type="logic_set" id="hC+s50,o{m;FVvU*qJdI"><value name="A"><block type="uservariablesAF" id="/%;OdEaHEpK)}4R4c;Jp"><field name="Variable">42</field></block></value><value name="B"><block type="math_number" id="M~Ft40T[HE.q9qR`/]Vs"><field name="NUM">1</field></block></value><next><block type="start_script" id="yUJ^B!sz9kTm_-:zE6(."><field name="TextPath">/home/pi/domoticz/scripts/Beldrukker.sh &amp; #</field><field name="TextParam"></field></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml>

Het blocky script ziet er dan als volgt uit:

Toelichting:

Als de knop van de bel-camera ingedrukt wordt, en de beldrukker is nog niet actief (variabele Beldrukker = 0) dan laat de belgong afgaan en schrijf het bericht “Bel gaat: Zet belgong aan” naar de Domoticz logging. Zend vervolgens een notificatie met als onderwerp “Bel gaat”, en bericht “Snel naar de deur” via Pushsafer met een hoge prioriteit. Vervolgens check of het tussen zonsopgang of zonsondergang is, en pas hier de variable “Donker” op aan. Als het donker is, zet dan het licht van de entree aan en start het script “Entree.sh” (zie hieronder) om het licht automatish na 5 minuten uit te laten gaan. Zet tot slot de variabele “Beldrukker_actief” op de waarde 1 en start het script Beldrukker.sh (zie hieronder) die er voor zorgt dat belletjesdrukker ontmoedigt worden door gedurende 10 seconden het opnieuw laten afgaan van de belgong geblokkeerd wordt.

Entree.sh

pi@raspberrypi:~/domoticz/scripts $ cat Entree.sh
#!/bin/bash
# script zet Entree uit na 5 minuten als de bel ingedrukt is
#

verbose=0 # 0=nodebug, 1=debug
log_message=""
debug=""

# Als Entree.sh reeds loopt, exit script
num=$(ps -ef | grep Entree.sh | grep -v grep | wc -l)
if [ $verbose -gt 0 ]; then echo $num; fi

if [[ $num -le 2 ]];
then

  # Wacht 5 minuten
  sleep 5m

  # Zet Entree uit
  debug=$(curl -s --url http://192.168.2.29:8080/json.htm\?type=command\&param=s                                                                                                                                                             witchlight\&idx=110\&switchcmd=Off)
  if [ $verbose -gt 0 ]; then echo $debug; fi

  # Log acties
  log_message="Entree%20uitgezet"
  debug=$(curl -s --url http://192.168.2.29:8080/json.htm\?type=command\&param=a                                                                                                                                                             ddlogmessage\&message=$log_message)
  if [ $verbose -gt 0 ]; then echo $debug; fi

fi

Verander <ip-address Domoticz server> in het ip-address van jou Domoticz server en de <IDX> in de idx van jou hal/entree/buitenlamp, en en sla de file op in /home/pi/domoticz/scripts/Entree.sh, en zet de juiste rechten.

$ chmod 755 /home/pi/domoticz/scripts/Entree.sh

Beldrukker.sh

pi@raspberrypi:~/domoticz/scripts $ cat Beldrukker.sh
#!/bin/bash
# script zet Beldrukker na 10 seconden weer op actief
#

verbose=1 # 0=nodebug, 1=debug
log_message=""
debug=""

# Wacht 10 seconden
sleep 10

# Zet Beldrukker actief
debug=$(curl -s --url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=Beldrukker_actief\&vtype=0\&vvalue=0)
if [ $verbose -gt 0 ]; then echo $debug; fi

# Log acties
log_message="Beldrukker%20actief%20gezet"
debug=$(curl -s --url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message)
if [ $verbose -gt 0 ]; then echo $debug; fi

Verander ook hier het <ip-address Domoticz server> in het ip-address van jou Domoticz server, en en sla de file op in /home/pi/domoticz/scripts/Beldrukker.sh, en zet de juiste rechten.

$ chmod 755 /home/pi/domoticz/scripts/Beldrukker.sh

Stap 11. Testen op de beldrukker werkt en de foto verstuurd wordt

Druk op de beldrukker en check op je telefoon of je een push-bericht krijgt met de tekst “Bel gaat, Gauw naar de deur” met een foto en deurbel icoontje.

Test aanvullende use-cases uit

  • Wacht tot zonsondergang en druk op de beldrukker, het licht van de hal/entree/buitenlamp gaat aan en zal automatisch na 5 minuten weer uit gaan.
  • De belgong zou ook moeten afgaan
  • Druk binnen 10 seconden nogmaals de beldrukker in, er wordt geen foto gemaakt, je krijgt geen bericht op je telefoon en de belgong klinkt ook niet. Wacht tot er 10 seconden voorbij zijn, en druk de beldrukker weer in, er wordt een foto gemaakt, je ontvangt een bericht op je telefoon en de belgong gaat.

Tip: Breidt het shell-script uit als je ’s nachts de belgong bijv. niet wilt horen, maar wel een push bericht op je telefoon wilt. Of beide uit ’s nachts.

Geef een reactie

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