Guide: Ein Heimnetzwerk mit DrayTek - Anwesenheitserkennung per SSH

Anwesenheitserkennung per SSH

Für unsere Homematic nutzten wir bisher das hm_pdetect Addon in Verbindung mit unserer Fritz!Box. Dieses prüft über eine API, ob bestimmte Hosts mit der Fritz!Box verbunden sind und speichert das Ergebnis in Variablen auf der Homematic. Da dieses Addon mit dem DrayTek Router nicht mehr nutzbar war, haben wir auf dem Raspberry eine simple Variante entwickelt, die wir an dieser Stelle veröffentlichen möchten. Das Script besteht grundlegend aus zwei Scripten - einmal einem normalen Bash-Script und zum automatisierten SSH-Login auf dem Router über ein expect-Script. Folglich muss expect auch installiert und nutzbar sein.

Das bash-Script benötigt eine kurze Konfiguration: Zum einen werden die MAC-Adressen der W-Lan Geräte, die abgefragt werden sollen, benötigt. Zum anderen müssen die zugehörigen ID-Werte aus der Homematic XML-API eingetragen. Hinter der Variable base_ip verbirgt sich die IP, unter der die Homematic inklusive der XML-API erreichbar ist.

wrapper.sh

#!/bin/bash
mac=(xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx)
ise_id=(4782 5445 5444)
ise_id_global=4785
global=false
base_ip="192.168.178.4"

${BASH_SOURCE%/*}/expect.sh > ${BASH_SOURCE%/*}/temp.raw

total=${#mac[*]}
for (( i=0; i<=$(( $total -1 )); i++ ))
do
	if grep -q -c1 "${mac[$i],,}" ${BASH_SOURCE%/*}/temp.raw; then
		echo "${mac[$i],,} is online"
		wget "https://$base_ip/config/xmlapi/statechange.cgi?ise_id=${ise_id[$i]}&new_value=1" --no-check-certificate -q -O /dev/null -o /dev/null
		global=true
	else
		echo "${mac[$i],,} is offline"
		wget "https://$base_ip/config/xmlapi/statechange.cgi?ise_id=${ise_id[$i]}&new_value=0" --no-check-certificate -q -O /dev/null -o /dev/null
	fi
done

if ${global}; then
	wget "https://$base_ip/config/xmlapi/statechange.cgi?ise_id=${ise_id_global}&new_value=1" --no-check-certificate -q -O /dev/null -o /dev/null
else
	wget "https://$base_ip/config/xmlapi/statechange.cgi?ise_id=${ise_id_global}&new_value=0" --no-check-certificate -q -O /dev/null -o /dev/null
fi

Das Bash-Script ruft wiederrum die expect.sh auf. Diese übernimmt die automatisierte Anmeldung am Router per SSH und die nötige Abfrage von W-LAN Geräten. Hier muss das Passwort und die IP des Routers angepasst werden. Im Falle der SSH-Verbindung ist der Parameter -c 3des-cbc nötig, da sonst kein Verbindungsaufbau möglich war.

expect.sh

#!/usr/bin/expect -f
spawn ssh Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein..1 -c 3des-cbc
expect "password:"
send "pass\r"
expect "DrayTek>"
send "wl stalist show\r"
expect "DrayTek>"
send "wl_dual stalist show\r"
expect "DrayTek>"
send "exit\r"
close

Letzten Endes wird der Aufruf der wrapper.sh als cron eingetragen, welcher alle 30 Sekunden ausgeführt wird. Hierbei muss man sich eines kleinen Kniffs bedienen, da crontabs auf Linux eigentlich nur jede Minute ausgeführt werden können.

* * * * * /home/pi/wifi-scan/wrapper.sh >/dev/null 2>&1
* * * * * (sleep 30; /home/pi/wifi-scan/wrapper.sh >/dev/null 2>&1)
Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.