På begäran av en av våra medlemmar så skall jag nu försöka förklara hur man kan skapa en kontroll om någon är hemma. Det hela bygger på grundidén att när man kommer hem så kopplar mobilen upp sig automagiskt på WiFi nätet - när så sker, med en minuts intervall, så körs ett script som kollar vem som är hemma på Asus routern och när en person kommer / går så körs en http request till HC2 för att trycka på lämplig knapp som talar om "Lars har kommit" eller "Lars har gått" och lite sådant.
Det skall redan nu erkännas att detta är inte direkt den mest precisa och snabbaste varianten av hur man kollar om någon är hemma. Om man använder t.ex. GPS och någon lokal programvara i sin mobile som Locale som känner av vart man är och sedan via t.ex. en VPN tunnel trycker motsvarande knappar, så kommer man troligen få bättre hantering av just vart man är relativt sin bostad - men GPS drar rätt mycket kräm. Minst sagt, och jag har valt annan lösning - men ni skall veta att det finns lösningar med högre precision, och snabbhet - till priset av högre batteriförbrukning.
Åter till denna lösning.
Först måste du installera RMerlin's Asuswrt firmware i din router, och för att göra det så rekommenderar jag:
http://asuswrt.lostrealm.ca/
http://www.snbforums.com/forums/asuswrt-merlin.42/
När det är gjort, så måste du också aktivera jffs custom sciprts och klara av att logga in på routern med t.ex. putty för att köra custom scripts. För vi kommer att skapa ett script och en startsekvens för att scriptet skall köras varje minut.
När du då gjort ovanstående, så logga på med t.ex. putty och gå till /jffs/scripts och lägg in motsvarande nedanstående script, med de ändringar som krävs (MAC adresser som skall bevakas, antal personer och så vidare - det kan bli en del saker du må ändra på - men det är i princip bara copy&paste och döpa om variabler). Du behöver ändra följande:
- Namn på de som skall övervakas (Lars resp Marianne)
- Deras respektive MAC adresser (xx:xx:xx:xx:xx:xx resp yy:yy:yy:yy:yy:yy)
- Ditt admin lösenord (xxxxxx)
- Din HC2's IP adress (yyy.yyy.yyy.yyy)
- Din VDs id (zz)
- Dina respektiva knappars värde: (qqq - observera att du har olika qqq för varje knapp och användare!)
Jag har döpt detta script till CheckIfHome (OBS! Detta script är skrivet för AC87 routern, och innehåller kommandon för Quantenna radion) :
Code: Select all
#!/bin/sh
Lars=Borta
Marianne=Borta
macadresser=`wl -i eth1 assoclist`
antal=`qcsapi_sockrpc get_count_assoc wifi0`
while [ $antal -gt 0 ]
do
antal=`expr $antal - 1`
macadresser="`qcsapi_sockrpc get_station_mac_addr wifi0 $antal`;$macadresser"
done
case "$macadresser" in
*xx:xx:xx:xx:xx:xx*)
Lars=Hemma
;;
esac
case "$macadresser" in
*yy:yy:yy:yy:yy:yy*)
Marianne=Hemma
;;
esac
if [ "$Lars" = Hemma ]
then
if [ ! -f /jffs/scripts/CheckUser/Hemma_Lars ]
then
touch /jffs/scripts/CheckUser/Hemma_Lars
wget -qO- "http://admin:xxxxxx@yyy.yyy.yyy.yyy/api/callAction?deviceID=zz&name=pressButton&arg1=qqq" >/dev/null 2>&1
fi
else
if [ -f /jffs/scripts/CheckUser/Hemma_Lars ]
then
rm -f /jffs/scripts/CheckUser/Hemma_Lars
wget -qO- "http://admin:xxxxxx@yyy.yyy.yyy.yyy/api/callAction?deviceID=zz&name=pressButton&arg1=qqq" >/dev/null 2>&1
fi
fi
if [ "$Marianne" = Hemma ]
then
if [ ! -f /jffs/scripts/CheckUser/Hemma_Marianne ]
then
touch /jffs/scripts/CheckUser/Hemma_Marianne
wget -qO- "http://admin:xxxxxx@yyy.yyy.yyy.yyy/api/callAction?deviceID=zz&name=pressButton&arg1=qqq" >/dev/null 2>&1
fi
else
if [ -f /jffs/scripts/CheckUser/Hemma_Marianne ]
then
rm -f /jffs/scripts/CheckUser/Hemma_Marianne
wget -qO- "http://admin:xxxxxx@yyy.yyy.yyy.yyy/api/callAction?deviceID=zz&name=pressButton&arg1=qqq" >/dev/null 2>&1
fi
fi
Sedan vill vi att detta script körs varje minute för att kolla om något skett, det gör vi genom att lägga till en rad i filen services-start (om den redan finns, annars får vi skapa den):
Code: Select all
#!/bin/sh
cru a CheckIfHome "* * * * * /jffs/scripts/CheckIfHome"
När detta är gjort, så måste vi också skapa en mapp där statusfilen mellanlagras mellan varje körning: mkdir /jffs/scripts/CheckUser - Om du byter plats för denna mapp, så måste du ändra i scriptet (antar att jag borde lagt det i en variabel istf hårdkodat - men så var inte detta script tänkt att läggas ut här på forumet utan knackat för mig själv....). I princip så bör man vara försiktig med att skriva mycket till det interna flash minnet, vilket vi gör i ovanstående script - så om du har ett USB minne så rekommenderar jag skarpt att du flyttar ovanstående mapp till USB minnet - om du är lat kan du alltid göra en soft link (ln -s) från ovanstående plats direkt till ditt USB minne, så slipper du knacka om scriptet...
Med scriptet, cur kommandot i services-start och mappen skapad så har du allt som krävs för att du skall få din Asus router att fungerar som "övervakare" till när mobiler kopplar upp/ned sig.
MEN du behöver också en VD (VIrtual Device) som innehåller de knappar som du försöker få Asus scriptet att trycka på. Jag inkluderar min VD nedan, men du måste antagligen gå in och ändra på namn med mera. Du behöver också skapa ett antal globala variabler:
- Hemma_Lars
- Hemma_Marianne
Och global predefined variable:
- Hemma med värdena "Hemma" respektive "Borta"
I grund och botten blir det lite "meckande" för att få ihop allt, men det fungerar bra, och jag gillar min lösning - även om den inte är så ren och snygg som jag skulle önska. Begränsningarna med vad man kan göra i HC2 stoppar den variant av lösning jag helst skulle vilja åstadkomma.