Page 1 sur 1

[LUA] Détection presence (ping adresse IP) sous Windows + RFLINK

Publié : 29 janv. 2016, 00:31
par toups
Bonsoir a tous,
je suis newbie en domotique et je me suis lancé avec du RFLINK et Domoticz sous W7 (pour commencer).
L'utilisation de scripts existants pour détecter la presence (de périphérique de type smartphone / box / etc...) par PING ne fonctionnait pas.
Et pour cause, la plupart des scripts LUA récupérés sont pour le monde UNIX/LINUX (Raspery et autre).
Il m'a fallut du temps pour comprendre et je souhaite en faire gagner a ceux qui galèrent avec les scripts LUA sous Zindows... (merci Mathieu)

Voici donc un script qui permet d'activer des switch virtuels, lorsque les pings repondent afin de changer l'etat (ON/OFF) de ceux ci.
Libre a vous de faire des scenarios pour declencher d'autre actions suite au changement d'etat ...
Moi je souhaite juste etre avertis quand un périphérique apparaît ou disparaît de mon reseau (j'ai donc un scenario d'envois de mail qui m'avertis).

Cordialement.

le script:

Code : Tout sélectionner

--Adapté de http://www.geekland-leblog.fr/gestion-des-event-detection-de-presence/
--Initialise la commande de retour finale
commandArray={}
--Mode deboggage (affichage des messages)
debug=true
--Prefixe pour les sorties de log
prefixe="(PING) "
--Tableau des périphériques à "pinguer"
-- Key = adresse ip à pinguer
-- Value = périphérique virtuel à switcher
local ping={}
ping['192.168.100.2']='Droid-Soso'
ping['192.168.100.12']='Prise-WiFi'
ping['192.168.100.16']='Droid-Lili'
ping['192.168.100.17']='Droid-Malo'
ping['192.168.100.254']='FreeBox-inter'
--pour chaque entree du tableau
for ip, switch in pairs(ping) do
  if (debug==true)then
    print("===> "..switch)
  end
  --Le Ping ! : -n 1 = Un seul ping , -w 1000 délai (miliseconde) d'attente de réponse
  ping_success = os.execute("ping -n 1 -w 1500 "..ip)
  --Si le ping a répondu
  if ping_success then
    if (debug==true)then
      print(prefixe.."ping success "..switch)
    end
    --si le switch etait sur Off on l'allume
    if (otherdevices[switch]=='Off') then
      commandArray[switch]='On'
    end
  else
    --Si pas de réponse
    if (debug==true)then
      print(prefixe.."ping fail "..switch)
    end
    --si le switch etait sur On on l'eteind
    if (otherdevices[switch]=='On') then
      commandArray[switch]='Off'
    end
  end
end

Re: Script (LUA) de detection presence (ping adresse IP) sous Windows + RFLINK

Publié : 29 avr. 2016, 01:05
par balajol
Bonsoir (ou Bonjour) Toups,
Merci pour le partage, je n'arrivai pas, également, à faire fonctionner les scripts écrits pour Raspberry ;)
Cordialement
Bertrand

Re: Script (LUA) de detection presence (ping adresse IP) sous Windows + RFLINK

Publié : 02 mai 2016, 23:26
par balajol
Bonsoir,
J'ai essayé d'aller un peu plus loin en combinant le script d'Alexandre DUBOIS pour la détection de 2 Telephones et celui ci dessus.
Cela permettrai de limiter le "ping" toutes les 10 mn après la première détection pour soulager les téléphones ou tablettes.
Pour l'instant je dois avoir commis de grossières erreurs, pas de fonctionnement :oops:
Si quelqu'un a quelques instants à me consacrer, je joint le script pour correction éventuelle.
Merci par avance
Bertrand

--Adapté de http://www.geekland-leblog.fr/gestion-d ... -presence/
--Initialise la commande de retour finale
commandArray={}
--Mode deboggage (affichage des messages)
debug=true
--Prefixe pour les sorties de log
prefixe="(PING) "
--Tableau des périphériques à "pinguer"
-- Key = adresse ip à pinguer
-- Value = périphérique virtuel à switcher
local ping={}
ping['192.168.0.XX']='Tel_XXXX_Connecte_WIFI'
ping['192.168.0.XX']='TEl_XXX_Connecte_WIFI'
ping['192.168.0.XX']='I-Pad_XXX_Connecte_WIFI'

--Cette fonction calcule la différence de temps (en secondes) entre maintenant
--et la date passée en paramètre.
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

--pour chaque entree du tableau
for ip, switch in pairs(ping) do
if (debug==true)then
print("===> "..switch)
end

--Si le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['switch']=='Off' and timedifference(otherdevices_lastupdate['']) > 600)) then
--Le Ping ! : -n 1 = Un seul ping , -w 1000 délai (miliseconde) d'attente de réponse

ping_success = os.execute("ping -n 1 -w 1500 "..ip)
--Si le ping a répondu
if ping_success then
if (debug==true)then
print(prefixe.."ping success "..switch)
end
--si le switch etait sur Off on l'allume
if (otherdevices[switch]=='Off') then
commandArray[switch]='On'
end
else
--Si pas de réponse
if (debug==true)then
print(prefixe.."ping fail "..switch)
end
--si le switch etait sur On on l'eteind
if (otherdevices[switch]=='On') then
commandArray[switch]='Off'
end
end
end

Re: Script (LUA) de detection presence (ping adresse IP) sous Windows + RFLINK

Publié : 06 sept. 2017, 13:34
par Oui_OuiBlog
Pour info si vous avez une box disposant d'une API (Bbox par exemple) vous pouvez interroger directement la box pour connaitre les appareils connectés (Ca évite le ping qui consomme la batterie des téléphones et c'est en temps réel)