Dit project heeft tot doel een traditionele analoge bewegingsmelder “slim” te maken en te integreren in Domoticz.
In de gang van mijn woning hangt een Hager EE84 bewegingsmelder aan het plafond die de lichten in de gang gedurende de avonduren inschakelt bij beweging, en na verloop van tijd bij geen beweging weer uitschakelt. Voorheen werkte dit via een aangesloten SAIX10 van Eaton Holec, en werd de besturing gedaan door het domoticasysteem HomeControlBox via het A10/X10 protocol over het elektriciteitsnet. Aangezien ik dit oudere domoticasysteem aan het uitfaseren ben, en vervang door Domoticz oplossingen kwam dit project op mijn pad.
Bewegingsmelders worden 220v gevoed vanuit lichtnet en beschikken over een maakcontact. Plan is om middels een Hi-Link HLK-PM03 220v AC naar 3.3V DC converter een Wemos D1 bordje voeding te geven. Vervolgens het maakcontact van de bewegingsmelder te voeden vanuit de Gnd pin van de Wemos en aan te sluiten op GPIO 2.
Benodigdheden:
Ik heb de HLK-PM03 converter samen met een Wemos D1 mini en een twee-voudige schroefklem op een stukje printplaat gesoldeerd en conform bovenstaande pinout aan elkaar verbonden. Het resultaat is een printplaatje van zo’n 4 bij 2,5 cm wat precies in de “Wall plate” van de bewegingsmelder past nadat ik hier een paar plastic ribben en schotjes uit had gesneden met een stanley mes. Zie bovenstaande tekening, het onderste deel van de wall plate heb ik hiervoor benut. De kabels heb ik in het bovenste deel laten uitkomen waardoor het onderste deel vrij kwam voor de printplaat.
Stappenplan:
Stap 1. Wemos D1 flashen en configureren met ESP Easy conform https://www.twoenter.nl/blog/domotica/hoe-flash-espeasy-op-wemos-d1-mini/
- Geef de Wemos D1 een vast IP adres in de router
Stap 2. Configureer een Bewegingsmelder in Domoticz als een Virtuele dummy switch, onthoudt de IDX voor stap 4

Label | Waarde | Doel |
Naam | Zinvolle naam | |
Schakelaar type | Motion Sensor | |
Uitschakelvertraging | 0 | |
Aan actie | script:///home/pi/domoticz/scripts/Bewegingsmelder_gang_aan.sh | Uitvoeren van een shell-script die ervoor zorgt dat de verlichting aan gaat nadat er beweging wordt gesignaleerd, wordt later in Stap x uitgelegd |
Uit actie | script:///home/pi/domoticz/scripts/Bewegingsmelder_gang_uit.sh | Uitvoeren van een shell-script die ervoor zorgt dat de verlichting na verloop van tijd uit gaat, wordt later in Stap x uitgelegd |
Stap 2. Configureer bewegingsmelder als een switch in ESP

Label | Waarde | Doel |
Name | Zinvolle naam | |
Admin Password | ||
SSID | SSID van je WIFI netwerk | |
WPA Key | Wachtwoord van je WIFI netwerk | |
WPA AP Mode Key | configesp | default |
Unit nr. | 0 | Uniek unit nummer voor ESP devices |
Protocol | Domoticz HTTP | HTTP communicatie met Domoticz, je kan ook voor MQTT kiezen mits je een MQTT server up-and-running hebt |
Controller IP | IP-address van je Domoticz server | |
Controller Port | Poort nummer van je Domoticz server | Default 8080 |
Controller User | ||
Controller Password | ||
Sensor delay | 60 | Default |
Sleep mode | niet aangevinkt | Default |

Label | Waarde | Doel |
Device | Switch input | Het gedrag van GPIO-2 als aansturing door een schakelaar beschouwen |
Name | Zinvolle naam | |
Delay | 0 | Default |
IDX/Var: | IDX van de virtuele switch die in Stap 2 aangemaakt hebt binnen Domoticz | |
1st GPIO | GPIO-2 | Conform pinout |
Pull UP | aangevinkt | activeer interne pull-up weerstand van de Wemos D1 |
Inversed | aangevinkt | Geen idee waarom, maar daarna werkte het 😉 |
Switch type | Switch | Bewegingsmelder gedraagt zich als een schakelaar |
Switch button type | Normal Switch | Default |
Send boot state | niet aangevinkt | Default |
Value Name 1 | Switch | Default |
Stap 3. Shell script ontwikkeld voor het inschakelen van de verlichting als de bewegingsmelder beweging detecteert
pi@raspberrypi:~/domoticz/scripts $ cat bewegingsmelder_gang.sh
#!/bin/bash
# script zet Basisverlichting op 31% indien de bewegingsmelder in de gang beweging detecteert
# tussen zonsondergang en zonsopgang
#
verbose=0
zonsondergang=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getSunRiseSet -s | grep Sunset | awk ‘{print substr($3,2,2) substr($3,5,2)}’`
uren=$(echo $zonsondergang | cut -c1-2)
min=$(echo $zonsondergang | cut -c3-4)
let zonsondergang=(uren*60)+min
zonsopgang=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getSunRiseSet -s | grep Sunrise | awk ‘{print substr($3,2,2) substr($3,5,2)}’`
uren=$(echo $zonsopgang | cut -c1-2)
min=$(echo $zonsopgang | cut -c3-4)
let zonsopgang=(uren*60)+min;
uren=$(date ‘+%H’)
min=$(date ‘+%M’)
let tijd=(uren*60)+min
if [[ $tijd -lt $zonsopgang ]]
then
let tijd=tijd+1440;
fi
let zonsopgang=zonsopgang+1440;
# status Basisverlichting opvragen
curl -s –url http://192.168.2.70/API/?list=devices -o /tmp/temp
line=`grep -n Basis /tmp/temp | awk ‘{print $1}’ | tr -d :`
let line=line+1
statusBasisverlichting=`sed “${line}q;d” /tmp/temp | grep -n on | wc -l`
rm /tmp/temp
if [ $verbose -gt 0 ]
then
echo Zonsondergang=$zonsondergang
echo Zonsopgang=$zonsopgang
echo Tijd=$tijd
echo Basisverlichting=$statusBasisverlichting
fi
# indien tussen zonsondergang en zonsopgang uur, en basisverlichting is uit, zet dan de Basisverlichting aan en op 31%
if [[ $tijd > $zonsondergang ]] && [[ $tijd < $zonsopgang ]] && [[ $statusBasisverlichting == 0 ]]
then
# roep HomeControlBox api aan en zet device 6 (Basisverlichting) aan en op 31%
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=on)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB On $debug; fi
sleep 2
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&dim=31)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB DIM 31\% $debug; fi
sleep 10
# Zet variable Negeer_uit_Bewegingsmelder_gang op 0 (False)
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=updateuservariable\&vname=Negeer_uit_Bewegingsmelder_gang\&vtype=0\&vvalue=0)
if [ $verbose -gt 0 ]; then echo Negeer_uit_Bewegingsmelder_gang = 0 $debug; fi
# log acties
log_message=”Beweging_in_gang_gedetecteerd,_Basisverlichting_aan_gezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
#else
# # Basisverlichting staat al aan, dus negeer uit commmando door variabele “Negeer_uit_Bewegingsmelder_gang” op 1 (True) te zetten
# debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=updateuservariable\&vname=Negeer_uit_Bewegingsmelder_gang\&vtype=0\&vvalue=1)
# if [ $verbose -gt 0 ]; then echo Negeer_uit_Bewegingsmelder_gang = 1 $debug; fi
#
# # log acties
# log_message=”Basisverlichting_reeds_aan,_Negeer_uitvoering_script_uit_actie”
# curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
#!/bin/bash
# script zet Basisverlichting uit zodra van de Bewegingsmelder in de gang de ingestelde delay periode is afgelopen
#
verbose=0
Negeer=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getuservariable\&idx=41 -s | grep Value | awk ‘{print substr($3,2,1)}’`
if [ $verbose -gt 0 ]
then
echo Negeer=$Negeer
fi
# Indien Negeer false is, zet dan Basisverlichting uit, anders exit
if [[ $Negeer == 0 ]]
then
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=off)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB Off $debug; fi
# log acties
log_message=”Bewegingsmelder_gang_delay_verstreken,_Basisverlichting_uitgezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
Stap 4. Shell script ontwikkeld voor het uitschakelen van de verlichting na 5 minuten
pi@raspberrypi:~/domoticz/scripts $ cat bewegingsmelder_gang_uit.sh
#!/bin/bash
# script zet Basisverlichting uit zodra van de Bewegingsmelder in de gang de ingestelde delay periode is afgelopen
#
verbose=0
Negeer=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getuservariable\&idx=41 -s | grep Value | awk ‘{print substr($3,2,1)}’`
if [ $verbose -gt 0 ]
then
echo Negeer=$Negeer
fi
# Indien Negeer false is, zet dan Basisverlichting uit, anders exit
if [[ $Negeer == 0 ]]
then
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=off)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB Off $debug; fi
# log acties
log_message=”Bewegingsmelder_gang_delay_verstreken,_Basisverlichting_uitgezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
Stap 5. Potentiometers van de bewegingsmelder ingesteld
Fixed time: 5 minuten (instelling maakt niet uit, wordt overruled door script)
Luminosity: Nachtstand, alleen als het onder is detecteert de bewegingsmelder beweging
Sensivity: + om een zo groot mogelijk bereik te hebben waarbinnen de beweging wordt gedetecteerd (mijn gang is 12 meter lang ;-))
- Wemos D1 mini (Aliexpress)
- Hi-Link HLK-PM03 220v AC naar 3.3V DC converter
- PCB bordje van 4,5 bij 2,5 cm
- 2-voudige schroefklem
- Soldeerbout
- Soldeertin voor electronica
- Paar dupont of andere dunne draadjes
- Stanley mes of dremel om eventueel wat ruimte maken in de voet van de bewegingsmelder
- Bewegingsmelder met enige ruimte in de voet
Reeds geïnstalleerd en up-and-running:
- Domoticz
- Optioneel: MQTT
- Optioneel: MQTT plugin voor Domoticz
Pinout:
Lichtnet 220v | HLK-PM03 in | HLK-PM03 uit | Wemos D1 | |
Fase | AC | +V0 | 3v3 | Bewegingsmelder |
Nuldraad | AC | -V0 | GND | Plusdraad |
GPIO 2 (D4) | Min draad |
Montage:
Ik heb de HLK-PM03 converter samen met een Wemos D1 mini en een twee-voudige schroefklem op een stukje printplaat gesoldeerd en conform bovenstaande pinout aan elkaar verbonden. Het resultaat is een printplaatje van zo’n 4 bij 2,5 cm wat precies in de “Wall plate” van de bewegingsmelder past nadat ik hier een paar plastic ribben en schotjes uit had gesneden met een stanley mes. Zie bovenstaande tekening, het onderste deel van de wall plate heb ik hiervoor benut. De kabels heb ik in het bovenste deel laten uitkomen waardoor het onderste deel vrij kwam voor de printplaat.
Stappenplan:
Stap 1. Wemos D1 flashen en configureren met ESP Easy conform https://www.twoenter.nl/blog/domotica/hoe-flash-espeasy-op-wemos-d1-mini/
- Geef de Wemos D1 een vast IP adres in de router
Stap 2. Configureer een Bewegingsmelder in Domoticz als een Virtuele dummy switch, onthoudt de IDX voor stap 4

Label | Waarde | Doel |
Naam | Zinvolle naam | |
Schakelaar type | Motion Sensor | |
Uitschakelvertraging | 0 | |
Aan actie | script:///home/pi/domoticz/scripts/Bewegingsmelder_gang_aan.sh | Uitvoeren van een shell-script die ervoor zorgt dat de verlichting aan gaat nadat er beweging wordt gesignaleerd, wordt later in Stap x uitgelegd |
Uit actie | script:///home/pi/domoticz/scripts/Bewegingsmelder_gang_uit.sh | Uitvoeren van een shell-script die ervoor zorgt dat de verlichting na verloop van tijd uit gaat, wordt later in Stap x uitgelegd |
Stap 2. Configureer bewegingsmelder als een switch in ESP

Label | Waarde | Doel |
Name | Zinvolle naam | |
Admin Password | ||
SSID | SSID van je WIFI netwerk | |
WPA Key | Wachtwoord van je WIFI netwerk | |
WPA AP Mode Key | configesp | default |
Unit nr. | 0 | Uniek unit nummer voor ESP devices |
Protocol | Domoticz HTTP | HTTP communicatie met Domoticz, je kan ook voor MQTT kiezen mits je een MQTT server up-and-running hebt |
Controller IP | IP-address van je Domoticz server | |
Controller Port | Poort nummer van je Domoticz server | Default 8080 |
Controller User | ||
Controller Password | ||
Sensor delay | 60 | Default |
Sleep mode | niet aangevinkt | Default |

Label | Waarde | Doel |
Device | Switch input | Het gedrag van GPIO-2 als aansturing door een schakelaar beschouwen |
Name | Zinvolle naam | |
Delay | 0 | Default |
IDX/Var: | IDX van de virtuele switch die in Stap 2 aangemaakt hebt binnen Domoticz | |
1st GPIO | GPIO-2 | Conform pinout |
Pull UP | aangevinkt | activeer interne pull-up weerstand van de Wemos D1 |
Inversed | aangevinkt | Geen idee waarom, maar daarna werkte het 😉 |
Switch type | Switch | Bewegingsmelder gedraagt zich als een schakelaar |
Switch button type | Normal Switch | Default |
Send boot state | niet aangevinkt | Default |
Value Name 1 | Switch | Default |
Stap 3. Shell script ontwikkeld voor het inschakelen van de verlichting als de bewegingsmelder beweging detecteert
pi@raspberrypi:~/domoticz/scripts $ cat bewegingsmelder_gang.sh
#!/bin/bash
# script zet Basisverlichting op 31% indien de bewegingsmelder in de gang beweging detecteert
# tussen zonsondergang en zonsopgang
#
verbose=0
zonsondergang=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getSunRiseSet -s | grep Sunset | awk ‘{print substr($3,2,2) substr($3,5,2)}’`
uren=$(echo $zonsondergang | cut -c1-2)
min=$(echo $zonsondergang | cut -c3-4)
let zonsondergang=(uren*60)+min
zonsopgang=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getSunRiseSet -s | grep Sunrise | awk ‘{print substr($3,2,2) substr($3,5,2)}’`
uren=$(echo $zonsopgang | cut -c1-2)
min=$(echo $zonsopgang | cut -c3-4)
let zonsopgang=(uren*60)+min;
uren=$(date ‘+%H’)
min=$(date ‘+%M’)
let tijd=(uren*60)+min
if [[ $tijd -lt $zonsopgang ]]
then
let tijd=tijd+1440;
fi
let zonsopgang=zonsopgang+1440;
# status Basisverlichting opvragen
curl -s –url http://192.168.2.70/API/?list=devices -o /tmp/temp
line=`grep -n Basis /tmp/temp | awk ‘{print $1}’ | tr -d :`
let line=line+1
statusBasisverlichting=`sed “${line}q;d” /tmp/temp | grep -n on | wc -l`
rm /tmp/temp
if [ $verbose -gt 0 ]
then
echo Zonsondergang=$zonsondergang
echo Zonsopgang=$zonsopgang
echo Tijd=$tijd
echo Basisverlichting=$statusBasisverlichting
fi
# indien tussen zonsondergang en zonsopgang uur, en basisverlichting is uit, zet dan de Basisverlichting aan en op 31%
if [[ $tijd > $zonsondergang ]] && [[ $tijd < $zonsopgang ]] && [[ $statusBasisverlichting == 0 ]]
then
# roep HomeControlBox api aan en zet device 6 (Basisverlichting) aan en op 31%
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=on)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB On $debug; fi
sleep 2
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&dim=31)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB DIM 31\% $debug; fi
sleep 10
# Zet variable Negeer_uit_Bewegingsmelder_gang op 0 (False)
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=updateuservariable\&vname=Negeer_uit_Bewegingsmelder_gang\&vtype=0\&vvalue=0)
if [ $verbose -gt 0 ]; then echo Negeer_uit_Bewegingsmelder_gang = 0 $debug; fi
# log acties
log_message=”Beweging_in_gang_gedetecteerd,_Basisverlichting_aan_gezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
#else
# # Basisverlichting staat al aan, dus negeer uit commmando door variabele “Negeer_uit_Bewegingsmelder_gang” op 1 (True) te zetten
# debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=updateuservariable\&vname=Negeer_uit_Bewegingsmelder_gang\&vtype=0\&vvalue=1)
# if [ $verbose -gt 0 ]; then echo Negeer_uit_Bewegingsmelder_gang = 1 $debug; fi
#
# # log acties
# log_message=”Basisverlichting_reeds_aan,_Negeer_uitvoering_script_uit_actie”
# curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
#!/bin/bash
# script zet Basisverlichting uit zodra van de Bewegingsmelder in de gang de ingestelde delay periode is afgelopen
#
verbose=0
Negeer=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getuservariable\&idx=41 -s | grep Value | awk ‘{print substr($3,2,1)}’`
if [ $verbose -gt 0 ]
then
echo Negeer=$Negeer
fi
# Indien Negeer false is, zet dan Basisverlichting uit, anders exit
if [[ $Negeer == 0 ]]
then
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=off)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB Off $debug; fi
# log acties
log_message=”Bewegingsmelder_gang_delay_verstreken,_Basisverlichting_uitgezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
Stap 4. Shell script ontwikkeld voor het uitschakelen van de verlichting na 5 minuten
pi@raspberrypi:~/domoticz/scripts $ cat bewegingsmelder_gang_uit.sh
#!/bin/bash
# script zet Basisverlichting uit zodra van de Bewegingsmelder in de gang de ingestelde delay periode is afgelopen
#
verbose=0
Negeer=`curl –url http://192.168.2.29:8080/json.htm\?type=command\¶m=getuservariable\&idx=41 -s | grep Value | awk ‘{print substr($3,2,1)}’`
if [ $verbose -gt 0 ]
then
echo Negeer=$Negeer
fi
# Indien Negeer false is, zet dan Basisverlichting uit, anders exit
if [[ $Negeer == 0 ]]
then
debug=$(curl -s –url http://192.168.2.70/API/\?device=6\&cmd=off)
if [ $verbose -gt 0 ]; then echo Set device 6 HDB Off $debug; fi
# log acties
log_message=”Bewegingsmelder_gang_delay_verstreken,_Basisverlichting_uitgezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\¶m=addlogmessage\&message=$log_message
fi
Stap 5. Potentiometers van de bewegingsmelder ingesteld
Fixed time: 5 minuten (instelling maakt niet uit, wordt overruled door script)
Luminosity: Nachtstand, alleen als het onder is detecteert de bewegingsmelder beweging
Sensivity: + om een zo groot mogelijk bereik te hebben waarbinnen de beweging wordt gedetecteerd (mijn gang is 12 meter lang ;-))