Hallo zusammen,
ich will nochmal kurz auf die Lösung mit einer Fritzbox zurück kommen.
Wir haben bei unseren Smartphones (3 x Android und 1 x iPhone) WLAN immer an.
Die Batterielaufzeit wird davon nur minimal beeinflusst, falls das aber noch eine Rolle spielt kann man zumindest unter Android bei erreichen einer bestimmten Funkzelle (Zuhause) das WLAN einschalten und sonst aus lassen.
Ich hatte beobachtet dass die per WLAN eingebuchten Handys in der Fritzbox als Online markiert sind, egal ob Mails abgeholt werden oder nicht.
Es scheint so als dass die Handys da eine minimale Verbindung zum Accesspoint bestehen lassen und erst bei einer Datenübertragung "aufdrehen". Ich kenne mich im WLAN Bereich nicht so aus...
Zuerst habe ich in der Fritzbox die Namen rausgesucht die ich den Smartphones gegeben habe.
Dann habe ich für jedes Smartphone eine Variable auf der CCU angelegt sowie eine weitere Variable in der ich die Zeit eintrage wie lange die Schleife im Script läuft.
Das habe ich nur gemacht damit ich in eventuellen weiteren Programmen die Info habe wann die nächste Aktualisierung erfolgt.
Folgendes Script habe ich mit Hilfe aus dem IP-Phone Forum und diversen Quellen aus dem Internet erstellt. Geht bestimmt auch noch eleganter, bin nicht der Shell Profi
Code: Alles auswählen
#!/bin/sh
while true; do
local looptime=180
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3871&new_value=180' | echo $(date) Setze PhoneLoop $looptime auf Homematic
landevicelist() {
local count=0
local maxcount=$(ctlmgr_ctl r landevice settings/landevice/count)
while [ $count -lt $maxcount ] ; do
local name=$(ctlmgr_ctl r landevice settings/landevice$count/name)
if [ $name = Phone1-OneX ] ; then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3867&new_value=true' | echo $(date) $name, Phone 1, angemeldet
else
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3867&new_value=false' | echo $(date) $name, Phone 1, abgemeldet
fi
elif [ $name = Phone2-Wildfire ] ; then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3868&new_value=true' | echo $(date) $name, Phone 2, angemeldet
else
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3868&new_value=false' | echo $(date) $name, Phone 2, abgemeldet
fi
elif [ $name = Phone3-Lutea ] ; then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3869&new_value=true' | echo $(date) $name, Phone 3, angemeldet
else
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3869&new_value=false' | echo $(date) $name, Phone 3, abgemeldet
fi
elif [ $name = Phone4-iPhone ] ; then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3870&new_value=true' | echo $(date) $name, Phone 4, angemeldet
else
wget -q -O /dev/null 'http://homematic.fritz.box/config/xmlapi/statechange.cgi?ise_id=3870&new_value=false' | echo $(date) $name, Phone 4, abgemeldet
fi
fi
: $((count++))
done
}
landevicelist
echo sleep $looptime
sleep $looptime
done
Dieses Script habe ich auf dem USB-Stick der Fritzbox gespeichert.
ES wird über die Datei debug.cfg in /var/flash nach /var/tmp kopiert, ausführbar gemacht und gestartet.
Nun wird alle 3 Minuten der Status der Variablen gesetzt und man kann diese zur Anwesenheitserkennung nutzen.
Beim abmelden der Smartphones von der Fritzbox oder wenn diese den Funkbereich verlassen, kann es allerdings 3-4 Minuten länger dauern bis die Fritzbox den Offline Status meldet. Für mich ist das O.K. Beim ankommen im Funkbereich geht es fast in Echtzeit...
Gruß, Jochen