Slimme bel met camera

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 firebase cloud messaging naar je android telefoon gestuurd worden, je krijgt dan ook te zien wie er voor de deur staat 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
Totaal€ 16,09

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 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.

Kies nu voor “Schakelaars” en selecteer de Beldrukker, klik op “Aanpassen” en vul bij “Aan actie” de volgende scriptnaam in en klik op “Opslaan”.

script:///home/pi/domoticz/scripts/Entree.sh &

Het script maken we in Stap 9 aan. 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.

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

Stap 6. Node-red flow aangemaakt

Voor de use-case “een foto verzenden via firebase-cloud-messaging naar je android telefoon” dient er een nieuwe node toegevoegd te worden, namelijk de “FCM push node”. Open met putty of een ander terminal programma een connectie naar je Node-red server en installeer deze node m.b.v. het volgende commando:

$ sudo npm install node-red-contrib-fcm-push-node

Voeg daarna de volgende regel toe aan de Node-red settings.js (vindt je in /home/pi/.node-red).

process.env.FCM_SERVER_KEY='AAAAaOmKSfc:APA91bGabQ9tUXtf5iUOycizl7Wpw0E875EiyxC8E9C2MyfMuG2anvfErYjrwEr4xFsoIVoIalqG4IupliY9436j4HNaL8jgDPEag2S0nSuI3TeU9TTbaK2bj8CFUVBDS6KCZib6Zo0X';

heb hem zelf onder de eerste commentaar regels geplaatst

/**
 * Copyright JS Foundation and other contributors, http://js.foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **/

process.env.FCM_SERVER_KEY='AAAAaOmKSfc:APA91bGabQ9tUXtf5iUOycizl7Wpw0E875EiyxC8E9C2MyfMuG2anvfErYjrwEr4xFsoIVoIalqG4IupliY9436j4HNaL8jgDPEag2S0nSuI3TeU9TTbaK2bj8CFUVBDS6KCZib6Zo0X';

...

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 plaats daarvan dien je iets te verzinnen waardoor gecapturede foto’s automatisch gekopieerd worden naar een vrij vanaf het web te benaderen opslag, bijv. google drive. Je zou eventueel met rclone icm met een shell script die voordurend checked of er een nieuwe file is, of een node toevoegen die de output wegschrijft naar google drive kunnen werken.

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

Download onderstaande bitmap van een deurbel-icon, en plaats die in de directory /home/pi/bel-cam, geef voldoende rechten

$ sudo chmod 744 /home/pi/bel-cam/deurbel.jpg

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
Build messageFunctie die op basis van msg.url een bericht aanmaakt die naar de Firebase cloud messaging wordt gestuurd. Belangrijk is om in deze node het token van FireNotify aan te passen, en de url achter de icon aan te passen naar de juiste verwijzing op jou webserver. In de volgende stap kom ik hier op terug.
Firebase Cloud Messaging PushStuurt het in de vorige node aangemaakte bericht naar FCM

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\":123,\"nvalue\":1",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 330,
        "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": "",
        "appendNewline": true,
        "createDir": false,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1010,
        "y": 200,
        "wires": [
            [
                "f7b350ff.0ea14"
            ]
        ]
    },
    {
        "id": "f7b350ff.0ea14",
        "type": "function",
        "z": "31072e17.f2fae2",
        "name": "Build message",
        "func": "msg.payload = {\n\t\"data\": \n\t{\n\t    \"title\": \"Bel gaat\",\n\t\t\"text\": \"Gauw naar de deur\",\n\t\t\"image\": msg.url,\n\t\t\"icon\": \"https://sydspost.nl/bel-cam/deurbel.jpg\"\n\t},\n\t\"to\" : \"<Token>\",\n\t\"priority\" : \"high\"\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 1220,
        "y": 200,
        "wires": [
            [
                "1668d75b.743979"
            ]
        ]
    },
    {
        "id": "1668d75b.743979",
        "type": "fcm-push",
        "z": "31072e17.f2fae2",
        "name": "",
        "x": 1510,
        "y": 200,
        "wires": []
    },
    {
        "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.url = \"https://sydspost.nl/bel-cam/\" + mFilename;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "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": "51525e54.17f38",
        "type": "mqtt-broker",
        "z": "",
        "name": "pi",
        "broker": "192.168.2.29",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "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, het IDX van de beldrukker en het Token van FireNotify hebt aangepast klik je op “Deploy”.

Stap 7. De app FireNotify installeren op je android telefoon

Zoek binnen de play-store naar de app “FireNotify” van Eugene Schava, en installeer deze op je telefoon.

Open de app, automatisch wordt er een API-key en een Token gegenereerd.

De API-key heb je al eerder ingevoerd bij het zetten van de FCM_SERVER_KEY environment variabele in de settings.js van Node Red, echter het Token dien je over te nemen in de “Build message” functie in de Node-red flow.

msg.payload = {
	"data": 
	{
	    "title": "Bel gaat",
		"text": "Gauw naar de deur",
		"image": msg.url,
		"icon": "https://sydspost.nl/bel-cam/deurbel.jpg"
	},
	"to" : "<Token>",
	"priority" : "high"
}

return msg;

Stap 8. 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.

Stap 9. Domoticz-gebeurtenis en shell script voor realisatie overige use-cases

Voor het realiseren van de overige use-cases:

  • 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
  • heb ik een Domoticz gebeurtenis aangemaakt en een shell script gemaakt. Eerst de Domoticz gebeurtenis. Hiervoor moet een Variabele toegevoegd worden aan Domoticz. Kies in Domoticz voor “Instellingen”, “Meer opties”, “Gebruikersvariabelen”. Voeg een variabele met de naam “Beldrukker_actief” aan van het variabele type “Integer” met Waarde “0”. Klik op “Toevoegen”.

    Kies daarna in Domoticz voor “Instellingen”, “Gebeurtenissen”. Maak een nieuwe gebeurtenis aan met de naam “Bel” en importeer daarin onderstaand blocky script

    <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">123</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="domoticzcontrols_ifelseif" id="v?8:Pd3puat:J!rQ?g+,"><value name="IF0"><block type="logic_operation" id="x:)XWso_rD#5A^x9HxIr"><field name="OP">AND</field><value name="A"><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><value name="B"><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></block></value><statement name="DO0"><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="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></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></statement></block></xml>

    Verander het device “$Belgong” in jou belgong device, en het device “Entree” in de lamp van jou hal/entree/buitenlamp. Ik heb zo’n ding-dong belgong, dus een “ding” van 0.01 minuut is voldoende, heb je een buzzer, verleng dan eventueel die tijd. Kies voor “Opslaan”.

    Je bent nu klaar binnen Domoticz. Start putty of een ander terminal programma en maak verbinding met je raspberry pi of andere linux doos. Open je favoriete editor, bijv. vi of nano en kopieer onderstaand shell script hierin

    $ 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://<ip-address Domoticz server>: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://<ip-address Domoticz server>:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message)
    if [ $verbose -gt 0 ]; then echo $debug; fi
    
    

    Verander <ip-address Domoticz server> in het ip-address van jou Domoticz server 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

    Open nogmaals je favorite editor en kopieer het volgende script

    #!/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://<ip-address Domoticz server>:8080/json.htm\?type=command\&param=switchlight\&idx=<IDX>\&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=addlogmessage\&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

    Stap 10. Test aanvullende use-cases uit

    • Wacht tot zonsondergang en druk op de beldrukker, het licht van de hal/entree/buitenlamp gaat aan en automatisch na 5 minuten weer uit gaat.
    • 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 antwoord

    Het e-mailadres wordt niet gepubliceerd.