Sinon, on peut utiliser l'ARP (c'est à dire l'adresse MAC de la carte wifi du téléphone) qui elle ne change pas.
Script de type "time" et il faut un interrupteur virtuel pour chaque téléphone
Code : Tout sélectionner
-- Test la présence d'un smartphone par son adress MAC
local smartphones={}
smartphones['PAUL']='1c:de:d3:4a:80:4b'
smartphones['JEAN']='ab:fa:fe:37:8b:11'
smartphones['JOHN']='0a:00:c0:ee:0b:fc'
-- Calcul la difference en secondes avec l'heure actuelle
function timedifference(s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
commandArray = {}
-- On scan le réseau et on stock dans un fichier temporaire
os.execute("sudo arp-scan --localnet > /tmp/scan-arp.txt")
for key, valeur in pairs(smartphones) do
-- on regarde si l'adresse MAC est dans le fichier temporaire
local mac_success=os.execute("sudo grep -e "..valeur.." /tmp/scan-arp.txt")
if mac_success then
-- On détecte immédiatement ou on rafraîchit la valeur toutes les 5 minutes
if ( otherdevices[key] ~= 'On' or timedifference(otherdevices_lastupdate[key]) > 300 ) then
print("MAC Address : "..key.." ("..valeur..") IN LAN")
commandArray[key] = 'On'
end
else
-- Si cela fait plus de 10 mn que l'on n'a pas detecté le smartphone on passe à Off les interrupteurs virtuels
if ( (otherdevices[key] ~= 'Off' and timedifference(otherdevices_lastupdate[key]) > 600) or timedifference(otherdevices_lastupdate[key]) > 1800 ) then
print("MAC Address : "..key.." ("..valeur..") NOT IN LAN")
commandArray[key] = 'Off'
end
end
end