Bewegingsmelder

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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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\&param=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 ;-))

Geef een antwoord

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