Slimme deurbellen zijn populair, en met recht. Het is fijn om de omgeving van je voordeur een beetje in de gaten te houden, een pakketbezorger instructies te geven op afstand of vooraf te weten voor wie je de deur eventueel zou openen. Er zijn ook nadelen: nagenoeg alle commercieel verkrijgbare videodeurbellen zijn afhankelijk van de cloud, waar alle verzamelde data doorheen stroomt en soms zelfs ongemerkt of ongewild wordt bewaard. Daarnaast kun je erover discussiëren of het wel een goede ontwikkeling is dat de straten vol hangen met camera’s waarvan het zicht over het algemeen niet beperkt blijft tot privéruimtes. Er zijn dus ook genoeg redenen om geen slimme deurbel te nemen, maar wat als je nu je bestaande deurbel een beetje slimmer kunt maken?
In dit artikel tonen we hoe je zonder veel investering je deurbel ombouwt naar een slimmere variant. Daarvoor gebruiken we een microcontroller en een relais. We voegen geen camera, microfoon en luidspreker toe, maar dat kan ook niet voor een paar euro aan componenten.
De microcontroller houdt in de gaten of er op de deurbelknop wordt gedrukt en kan desgewenst de deurbelgong laten klinken door het relais te schakelen. Het achterliggende smarthomeplatform wordt via wifi op de hoogte gesteld dat er wordt aangebeld, maar is niet nodig om de deurbel te laten functioneren. ESPHome gebruiken we als softwareplatform voor de microcontroller met automatiseringen die lokaal plaatsvinden.
In combinatie met Home Assistant of Homey (Pro) krijg je controle over de gong, ‘klikpatroonherkenning’, een pushbericht op je telefoon bij aanbellen en allerlei andere functies die enkel begrensd worden door je eigen creativiteit.
Wat heb je nodig?
Waarschuwing vooraf!
De spanningen waarmee je voor dit project werkt zijn veilig om zonder voorzorgsmaatregelen te kunnen werken. Echter: de deurbeltrafo bevindt zich vaak in de groepenkast, waar je te maken krijgt met spanningsvoerende delen die tot serieus letsel kunnen leiden. Werk rondom 230V wisselspanning altijd ordelijk, rustig, nuchter en met geïsoleerd gereedschap. Werk niet alleen! Als het mogelijk is de spanning af te schakelen, doe dat en controleer het. Kun je lastig inschatten of je wel veilig werkt, haal er dan een kundige medetweaker bij en ga er niet zelf aan lopen knoeien.
Dit project is gebaseerd op een simpele drukknopdeurbel, het liefst de variant zonder lampje, want die zal vervangen moeten worden door een led en maakt het project een stuk ingewikkelder (maar achteraf wel toffer).
Je hebt een smarthomeplatform nodig zoals Homey, Home Assistant of een ander platform dat MQTT- of HTTP-api-mogelijkheden biedt. De hardware bestaat uit een experimenteerbord op basis van de ESP32-microcontroller. Een ESP8266 kan ook werken, maar de pinbezetting zal anders zijn. We hebben gekozen voor een ESP32 vanwege de bluetoothmogelijkheden. Daarmee kun je later verder experimenteren, bijvoorbeeld met aanwezigheidsmonitoring. Naast het experimenteerbord heb je een relais nodig, WAGO-klemmen om snel te verbinden, wat draad (0,2mm2 of 0,75mm2) en om alles een nette plaats te geven kun je ervoor kiezen om een behuizing te printen of aan te schaffen, bijvoorbeeld een lasdoos. Heb je een deurbel met een lampje en wil je die houden, dan zijn een rgb-led en een stuk utp-kabel nodig.
Hieronder staat een boodschappenlijst waarvan de links voor het gemak (en verzendkosten) allemaal bij één winkel uitkomen. Het kan (heel) goed zijn dat deze winkel niet in je favorietenlijst staat. Het staat je natuurlijk vrij om de onderdelen ergens anders te bestellen, maar let dan goed op de specificaties van de producten uit de lijst om teleurstelling te voorkomen.
Boodschappenlijst |
Ontwikkelbord met ESP32-microcontroller |
Relais |
Rgb-led (kijk vooraf of deze module fysiek in je deurbel past) |
WAGO-verbindingsklemmen |
Gekleurd draad |
Behuizing met wandmontage en draaddoorvoer |
USB-voedingsadapter en Micro-USB-kabel |
Naast de basiscomponenten heb je gereedschap nodig. Met een soldeerbout, multimeter, draadstripper en wat stukjes draad in verschillende kleuren kom je een heel eind.
Voorbereiding
De eerste stap is het voorbereiden van de microcontroller. Deze moet voorzien worden van de firmware van ESPHome. Hiervoor is het het fijnst om de ESPHome Device Builder te gebruiken.
De wijze waarop je dat doet, is afhankelijk van het smarthomeplatform dat je gebruikt. Gebruik je Home Assistant, dan is de installatie eenvoudig. Je dient de ESPHome Device Builder-add-on te installeren. Gebruik je een Homey Pro, dan vind je hier een goede uitleg hoe je ESPHome-ondersteuning toevoegt aan het platform en ESPHome installeert op je pc om de microcontroller te configureren.
In de ESPHome Device Builder maak je een nieuw apparaat aan met een lege configuratie. In de stap daarna verbind je de microcontroller met je computer, selecteer je de juiste compoort en wordt het apparaat geflasht via de browser.
Lampje
Als je deurbel een lampje heeft, staat er een extra klus voor de boeg, heb je geen lampje, dan kun je direct door naar het hoofdstuk 'solderen'. Het originele gloeilampje in de deurbelknop kan voor dit project niet worden behouden, aangezien we de transformator loskoppelen van de deurbel. Daarom moet je het lampje vervangen door een rgb-led (met drie pins, niet adresseerbaar). De drie kleurkanalen van de led vereisen extra aderparen naar de microcontroller; de deurbelkabel moet dan ook vervangen worden door een meerpolige kabel, bijvoorbeeld een utp-kabel die voldoende aders biedt voor een deurbelknop en led.
Elke deurbelknop verschilt, dus je zult zelf moeten bekijken hoe je het ledlampje in de deurbelknop kwijt kunt. Hierbij kun je je laten assisteren door een thermisch lijmpistool. Hoe je het lampje en drukknop op de utp-kabel aansluit, is vrij, maar het is misschien handig om de negatieve aansluiting van de led via twee aders te laten lopen, aangezien het vermogen dat de led kwijt moet, kan worden aangevoerd over drie aders (bij de kleur wit bijvoorbeeld).
Utp-ader |
Functie |
Bruin |
Belknop |
Bruin-wit |
Belknop |
Oranje |
Led-rood |
Groen |
Led-groen |
Blauw |
Led-blauw |
Oranje-wit/blauw-wit |
Led-ground |
Solderen
Hierna is het tijd om de soldeerbout op te warmen. Op de gpio-poorten van de microcontroller moeten een aantal draden gesoldeerd worden.
Afhankelijk van de microcontroller die je hebt gekocht, kan het zijn dat de headers wel of niet voorgesoldeerd zijn. Als dat niet zo is, kun je de draden voor dit project direct in de gaatjes op de print vastsolderen; zit er al een header op, dan kun je de draden op de pins solderen.
De draadlengte is afhankelijk van je installatiemogelijkheden en zul je vooraf moeten inschatten. De draden moeten kunnen reiken van de microcontroller naar de bestaande deurbelbedrading. Neem het een beetje ruim en knip niet te krap, want het is lastig om er een stukje bij te knippen. Het is altijd fijn om alle aansluitingen een andere kleur draad te geven, zodat je niet continu hoeft te speuren naar de juiste draad tijdens het bedraden van de deurbel.
Gnd |
Zwarte draad |
5V |
Rode draad |
GPIO 4 |
Deurbeldata |
GPIO 33 |
Relaisdata |
GPIO 27 |
Rgb - rood + (optioneel) |
GPIO 26 |
Rgb - groen + (optioneel) |
GPIO 25 |
Rgb - blauw + (optioneel) |
Ook het relais moet voorzien worden van drie draden.
Gnd |
Zwarte draad |
5V |
Rode draad |
Data |
Relais-data |
De uiteinden van de draden die van de microcontroller komen, rust je uit met een WAGO-connector. Met deze vermogens en kabeldikte is het niet erg bezwaarlijk om een aansluiting van de WAGO-connector dubbel te gebruiken.
Installatie
Met de geïnstalleerde microcontroller begeef je je nu naar de deurbeltransformator. In dit deel van de uitleg ben je een beetje aan jezelf overgeleverd, want je zult moeten identificeren hoe je deurbelcircuit bedraad is. Het kan zijn dat je de groepenkast moet openen om de deurbeltrafo en bedrading van je deurbel te kunnen bereiken.
Vanaf de deurbelknop lopen twee draden; deze knip je door, zodat je vier draden overhoudt. Twee draden die van de deurbelknop afkomen, een draad die naar de deurbelgong leidt en een draad die naar de deurbeltransformator loopt. Markeer ze eventueel om ze uit elkaar te houden.
De draad die van de transformator komt en de draad die van de gong afkomt, worden op het relais aangesloten. Het relais heeft drie aansluitingen: common, NC en NO. De twee draden komen op common en NO. NO staat voor normally open. Dat betekent dat de aansluiting alleen wordt verbonden met common zodra het relais wordt bekrachtigd. In ruststand is common verbonden met NC, ofwel normally closed. Zodra het relais schakelt, is de transformator verbonden met de bel en rinkelt deze.
Aansluiting transformator en gong op relais (links) en aansluiting relais op microcontroller
De twee draden vanaf de deurbelknop sluit je aan op de GPIO 4-draad en gnd vanuit de microcontroller. De ingangszijde van het relais vereist drie aansluitingen. De 5V-draad verbind je aan 5V-USB, de draad die van GPIO 33 komt aan in data van het relais en gnd komt op de gnd-draad van de microcontroller. Bouw je de kleurenled ook in je deurbel, dan zijn er nog wat extra draden aan te sluiten.
Aansluiting deurbelknop op microcontroller (links) en aansluiting led op microcontroller
Als alles is aangesloten kun je een USB-voeding aansluiten op de microcontroller zodat deze start en online komt in je netwerk.
Softwareconfiguratie
Het is nu tijd om de configuratie van ESPHome in te vullen. Hoe je die configuratie bewerkt en flasht, is afhankelijk van het platform dat je gebruikt. Home Assistant heeft ESPHome Device Builder, voor Homey kun je nu de configuratie aanpassen. De standaardconfiguratie laat je staan, maar deze moet onder 'ESPHome' worden aangepast naar het volgende:
esphome: name: deurbel friendly_name: Deurbel on_boot: then: - switch.turn_off: relais
De rest kan blijven staan, maar onderaan de configuratie (onder de regel met captive portal:) voeg je het volgende toe:
globals: - id: gong_ingeschakeld type: bool restore_value: no initial_value: 'true' switch: - platform: gpio name: "Deurbel-relais" icon: "mdi:bell" id: relais internal: true pin: number: GPIO4 mode: output: True restore_mode: ALWAYS_OFF on_turn_on: - delay: 250ms - switch.turn_off: relais - platform: template name: "Deurbel-gong" turn_on_action: - globals.set: id: gong_ingeschakeld value: 'true' turn_off_action: - globals.set: id: gong_ingeschakeld value: 'false' binary_sensor: - platform: gpio name: "Deurbel-knop" icon: "mdi:doorbell" pin: number: GPIO33 mode: INPUT_PULLUP inverted: True filters: - delayed_on: 15ms on_press: - if: condition: lambda: 'return id(gong_ingeschakeld) == true;' then: - switch.turn_on: relais
Deze configuratie maakt een sensor Deurbel-knop aan voor de deurbelknop en een schakelaar Deurbel-relais voor het relais. Daarnaast is er een virtuele schakelaar deurbelgong die in combinatie met de variabele gong_ingeschakeld gebruikt wordt om de aansturing van het relais te regelen. Daarmee kun je de deurbel stil laten opereren, maar wel notificaties ontvangen.
De code is zodanig ontworpen dat de deurbel altijd autonoom zal werken, ook als er geen extern platform aanwezig is. Mocht het achterliggende platform onbereikbaar zijn, dan zal de deurbel gewoon functioneren. Je kunt dus verhuizen en de intelligente deurbel laten zitten zonder dat de volgende bewoner daar functionaliteitsverlies van ondervindt. Het enige dat niet meer werkt, is langdurig aanbellen: de code beperkt de tijdsduur dat de gong rinkelt altijd tot 250ms.
De Deurbel-knop bevat een debouncefilter. Dit zorgt ervoor dat de knop enkel activeert als deze meer dan 15ms is ingehouden. Dat voorkomt valspositieven door storende invloeden op de (vaak vrij lange) deurbelkabel en ontstoort het eerste contact van de belknop, zodat ‘geknetter’ van het eerste contact dat de schakelaar maakt, niet leidt tot meerdere deurbelmeldingen in een paar milliseconden.
Deurbel-relais heeft de toevoeging internal: True. Dat zorgt ervoor dat je het relais niet in Home Assistant of Homey te zien krijgt. Wil je de deurbel op afstand laten rinkelen, dan laat je dit weg en kun je het relais op afstand inschakelen. Ook wanneer je het relais vanuit je platform bedient, zal het relais maximaal 250ms inschakelen; dat bepaalt de microcontroller namelijk lokaal. Zo kan een platform dat traag of in de war is, nooit de deurbel ongecontroleerd laten rinkelen.
De installatie doe je vanuit ESPHome Device Builder door de configuratie in je toegevoegde microcontroller te plakken en te installeren.
Code met een lampje
Heb je de deurbel met de rgb-led uitgerust, dan dien je het ESPHome-deel van de configuratie als volgt aan te passen:
esphome: name: deurbel friendly_name: Deurbel on_boot: then: - switch.turn_off: relais - light.turn_on: id: deurbelled green: 0% blue: 100% red: 0% brightness: 80%
Ook voeg je helemaal onderaan de code het volgende toe:
- light.turn_on: id: deurbelled effect: random brightness: 100% - delay: 4500ms - light.turn_off: id: deurbelled - delay: 500ms - light.turn_on: id: deurbelled green: 0% blue: 100% red: 0% brightness: 80% output: - platform: ledc id: output_red pin: GPIO27 - platform: ledc id: output_green pin: GPIO26 - platform: ledc id: output_blue pin: GPIO25 light: - platform: rgb name: "Deurbel-led" icon: "mdi:led-on" id: deurbelled red: output_red green: output_green blue: output_blue effects: - random: name: Random transition_length: 50ms update_interval: 100ms
Deze code voegt ondersteuning voor de led en een lichteffect toe. Bij normaal gebruik zal de knop branden in de kleur die je opgeeft in on_boot.
De deurbelautomatisering zorgt voor een kleurig knipperende feedback van de led, die na vijf seconden stopt. Dat kun je naar smaak ook zelf aanpassen door andere effecten of een statische kleur.
Wil je ondersteuning voor dubbelklikken, lang indrukken of vormen van morsecode, pas dan de binary_sensor en switch aan met een van de volgende codevoorbeelden:
switch: - platform: template name: "Deurbelknop enkel" id: deurbelknopenkel turn_on_action: - switch.template.publish: id: deurbelknopenkel state: ON - if: condition: lambda: 'return id(gong_ingeschakeld) == true;' then: - switch.turn_on: relais - switch.turn_off: deurbelknopenkel turn_off_action: - switch.template.publish: id: deurbelknopenkel state: OFF - platform: template name: "Deurbelknop dubbel" id: deurbelknopdubbel turn_on_action: - switch.template.publish: id: deurbelknopdubbel state: ON - if: condition: lambda: 'return id(gong_ingeschakeld) == true;' then: - switch.turn_on: relais - switch.turn_off: deurbelknopdubbel turn_off_action: - switch.template.publish: id: deurbelknopdubbel state: OFF - platform: template name: "Deurbelknop geheim" id: deurbelknopgeheim turn_on_action: - switch.template.publish: id: deurbelknopgeheim state: ON - switch.turn_off: deurbelknopgeheim turn_off_action: - switch.template.publish: id: deurbelknopgeheim state: OFF binary_sensor: - platform: gpio name: "Deurbel-knop" icon: "mdi:doorbell" internal: True pin: number: GPIO33 mode: INPUT_PULLUP inverted: True on_multi_click: - timing: #Enkele klik - ON for at most 1s - OFF for at least 0.5s then: - switch.turn_on: deurbelknopenkel - timing: #Dubbele klik - ON for at most 1s - OFF for at most 0.3s - ON for at most 1s - OFF for at least 0.2s then: - switch.turn_on: deurbelknopdubbel - timing: # SOS in morsecode - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.6s - OFF for at most 0.3s # medium lang - ON for at most 0.6s - OFF for at most 0.3s # medium lang - ON for at most 0.6s - OFF for at most 0.3s # medium lang - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.3s - OFF for at most 0.3s # kort - ON for at most 0.6s then: - switch.turn_on: deurbelknopgeheim
Merk op dat het filter is verdwenen. Dat is niet meer nodig, aangezien de schakelaar niet meer reageert op een signaal dat korter duurt dan 25ms. Ook is de knop zelf verborgen voor Home Assistant door middel van internal: True. De staat wordt nu kenbaar gemaakt met drie virtuele schakelaars waarop de automatisering later triggert. Een laatste opmerking is dat het combineren en perfectioneren van patronen nogal eens weerbarstig zijn. Hoe meer patronen, hoe meer potentiële conflicten. Een beetje finetunen kan nodig zijn.
Automatisering in Home Assistant
Nadat je de configuratie hebt samengesteld en de code is geflasht, resten er nog wat automatiseringen in Home Assistant. De belangrijkste is natuurlijk de belnotificatie. De automatisering is simpel: als de status van de inputboolean van de deurbel verandert omdat er op de knop is gedrukt, moet er een bericht verzonden worden.
alias: Deurbel ingedrukt description: "" triggers: - trigger: state entity_id: - binary_sensor.deurbel_deurbel_knop to: "on" conditions: [] actions: - action: notify.notify data: message: Ding Dong title: Deurbel data: ttl: 0 priority: high vibrationPattern: 100, 500, 100, 2000, 100 - action: notify.html5 metadata: {} data: message: Deurbel! title: Ding Dong mode: single
Heb je gekozen voor de dubbelklikfuncties, dan werken de triggers iets anders:
alias: Deurbel ingedrukt description: "" mode: single triggers: - trigger: state entity_id: - switch.deurbel_deurbelknop_enkel to: "on" - trigger: state entity_id: - switch.deurbel_deurbelknop_dubbel to: "on" - trigger: state entity_id: - switch.deurbel_deurbelknop_geheim to: "on" conditions: [] actions: - if: - condition: template value_template: "{{ trigger.entity_id == 'switch.deurbel_deurbelknop_enkel' }}" then: - action: notify.notify data: message: Ding Dong title: Deurbel data: ttl: 0 priority: high channel: doorbell push: sound: critical: 1 volume: 1 interruption-level: critical media_stream: alarm_stream_max vibrationPattern: 100, 500, 100, 2000, 100 - if: - condition: template value_template: "{{ trigger.entity_id == 'switch.deurbel_deurbelknop_dubbel' }}" then: - action: notify.notify data: message: Ding Dong Ding Dong title: Deurbel gedubbelklikt data: ttl: 0 priority: high channel: doorbell push: sound: critical: 1 volume: 1 interruption-level: critical media_stream: alarm_stream_max vibrationPattern: 100, 500, 100, 2000, 100 - if: - condition: template value_template: "{{ trigger.entity_id == 'switch.deurbel_deurbelknop_geheim' }}" then: - action: notify.notify data: title: Iemand kent de code data: ttl: 0 priority: high channel: doorbell push: sound: critical: 1 volume: 1 interruption-level: critical media_stream: alarm_stream_max vibrationPattern: 100, 500, 100, 2000, 100 message: Geheime Ding Dong
De mogelijkheden met je smarthomeplatform zijn groot. Mocht je het aandurven, dan kun je de geheime code via een automatisering koppelen aan je slimme slot, zodat je zonder sleutels of telefoon toegang kunt krijgen tot je huis. Om het risico op misbruik te verkleinen, kun je ervoor kiezen dat dit maar een paar keer per uur werkt als de tijd een exact aantal minuten voorbij het uur aanwijst, bijvoorbeeld op xx:18, xx:36 en xx:54. Zo sluit je jezelf nooit meer dan zo’n 20 minuten buiten.
Er zijn meer dingen te bedenken om aan je belknop te hangen, bijvoorbeeld een ‘zo terug'-modus die via een helper voorkomt dat je afwezigheid invloed heeft op de verwarming, licht en andere zaken die je via geofencing kunt automatiseren.
Ben je op vakantie en gebruik je Home Assistant als alarm, dan kan de verzorger van je planten met een lange druk het alarm voor een uur uitschakelen. Meerdere keren aanbellen binnen een periode kun je ook detecteren en bijvoorbeeld aanmerken als ‘belletje lellen’, waarna de bel een kwartiertje rust in acht neemt. Mogelijkheden te over dus, die enkel worden begrensd door je eigen creativiteit.
Als je weet wat een ESP32 allemaal kan, is het eigenlijk schandalig als deze enkel ingezet wordt om een groot deel van de tijd niets te doen, behalve wachten tot iemand op een knopje drukt. Daar kan de microcontroller eigenlijk te veel voor.
Gelukkig kan ESPHome heel wat meer dan de status van de gpio-pinnen uitlezen. Met een simpele toevoeging aan de YAML-configuratie maak je er bijvoorbeeld zo een bluetoothproxy voor Home Assistant van. Dat breidt niet alleen het bluetoothbereik uit voor eventuele smarthomeapparatuur die daar gebruik van maakt, maar is ook de basis voor bluetoothtracking binnenshuis. Eigenlijk is mmWave op dit moment interessanter voor aanwezigheidsdetectie, maar de prijs van een goede mmWave-sensor is op dit moment een veelvoud van de prijs van een ESP32-bordje. Voor bluetoothdetectie is het wel beter om je huis uit te rusten met minimaal drie ESP32’s, zodat de achterliggende integratie Bermuda BLE Trilateratie nauwkeuriger werkt. Dat geeft nog meer reden om domme apparatuur een klein beetje slim te maken met een ESP32 en daarmee je aanwezigheidsdetectie in ruimtes nauwkeuriger te krijgen.
Bluetoothondersteuning voeg je simpel toe door de volgende code boven in de configuratie te plakken:
bluetooth_proxy: active: true esp32_ble_tracker: scan_parameters: active: true
Heb je deze deurbel, of een variant hierop, ook gebouwd? Heb je een briljante toevoeging die niet mag missen bij dit artikel, hulp nodig bij de bouw of een andere opmerking? Laat dan hieronder een reactie achter.