Last Updated on 1 maart 2022 by Syds
Natuurlijk kun je voor een paar tientjes een WiFi belgong kopen. Maar wat is er leuker dan voor een paar euro zelf je belgong slim te maken. Dit met een Wemos D1 mini en relay shield. In deze tutorial gaan we een stokoude belgong de 21ste eeuw in helpen.
In de huidige situatie zit de belgong aangesloten op een 24v AC transformator welke ingebouwd zit in m’n groepenkast. De beldrukker fungeert als een schakelaar. Als de beldrukker ingedrukt wordt dan krijgt de belgong voeding en zegt hij zeer welluidend “ding”, en “dong” zodra je de beldrukker weer loslaat. Dit gedrag gaan we simuleren met wat slimme elektronica en programmatuur conform onderstaand schema:
Noot: de beldrukker heb ik intussen ook slim gemaakt en uitgerust met een camera, zie de tutorial hier
Onderdelen
Artikel | Aantal | Prijs | Besteld bij |
Wemos D1 mini | 1 | 1,70 | www.aliexpress.com |
1 Kanaals Relais Shield | 1 | 0,64 | www.aliexpress.com |
Links
https://www.letscontrolit.com/wiki/index.php/Relais
Benodigdheden
- Voeding: Telefoonoplader met USB kabel
- Soldeerbout met tin
- Schroevendraaier
Up-and-running
- Domoticz
- MQTT
Pinout
Wemos D1 mini | GPIO | Relay | Beldrukker (Optioneel bij klassieke beldrukker) | Gong/Trafo |
3,3V | VCC | |||
Gnd | Gnd | in-pool | ||
D1 | 5 | D1 | ||
D4 | 2 | out-pool | ||
NO | GND | |||
IN | GND |
Stap 1. Soldeer headers op Wemos D1 en Relay shield, plaats beide op elkaar
Stap 2. Wemos D1 mini geflashed met ESP Easy conform https://www.twoenter.nl/blog/domotica/hoe-flash-espeasy-op-wemos-d1-mini/
Stap 3. Wemos D1 mini als volgt geconfigureerd:
Toelichting op non-default waarden
Label | Waarde | Toelichting |
Name | bel | Zinvolle naam |
SSID | H369ABF8AF9 | Vul hier het SSID van je 2.4Ghz WiFi in |
WPA Key | ****** | Password van je WiFi |
Unit nr | 4 | Uniek nummer over al je ESP Easy devices |
Protocol | Domoticz MQTT | Domoticz MQTT protocol |
Controller IP | 192.168.2.29 | Vul hier het IP-address van jou MQTT broker in |
Optioneel indien je een klassieke beldrukker gebruikt:
Toelichting op non default waarden
Label | Waarde | Toelichting |
Device | Switch input | De klassieke beldrukker gedraagt zich als een schakelaar |
Name | Beldrukker | Zinvolle naam |
IDX/Var | 123 | Vervang dit door de IDX van jou beldrukker in Domoticz, zie ook volgende stap |
1ste GPIO | GPIO-2 | D4 |
Inversed | Aangevinkt | Zend correcte waarde naar Domoticz |
Stap 4. Basis Domoticz configuratie, 2 virtuele switches aangemaakt. 1 voor de (optionele) beldrukker, en 1 voor het relay wat de gong in werking stelt:
Optioneel bij toepassing klassieke Beldrukker
Belgong
Actie | Commando |
Aan | http://bel.sydspost.nl/control?cmd=GPIO,5,1 |
Uit | http://bel.sydspost.nl/control?cmd=GPIO,5,0 |
In het menu “Instellingen”, “Gebruikersvariabelen” de Variable Beldrukker_actief toegevoegd:
Stap 5. Use case 1 geconfigureerd in Domoticz met Blocky script
Use case: Als bel drukker ingedrukt wordt, laat dan de belgong afgaan.
Toelichting: Als beldrukker ingedrukt wordt en de beldrukker is niet actief (0) activeer dan het relais voor 1/100ste minuut. Zodra het relais geactiveerd wordt klink de “ding”, zodra het relais weer vrijgegeven wordt klinkt de “dong”.
Stap 6. Use case 2 toegevoegd aan Blocky script
Use case: Als de belgong afgegaan is, kan de beldrukker gedurende 10 seconden niet opnieuw ingedrukt worden
Blocky script uitgebreid met:
Script: /home/pi/domoticz/scripts/Beldrukker.sh zorgt ervoor dat na 10 seconden de Beldrukker opnieuw actief wordt
$ cat Beldrukker.sh #!/bin/bash # Auteur: Syds Post # 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\¶m=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\¶m=addlogmessage\&message=$log_message) if [ $verbose -gt 0 ]; then echo $debug; fi
Pas het IP-address 192.168.2.29 aan naar het IP-address van jou Domoticz server (op twee plekken !)
Stap 6. Use case 3 toegevoegd aan Blocky script
Use case: Als bel ingedrukt wordt, zet Entree aan gedurende 5 minuten tussen zonsondergang en zonsopgang
Tevens de aan actie van Beldrukker aangepast naar:
Actie | Commando |
Aan | script:///home/pi/domoticz/scripts/Entree.sh & |
Uit |
Script /home/pi/domoticz/scripts/Entree.sh zorgt ervoor dat Entree na 5 minuten uitgaat
$ cat Entree.sh #!/bin/bash # Auteur: Syds Post # 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\¶m=switchlight\&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\¶m=addlogmessage\&message=$log_message) if [ $verbose -gt 0 ]; then echo $debug; fi fi
Pas het IP-address 192.168.2.29 aan naar het IP-address van jou Domoticz server (op twee plekken !)
Stap 7. Use case 4 toegevoegd aan Blocky script
Use case: Stuur via Domoticz app een bericht dat er iemand voor de deur staat
Totale Blocky script:
En in XML vorm
<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 & #</field><field name="TextParam"></field></block></next></block></next></block></next></block></next></block></statement></block></xml>