Bewegingsmelder slim maken met Shelly i3

Last Updated on 26 april 2021 by Syds

Dit project heeft tot doel een traditionele analoge bewegingsmelder “slim” te maken en te integreren in Domoticz.

Aan mijn woning hangt een Busch-Wächter 220 AlarmLINE bewegingsmelder gericht op de oprit. Deze schakelt de buitenverlichting in bij beweging, en schakelt deze na verloop van tijd bij geen beweging weer uit. Voorheen werkte dit via een aangesloten SonOff mini waarbij S1 en S2 werden geschakeld via het potentiaal vrije maakcontact van de bewegingsmelder. Helaas is het relais van dit potentiaal vrije maakcontact stuk gegaan waardoor deze niet meer goed schakelde.

De bewegingsmelder beschikt echter over een tweede relais die een 220v maakcontact aanstuurt. Idee was geboren om deze af te vangen met een WiFi ontvanger. De Sonoff Mini is daar niet geschikt voor, deze kan maximaal 3.3v over S1 en S2 schakelden. Dus na wat googlen kwam ik de Shelly i3 multi switch input tegen voor een schappelijke € 12 euro, heel wat goedkoper dan een nieuwe Busch-Wachter bewegingsmelder van € 145,- !

Benodigdheden:

Stappenplan:

Stap 1. Testopstelling gemaakt

  • kroonsteentjes aangesloten op L, N en I1 van Shelly i3
  • Fase van Bewegingsmelder en tweelingsnoer gecombineerd aangesloten op kroonsteentje waar de L van de Shelly i3 op is aangesloten
  • Neutraal van Bewegingsmelder en tweelingsnoer gecombineerd aangesloten op kroonsteentje waar de N van de Shelly i3 op is aangesloten
  • Maakcontact van de Bewegingsmelder aangesloten op kroonsteentje waar de I1 van het Shelly i3 op is aangesloten
  • Stekker op tweelingsnoer gemonteerd en in stopcontact gestopt
  • Check of fase inderdaad ook fase is met spanningzoeker, draai anders de stekker om in het stopcontact

Stap 2. Button Type van Input I1 van Shelly i3 als volgt geconfigureerd:

Stap 3. Virtuele sensor aangemaakt en geconfigureerd als switch

Label Waarde Doel
Naam Zinvolle naam
Schakelaar type On/Off
Uitschakelvertraging 0
Aan actie
Uit actie
Beschermd Niet aangevinkt
Omschrijving <voicecontrol>
report_state = False
hide = True
</voicecontrol>
Zorgt ervoor dat de bewegingsmelder niet in- en uitgeschakeld kan worden m.b.v. google assistant

Stap 4. Blocky script “Beweging buiten” gemaakt die script Buitenverlichting.sh uitvoert

Toelichting:

Als “Bewegingsmelder achter” of “Bewegingsmelder Oprit” beweging signaleren en hun respectievelijke schakelaar op ‘On’ zetten, start dan het shell script “Buitenverlichting.sh” op (zie volgende stap)

Stap 5. Variabelen TimerBuitenverlichting en TimerBuitenActief aangemaakt

Stap 6. Shell script Buitenverlichting.sh

#!/bin/bash
# script zet Buitenverlichting op 80% indien een van de bewegingsmelders beweging detecteert
# tussen zonsondergang en zonsopgang
# zet een timer op 300 seconden
# en indien er nog geen script loopt start hij een countdown tot de timer op 0 staat
# indien de tijd voor 23:00 uur is, dimt hij terug naar 25%, anders zet hij de buitenverlichting uit
#

# check eerst of de timer al actief is, in dat geval brandt het buitenlicht al en hoeft alleen de
# timer verhoogt te worden tot 300, een ander instantie van het script doet de countdown en zet het licht uit of op 25%
verbose=1 # 0=nodebug, 1=debug
timer_active=`curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=getuservariable\&idx=37 -s | grep Value | awk ‘{print substr($3,2,1)}’`
log_message=””
debug=””

if [ $verbose -gt 0 ]; then echo Timer_active=$timer_active; fi;

if [ $timer_active -gt 0 ]
then
# timer is actief, dus volstaan kan worden om de timer te verhogen naar 300 sec.
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=TimerBuitenverlichting\&vtype=0\&vvalue=300)

if [ $verbose -gt 0 ]; then echo Set TimerBuitenverlichting=300 $debug; fi

# log actie
log_message=”Timer%20Buitenverlichting%20op%20Actief%20gezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message

# exit script
else
# variable declaratie
#
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=$((10#$(echo $zonsondergang | cut -c1-2)))
min=$((10#$(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=$((10#$(echo $zonsopgang | cut -c1-2)))
min=$((10#$(echo $zonsopgang | cut -c3-4)))
let zonsopgang=(uren*60)+min;
uren=$((10#$(date ‘+%H’)))
min=$((10#$(date ‘+%M’)))
let tijd=(uren*60)+min
if [[ $tijd -lt $zonsopgang ]]
then
let tijd=tijd+1650;
fi
let zonsopgang=zonsopgang+1650;

if [ $verbose -gt 0 ]
then
echo Zonsondergang=$zonsondergang
echo Zonsopgang=$zonsopgang
echo Tijd=$tijd
fi

# indien tussen zonsondergang en zonsopgang, zet dan de buitenverlichting aan en op 80%
if [[ $tijd -gt $zonsondergang ]] && [[ $tijd -lt $zonsopgang ]]
then
# zet device Buitenverlichting aan en op 80%
debug=$(curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=switchlight\&idx=168\&switchcmd=On)
if [ $verbose -gt 0 ]; then echo Set device Buitenverlichting On $debug; fi
sleep 2
debug=$(curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=switchlight\&idx=168\&switchcmd=Set%20Level\&level=80)
if [ $verbose -gt 0 ]; then echo Set device Buitenverlichting op 80\% $debug; fi

# zet timer op 300 sec.
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=TimerBuitenverlichting\&vtype=0\&vvalue=300)

if [ $verbose -gt 0 ]; then echo Set TimerBuitenverlichting=300 $debug; fi

# zet timer op actief
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=TimerBuitenActief\&vtype=0\&vvalue=1)

if [ $verbose -gt 0 ]; then echo Set TimerBuitenActief=1 $debug; fi

# log acties
log_message=”Buitenverlichting%20op%2080%20gezet,%20Timer%20Buitenverlichting%20op%20300%20sec.%20gezet,%20Timer%20geactiveerd”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message

# start countdown
i=$(curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=getuservariable\&idx=36 -s | grep Value | awk ‘{print $3}’ | sed ‘s/\”//g’ | sed ‘s/,//g’)

if [ $verbose -gt 0 ]; then echo Initvalue TimerBuitenverlichting=$i $debug; fi

while [[ $i > 0 ]]
do
((i–))
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=TimerBuitenverlichting\&vtype=0\&vvalue=$i
sleep 1
i=`curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=getuservariable\&idx=36 -s | grep Value | awk ‘{print $3}’ | sed ‘s/\”//g’ | sed ‘s/,//g’`

if [ $verbose -gt 0 ]; then echo Countdown=$i $debug; fi

done

# Voeg gepasseerde 5 min (300 sec) toe aan tijd
let tijd=tijd+5

# als tijd tussen zonsondergang en 23:00 uur ligt, dim dan de buitenverlichting naar 25%
if [[ $tijd -gt $zonsondergang ]] && [[ $tijd -lt 1380 ]]
then
# zet device Buitenverlichting op 25%
debug=$(curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=switchlight\&idx=168\&switchcmd=Set%20Level\&level=25)

if [ $verbose -gt 0 ]; then echo Set Buitenverlichting op 25\% $debug; fi

# log actie
log_message=”Timer%20afgelopen,%20Buitenverlichting%20op%2025%20gezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message

elif [[ $tijd -ge 1380 ]] && [[ $tijd -lt $zonsopgang ]]
then
# zet device Buitenverlichting uit
debug=$(curl –url http://192.168.2.29:8080/json.htm\?type=command\&param=switchlight\&idx=168\&switchcmd=Off)

if [ $verbose -gt 0 ]; then echo Set device Buitenverlichting off $debug; fi

# log actie
log_message=”Timer%20afgelopen,%20Buitenverlichting%20uitgezet”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message

fi

# zet timer op deactief
debug=$(curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=updateuservariable\&vname=TimerBuitenActief\&vtype=0\&vvalue=0)

if [ $verbose -gt 0 ]; then echo Set TimerBuitenActief=0 $debug; fi

# log actie
log_message=”Timer%20gedeactiveerd”
curl -s –url http://192.168.2.29:8080/json.htm\?type=command\&param=addlogmessage\&message=$log_message

fi

fi

Toelichting: Zie commentaar

Stap 7. Potentiometers van de bewegingsmelder ingesteld

Tijdinstelling: 5 minuten (instelling maakt niet uit, wordt overruled door script)

Bedrijfskeuzeschakelaar: T/S (Standaardbedrijf)

Gevoeligheid: N(ormaal)

 

Geef een reactie

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