Presence detection | Aanwezigheids detectie Domoticz op Synology

Om Domoticz te laten detecteren of je thuis bent kun je presence detection gebruiken. Door een vast ip adres van je telefoon te zoeken (pingen) binnen je thuisnetwerk stelt Domoticz vast of je thuis bent ja of nee. Met deze informatie kun je weer automatisch acties laten uitvoeren. Deze guide is er omdat het stappenplan in de wiki van Domoticz gebaseerd is op een installatie op een Raspberry Pi, terwijl ik een Synology NAS gebruik. Veel stappen komen overeen, maar soms moet je wat extra acties doen om het te laten werken. Hier lees je hoe je dat doet. Je kunt deze guide ook gebruiken als je bijvoorbeeld van je TV, Tablet, Mediacenter of ander netwerk apparaat wilt weten of ie online is (en dus aanstaat).

Om aan de slag te gaan om je smartphone, TV of ander apparaat dat je wilt detecteren, te kunnen detecteren moet je een vast IP-adres instellen. In het geval van een smartphone niet op je apparaat zelf, maar in de router. Dat gaat dmv een static DHCP lease. Dat is een IP adres wat de router altijd aan dit apparaat geeft. Hij bepaalt dat obv het unieke MAC adres. Een uniek apparaat adres dus. Omdat je je telefoon op meerdere plekken (en dus meerdere netwerken) gebruikt kun je je telefoon geen vast IP adres geven. Je zou dan bij ieder netwerk van instellingen moeten switchen. Daarom gebruiken we de static DHCP lease functie uit de router. Voor een TV, Mediacenter of ander apparaat wat altijd binnen je eigen netwerk blijft kun je wel gewoon een vast ip adres instellen op het apparaat zelf. Je kunt dan stap 1 overslaan.

1. Stel je router juist in


Surf naar de webinterface van de modem/router. In mijn geval het standaard Ziggo modem (Cisco EPC3928AD). Log in met je inloggegevens (standaard is dat ziggo en draadloos). Klik op Geavanceerd, daarna ga je naar LAN Setup -> Connected Devices Summary.

Check of je telefoons IP-adres in het lijstje staat, zo niet, voeg ‘m toe. Onthoud of noteer het IP adres en MAC-adres wat de router je telefoon geeft.

Presence detection Domoticz
Instellingen Ziggo Modem

 

Let op: na een stroomonderbreking kan de ziggomodem ineens een ander adres toewijzen aan je apparaat. Je kunt de modem forceren om toch jouw gekozen ip-adres toe te wijzen aan dat apparaat. Dit kun je doen door middel van het MAC-adres en ip-adres in te vullen in het Pre-assigned DHCP IP adresses venster. Mocht je modem het adress steeds vergeten of ‘m niet willen toevoegen, schakel dan DHCP even uit en zet het direct weer aan terwijl je de (WiFi) verbinding met je apparaat ook verbreekt. Vul nu je IP-adres en MAC adres in en je zult zien dat de modem het nu wel onthoud.

Let op 2: door een bug in de Ziggo firmware vergeet het ziggomodem na een stroomonderbreking ook vaak de ingestelde Pre-assigned DHCP adressen. Je moet dit voor ieder adres dan opnieuw instellen in het modem volgens bovenstaande manier.


2. Domoticz instellen

Ga naar de webinterface van Domoticz en  klik op Hardware in het menu. Voeg nieuwe hardware toe door het volgende in te voeren:

  • Type: Dummy switch
  • Name: bijvoorbeeld Samsung S5
  • Gegevens timeout: niet actief

dummy switch

Klik op Schakelaars, daarna op Handmatig. Je krijgt nu opties hoe en waarmee de schakelaar te schakelen. De schakelaar moet gaan reageren op de dummy switch, welke we straks met een script gaan aan en uit zetten. We kiezen dus voor de zojuist aangemaakte Dummy switch, de andere waarden hoef je niet aan te zitten.

Ga nu naar Apparaten in het menu. Hier staat nu de schakelaar in de apparatenlijst. Kijk in de lijst wat de IDX is van je schakelaar. Onthoud die.

3. Configureren van het script

Nu gaan we ervoor zorgen dat de switch aan en uit gezet word door een ping commando te versturen naar de smartphone. Als de telefoon reageert ben je thuis, zo niet, niet. (of staat de WiFi uit van je telefoon). Om te kunnen pingen hebben we een scriptje nodig dat die actie uitvoert. Dat script plaatsen we op de NAS en laten de NAS dat om de x minuten uitvoeren.

Om het script op de NAS in een beveilgde Domoticz map te zetten hebben we SCP toegang op de NAS nodig. Als je al eens eerder via SSH, SCP of Putty contact gehad hebt met de NAS kun je deze stap waarschijnlijk overslaan.

Gebruikers van DSM 6 kunnen niet zomaar de benodigde ‘root’ toegang verkrijgen op de NAS. Deze gebruikers moeten eerst Root toegang verkrijgen op de NAS. Gelukkig is dat eenvoudig. Mocht je er toch niet uitkomen, kun gebruik maken van mijn ping script. Natuurlijk kunnen DSM 5 gebruikers dit script ook gebruiken!

3.1 SSH/SCP activeren op de NAS

Log in op je NAS met admin rechten en ga naar het configuratiescherm. Klik op Terminal en SNMP en vink SSH toegang aan. Onthoud het poortnummer.

Om te communiceren met de NAS via deze speciale verbinding hebben we een apart programma nodig. Download en installeer WinSCP. Maak een nieuwe verbinding in WinSCP aan.

  • Type: SCP
  • Gebruikersnaam: root
  • Wachtwoord: je admin wachtwoord van de NAS.

winscp

Je krijgt nu een soort verkenner in beeld. Navigeer naar de map: /volume1/@appstore/domoticz/var/scripts (tenzij je domoticz op volume2 of hoger geïnstalleerd hebt).

Maak hier een nieuw bestand aan met de volgende inhoud:


#!/bin/ash
 
# Settings
PRESENCE_IP="xxx.xxx.xxx.xxx"	# IP Address of Device to be checked
DOMO_IP="xxx.xxx.xxx.xxx"	# Domoticz IP Address
DOMO_PORT="xxxx"		# Domoticz Port
PRESENCE_IDX="x"		# DEVICE Switch IDX
WAIT_TIME="10"			# Time to wait before retry
LOOPCOUNTER=3			# Number of retries

# DO NOT MODIFY BELOW HERE
# Check if DEVICE in online 
echo $(date) "Device presence check starting" >> /var/log/cron.log

# Function check: pings te specified device
check()
{
	PINGTIME=`ping -c1 -q $PRESENCE_IP | awk -F"/" '{print $5}' | xargs`
	echo "Pingtime:" $PINGTIME

 	if expr "$PINGTIME" '>' 0
	then
		curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$PRESENCE_IDX" | grep "Status" | grep "On" > /dev/null
		if [ $? -eq 0 ] ; then
			echo "DEVICE is ON"
		else
			curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=switchlight&idx=$PRESENCE_IDX&switchcmd=On"
			echo "DEVICE switched ON"
		fi
		echo $(date) "Device presence check finished" >> /var/log/cron.log
		exit
	else
		if expr "$LOOPCOUNTER" '=' 0
		then
			curl -s "http://$DOMO_IP:$DOMO_PORT/json.htm?type=devices&rid=$PRESENCE_IDX" | grep "Status" | grep "Off" > /dev/null
			if [ $? -eq 0 ] ; then
				echo "DEVICE is OFF"
				echo $(date) "Device presence check finished" >> /var/log/cron.log
				exit
			else
				echo "DEVICE OFF"
				# Send data
				curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=switchlight&idx=$PRESENCE_IDX&switchcmd=Off"
				echo $(date) "Device presence check finished" >> /var/log/cron.log
				exit
			fi
		fi
	fi
}

# Main loop
while [ $LOOPCOUNTER -gt 0 ]; do
	echo "Retries left: " $LOOPCOUNTER
	LOOPCOUNTER=$((LOOPCOUNTER - 1))
	check
	echo "...waiting..."
	sleep $WAIT_TIME
done

Pas de gegevens aan boven ‘ # DO NOT MODIFY BELOW HERE ‘ en sla het bestand op. Gebruik een makkelijke en korte naam zonder speciale tekens of spaties. Bijvoorbeeld ‘PrecenseSamsung.sh’.

 

Lukt het niet of krijg je vreemde fouten?

Je kunt hier ook het script downloaden en dan aanpassen en uploaden via WinSCP naar je NAS.
Om het script te kunnen uitvoeren moeten we het executeble (uitvoerbaar) maken. Dat kunnen we doen met een chmod commando in Putty.

4. Maak script executable

Om SSH commando’s te versturen naar de NAS, wat nodig is om het script executable te maken, hebben we Putty nodig. Download en installeer Putty. Putty lijkt erg op een DOS prompt scherm uit Windows. Maak een verbinding met de volgende gegevens:

  • Type:  SSH
  • Gebruikersnaam: root
  • Wachtwoord: je admin wachtwoord van de NAS.

Heb je DSM versie 6 of hoger? Dan is het root account gedeactiveerd. Volg dan eerst stap 4.1 anders kun je deze overslaan.

Vind je deze stappen te ingewikkeld of lukt het niet? Je kunt ook gebruik maken van mijn ping script!

4.1. Activeren root op DSM 6 en hoger

Gebruikers van DSM 6 en hoger kunnen niet zomaar de benodigde ‘root’ toegang verkrijgen op de NAS. Deze gebruikers moeten eerst Root toegang verkrijgen op de NAS. Gelukkig is dat eenvoudig.

4.2 Maak script uitvoerbaar

Navigeer naar de map met daarin het script dmv het volgende commando:

'cd /volume1/@appstore/domoticz/var/scripts'

Nu kunnen we het bestand uitvoerbaar maken door

'chmod +x filename.sh'

Je krijgt helaas geen enkele terugkoppeling of het is gelukt of niet. We gaan ervan uit van wel en gaan nu instellen dat het script iedere x minuten uitgevoerd wordt. Dat doen we in DSM van de NAS.

5. Maak cronjob aan

Ga in het configuratiescherm van de NAS naar Taakplanner. Klik hier op maken en op ‘door gebruiker gedefinieerd script’. Als gebruiker kun je “root” invullen en vul het pad in naar het script: /volume1/@appstore/domoticz/scripts/bestandsnaam.sh. Klik op het tabje Planning hoe vaak en wanneer je het script wilt laten uitvoeren. Bijvoorbeeld 24 uur per dag, iedere minuut.

taakplanner

6. Kijk of het werkt!

Ga naar schakelaars in Domoticz en zie of het lampje aan en uitgaat als je de wifi van je telefoon in- en uitschakelt! Houd daarbij natuurlijk in je achterhoofd dat het minimaal de tijd duurt die je ingegeven hebt bij de taakplanner.

Extra tip: noteer in de omschrijving van je schakelaar het ip-adres en MAC adres om later sneller wijzigingen aan te kunnen brengen of ter naslag.

 

Op basis van je aanwezigheid kun je weer een hoop automatiseren. Bijvoorbeeld de radio aan, vijverpomp aan of de lampen aan. Heb je een mooi project rond deze guide gemaakt, heb je andere ideeën of een vraag over het script? Laat hieronder je reactie achter!

Wil je direct aan de slag lees dan de andere blogs:

Bedien je TV met Domoticz | Deel 1

Bedien je TV met Domoticz | Deel 2

18 Replies to “Presence detection | Aanwezigheids detectie Domoticz op Synology”

  1. Hallo Wouter,

    Bedankt voor je mooie guide.
    Ik heb het geprobeerd toe te passen. Maar het script wil de dummy switch niet om zetten.
    Als ik in cronjob editor kijk, wordt het script wel uitgevoerd. Er staat namelijk in de log: Sat Oct 29 14:15:49 CEST 2016 �Device presence check starting�
    Maar verder niks. Er gebeurd niets.
    Doe ik iets verkeerd? Ben ik iets vergeten?

    Bedankt alvast.

    1. Hoi Marcel,

      Leuk dat je de guide hebt gevolgd! Ik help je graag verder!

      Zo te zien werkt het starten van het script wel dus het chmod commando (stap 4) heeft het gedaan. Misschien kun je nog eens de variabelen bovenaan het script checken? IP adres van domoticz, ip adres van het apparaat, poort en idx van de dummy switch?

      Is er een teken van reactie in de log van domoticz?

      Succes!

      1. Hi Wouter,
        Bedankt voor je ondersteuning!
        Ik heb de variabelen nogmaals gecontroleerd en deze zijn correct.
        In de log van domoticz verschijnt geen melding. (alleen van andere hardware)

        1. Hoi Marcel,

          Graag gedaan! Ik heb door middel van ShellCheck (https://www.shellcheck.net/) even het script gechecked op mogelijke fouten. Het bleek dat tijdens het op de site zetten van de code van het script alle dubbelquotes (“) vervangen waren door (” en “). Ik denk dat dat de fout is. Je kunt je script door middel van zoeken en vervangen aanpassen. Vergeet het niet voor ” en “ te doen!

          Laat me weten als het geholpen heeft! Ik heb het script ook direct op deze pagina aangepast.

          Succes!

  2. Hoi Wouter,

    Ik heb jou script ook even door de ShellCheck gehaald, maar daar zitten toch wel een paar fouten in.
    Zoals bv:
    curl -s -I -H “Accept: application/json” “http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=switchlight&idx=$PRESENCE_IDX&switchcmd=On”
    Dit moet denk ik zijn “command&param” in plaats van “command¶m”
    en
    Line 29:
    if [ $? -eq 0 ] ; then
    ^– SC2181: Check exit code directly with e.g. ‘if mycmd;’, not indirectly with $?.

    Helaas is mijn kennis van deze programmeer taal niet goed en kan ik deze fouten niet herstellen. Ik ben er druk mee bezig geweest maar voor deze laatste in Line 29, kan ik geen oplossing vinden.

    Mijn verzoek is of jij nog eens zou willen checken.

    Alvast bedankt

    1. Hoi Patrick,

      Ik krijg inderdaad dezelfde fouten. Ik had gehoopt dat het opgelost zou zijn. Ook ik krijg de melding over de quotes en de andere vreemde tekens. Ik ga vanmiddag het script als bestandje uploaden zodat jullie het gewoon kunnen downloaden. Blijkbaar vervangt de sitesoftware automatisch allerlei tekens en opmaak.

      Check dus later deze week even de blog opnieuw!

      Groetjes Wouter

  3. Hoi Wouter,

    Eindelijk gevonden wat ik zocht: een duidelijke werkomschrijving om dit op mijn NAS werkend te krijgen!
    Alleen bij jouw punt 4: gebruikersnaam: root en admin-wachtwoord van de NAS. Inloggen met “root” in Putty
    geeft access denied. Met “admin” inloggen lukt wel en kan ik je daaropvolgende stappen ook uitvoeren. Echter op het eind als ik de geplande taak handmatig een keer laat uitvoeren krijg ik een email met de melding: “permission denied” (ik heb e-mail melding aangevinkt). Ik heb DSM 6.0.2-8451 Update 5 op mijn NAS draaien.

    Ben ik nog op weg te helpen?
    Alvast bedankt!

    1. Hoi John,

      Bedankt voor je compliment! Dat motiveert mij meer leuke blogposts te blijven maken!

      Natuurlijk ben je nog te helpen! Het één heeft met het ander te maken.

      Het klopt dat je met het admin account geen toegang krijgt, omdat het admin account daarvoor niet genoeg rechten heeft. Het root account is, (net als op andere Linux en ook Android systemen) het ‘master’ account. Dit account mag alles. Dus ook de actie die je gaat uitvoeren uit mijn guide.

      Het is goed dat je erbij vermeld dat je DSM versie 6 gebruikt. Na wat Google’en zie ik dat je vanaf versie 6 een extra handeling moet doen om het root account weer te activeren.
      Lees hier hoe.

      Ik zal dit verduidelijken in de guide!

      Heel veel succes en plezier!

      Wouter

  4. Hoi Wouter,

    Door jouw goede “support” ben ik inmiddels weer een stap verder gekomen: in Putty heb ik nu toegang!
    Het probleem nu is dat inloggen in WinSCP onder “root” niet lukt. Dit zal natuurlijk ook wel liggen aan die DSM6 vermoed ik.
    Onder “admin” lukt het wel en kan ik jouw Presence.sh scriptje in de /volume1/@appstore/domoticz/var/scripts plaatsen.
    De log van de taakplanner geeft nu het volgende aan:

    Beste gebruiker
    Taakplanner heeft een geplande taak voltooid.
    Taak: Presence
    Starttijd: Thu, 08 Dec 2016 20:50:01 GMT
    Stoptijd: Thu, 08 Dec 2016 20:50:02 GMT
    Huidige status: 0
    Standaard uitvoer/fout:
    Retries left: 3
    Pingtime: 500.130
    1
    HTTP/1.1 401 Unauthorized
    Content-Length: 91
    Content-Type: text/html
    Set-Cookie: SID=none; path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT
    WWW-Authenticate: Basic realm=”Domoticz.com”
    Unauthorized401 UnauthorizedDEVICE switched ON

    Moet WinSCP inlog persé ook onder root?

    Ik kan geen oplossing vinden. mogelijk dat je meer info voor mij hebt? Alvast bedankt!

    John

    1. Hoi John,

      Super dat het gelukt is! We zijn weer een stapje verder.

      Ik lees op fora dat het voor WinSCP ook lastig is om root toegang te krijgen. Maar gelukkig niet onmogelijk!

      Als ik dit bericht over WinSCP toegang op DSM6 lees dan zou het op deze manier toch moeten werken.

      Laat even weten of het gelukt is, dan kan ik de tutorial daar weer op aanpassen.

      Het is ook belangrijk om de taak in taakplanner uit te voeren als root.

      Succes

      Wouter

  5. Hoi Wouter,

    Helaas lukt het als “root” inloggen op WinSCP me niet. Ik heb van alles geprobeerd en diverse stappen doorlopen en regels aangepast om in te kunnen loggen op WinSCP, echter zonder resultaat. Ik denk dat dit er de oorzaak van is, dat ik jouw mooie script niet aan het draaien krijg: jammer!
    Is er nog een andere mogelijkheid/omweg om het aan het draaien te krijgen op mijn NAS? Ik wil graag aanwezigheidsdetectie in Domoticz!

    John

    1. Hoi John,

      Dat is jammer! Blijkbaar heeft Synology de nas met DSM6 verder beveiligd dan met DSM5. Gelukkig betekend dat niet dat aanwezigheidsdetectie niet mogelijk is!

      Aangezien je een smartphone hebt, ik weet alleen niet of dat iOS of Android is, kun je de Domoticz app gebruiken. Deze app heeft de functie Geofencing. Zodra je apparaat in de buurt is meld de Domoticz app dat in Domoticz op je NAS. De locatie heeft een wat grotere straal dan je WiFi netwerk. Het zou dus kunnen dat als je straat in rijdt, Domoticz al ziet dat je thuis bent. De app uit bovenstaande link is voor Android. Voor iOS zullen ze ook wel een app hebben. De Geofencing functie zit alleen in de betaalde versie van de app. Je zou nog op alternatieven kunnen zoeken binnen de stores.

      Succes!

      Wouter

  6. Bij invullen van het pathv/volume1/@appstore/domoticz/scripts/TelefoonPresence.sh. in de crontab van mijn Synology krijg ik melding dat er alleen maar (Engelse) tekens mag bevatten, niet mag beginnen of eindigen met een spatie. Ik vermoed dus dat de ‘@’ in de @appstore een probleem is. Zou het kunnen werken als ik dit script naar bijvoorbeeld /var/packages/ verplaats?

    1. Okay, dat was dus een dom iets van mij. Dit was enkel de input voor de naam van het script. Lijkt of ik nog niet wakker ben.

  7. Script opnieuw geinstalleerd, werkt fantastisch. Op mijn DSM 6.1 moest ik na het inloggen ‘sudo -i’ doen, ipv sudo su.

    Jammer is dat je door de cronjob en wifi alleen maar om de minuut kan testen of het toestel in de omgeving is. Daar ga ik nog eens verder naar zoeken.

Laat weten wat je van dit artikel vindt!