10. April 2014

Heimsteuerung mit WLan

Wenn im Netz hostapd als WLan-Accesspoint zum Einsatz kommt, so kann das Tool hostapd_cli genutzt werden um auf Events wie das An- und Abmelden von Geräten mit bestimmten Programmen zu reagieren. Das Tool hostapd_cli wurde mit hostapd bereits installiert und ruft bei An- und Abmelden eines Gerätes ein vorgegebenes Script auf und übergibt die entsprechende MAC-Adresse. Ein einfaches Script könnte wie folgt aussehen:
#!/bin/bash #Überwachte Geräte homeDevice[0]="00:11:22:33:44:5a" homeDevice[1]="00:11:22:33:44:5b" homeDevice[2]="00:11:22:33:44:5c" countHomeDevices=${#homeDevices[*]} #Statusmeldungen von hostapd_cli connected="AP-STA-CONNECTED" disconnected="AP-STA-DISCONNECTED" echo $3 $(date) $2 for (( i=0; i<=$(( $countHomeDevices -1 )); i++ )); do if [ $3 = "${homeDevices[$i]}" ]; then echo "jetzt könnte ich was tun" fi done
Das Script mit chmod u+x ausführbar machen und dann hostapd_cli zum Testen starten
sudo hostapd_cli -p /var/run/hostapd -i wlan0 -a /home/user/scripte/hostapd_event.sh
Anschließend soll hoastapd_cli natürlich auch als Dienst im Hintergrund laufen und automatisch starten. Dazu wird noch ein weiteres Script benötigt. Das stammt von folgender Seite: http://wiki.excito.org/wiki/index.php/Controling_Homeautomation_devices_using_wifi_presence
#!/bin/sh ### BEGIN INIT INFO # Provides: hostapd_cli # Required-Start: $remote_fs hostapd # Required-Stop: $remote_fs # Should-Start: $network # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Utility to trigger events based on connects/disconnects # Description: ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON_SBIN=/usr/sbin/hostapd_cli NAME=hostapd_cli DESC="hostapd cli" PIDFILE=/var/run/hostapd_cli.pid [ -x "$DAEMON_SBIN" ] || exit 0 DAEMON_OPTS="-B -a /home/user/scripte/hostapd_event.sh" . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \ -- $DAEMON_OPTS >/dev/null log_end_msg "$?" ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" log_end_msg "$?" ;; restart|force-reload) $0 stop sleep 8 $0 start ;; status) status_of_proc "$DAEMON_SBIN" "$NAME" exit $? ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
Mit Hilfe dieses Scriptes können nur bestimmte Funktionen, Benachrichtigungen usw. ausgelöst werden, wenn sich ein (bestimmtes) Gerät im WLan An- oder Abmeldet. Zu Bedenken wäre noch, dass mobile Geräte sich meist nicht beim WLan abmelden sondern einfach irgendwann nicht mehr in der Reichweite sind. In diesem Fall erfolgt die Reaktion auch erst verzögert.