script lua presence personne

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: script lua presence personne

Message par fratton »

Le problème du ping, c'est qu'il faut une IP fixe.

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
Dernière modification par fratton le 06 oct. 2016, 10:02, modifié 2 fois.
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
Xynka
Messages : 3
Inscription : 04 oct. 2016, 12:24

Re: script lua presence personne

Message par Xynka »

Salut.

Super ton script ! Je vais essayer de le mettre en place ;)

Le top, c'est le timer aussi. Dans mon script, ça change beaucoup trop.

Merci à toi !
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: script lua presence personne

Message par Neutrino »

Merci pour le script !
Je connaissais pas arp-scan, mais ça utilise des requêtes ping, et le S7 de madame ne répond pas toujours au ping.
Du coup, j'utilise arp -a qui lui détecte le smartphone, même s'il ne répond pas au ping.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Répondre