Page 1 sur 1

Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 01 oct. 2015, 14:20
par Nibeck
Bonjour à tous,

J’espère poser ma question dans la bonne section.
Je découvre Domoticz, j'en suis au tout début de l'expérimentation.
Configuration :
Raspberry Pi B
Connecter au reseau en Ethernet
Pas encore de RFXCON (bientot)

Comme beaucoup d'entre vous je souhaite utiliser un script de présence virtuel pour détecter si moi, mon épouse ou mes enfants sont à la maison ou absent.

J'ai trouver le script ci dessous qui me paraissait convenir.

Code : Tout sélectionner

--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.1.56']='Tel aurelien'
ping['192.168.1.20']='NAS'
ping['192.168.1.39']='Tel chaton'
--pour chaque entree du tableau
for ip, switch in pairs(ping) do
 --Le Ping ! : -c1 = Un seul ping , -w1 délai d'une seconde d'attente de réponse
 ping_success=os.execute('ping -c1 -w1 '..ip)
 --Si le ping à 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
Mais malheureusement pour une raison indeterminer, cela ne fonctionne pas avec mon tel samsung, il ne repond pas au ping et refuse meme que je ping mon raspberry.

donc après diverse recherche, j'ai trouver celui ci en bash.

Code : Tout sélectionner

loop=1
sleep=10
switch=40

while [ "$loop" -eq "1" ]
do

echo ""
echo ""
echo ""
echo ""
echo Phone on = 0, Phone off = 1
nmap -sn 10.24.1.10 | grep -q latency
phone1=$?
echo Phone Name1 = $phone1
nmap -sn 10.24.1.11 | grep -q latency
phone2=$?
echo Phone Name2 = $phone2
total=$(($phone1 + $phone2))
echo Phones Total command = $total

if [ "$total" -gt "1" ];
 then
  echo Detected 0 phones, Checking status switch $switch;
  curl -s "http://127.0.0.1:8080/json.htm?type=devices&rid="$switch"" | grep '"Status" : "Off",'
  switchon=$?
   if [ "$switchon" -eq "0" ];
    then
     echo Switch $switch is already OFF, skipping sending command to Domoticz;
    else
     echo Switch $switch was ON, turning switch OFF; curl "http://127.0.0.1:8080/json.htm?type=command&param=switchlight&idx="$switch"&switchcmd=Off";
   fi
 else
  echo Detected 1 or more phones, Checking status switch $switch;
  curl -s "http://127.0.0.1:8080/json.htm?type=devices&rid="$switch"" | grep '"Status" : "On",'
  switchon=$?
   if [ "$switchon" -eq "0" ];
    then
     echo Switch $switch is already ON, skipping sending command to Domoticz;
    else
     echo Switch $switch was OFF, turning switch ON; curl "http://127.0.0.1:8080/json.htm?type=command&param=switchlight&idx="$switch"&switchcmd=On";
   fi
fi
echo ""
echo ""
echo ""
echo ""
echo Execution done, sleeping for $sleep seconds
sleep $sleep
done
Ce qui m'interresse dans ce script c'est la méthode utiliser avec la commande nmap -sn
Je voudrais l'adapter au premier script car j'utilise :
- 1 interrupteur virtuel maitre qui ce nomme Presence_Maison
- 1 interrupteur virtuel esclave qui ce nomme papa_Telephone
- 1 interrupteur virtuel esclave qui ce nomme fille1_Telephone
- 1 interrupteur virtuel esclave qui ce nomme fille2_Telephone

et donc dés qu'un des esclave passe a ON, le maitre passe à ON mais il faut que tout les esclave soient à OFF pour que le maitre passe à OFF

J'ai essayer de modifier le script, mais rien de concluant, et ne maitrisant pas du tout le code LUA.........

Si une âme charitables passe par là et pouvez me donner un coup de pouce, je l'en remercierais grandement

Amicalement à tous

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 01 oct. 2015, 14:32
par loops
Salut.

Je ne saurai pas répondre directement à ta question mais j'ai mis en place chez moi quelque chose d'approchant je pense.
Pour cela j'ai utilisé le matériel nommé "System Alive Checker (Ping)" qui te créé des dispositifs pour chacune des adresses ip que tu veux vérifier.
Ensuite j'ai "programmé" avec un petit blocky le passage à ON ou à OFF d'un interrupteur virtuel nommé "Intrusion" pour me signaler par notifications l'ouverture d'un ouvrant en cas d'absence.
Il est facilement possible de la même façon de changer l'état d'un Switch virtuel pour signaler la présence d'une personne de la famille à la maison !

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 01 oct. 2015, 14:38
par Nibeck
Bonjour,

Merci d'avoir répondu, je vais essayer ta solution ce soir, mais je ne pense pas que cela fonctionne.
Si le matériel nommé "System Alive Checker (Ping)" utilise la commande ping cela ne pourra pas fonctionner, j'ai deux terminaux qui ne repondent pas au ping.
Mais avec la commande nmpa -sn @IP, il y a bien une remonter d'information comme quoi le terminal est up et connecter

Amicalement

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 01 oct. 2015, 14:40
par loops
Oui en effet, si ces terminaux ne répondent pas au ping, ce système ne fonctionnera pas ! :/

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 02 nov. 2015, 18:09
par Nibeck
Bonjour,

je me répond à moi-même.
J'ai enfin trouver la solution par une bidouille.

Donc je post quand même le code LUA si jamais cela en intéresserais certains

J'ai ajouter une variable test pour faire un grep sur le resultat de la commande nmap et ainsi avoir juste la ligne Host is up (en cas de succé) et la commande ne retourne rien en cas de non connexion, d'ou resultat fail.

Code : Tout sélectionner

--Initialise la commande de retour finale
commandArray={}


--Mode deboggage (affichage des messages)
debug=true
--Prefixe pour les sorties de log
prefixe="(NMAP) "

test="|grep \'Host is up\'"

--Tableau des périphériques à "pinguer"
-- Key = adresse ip à pinguer
-- Value = périphérique virtuel à switcher
local nmap={}
nmap['1.1.1.1']='dipositif_virtuel1'
nmap['1.1.1.2']='dipositif_virtuel2'
nmap['1.1.1.3']='dipositif_virtuel3'
nmap['1.1.1.4']='dipositif_virtuel4'
nmap['1.1.1.5']='dipositif_virtuel5'

--pour chaque entree du tableau
for ip, switch in pairs(nmap) do

 nmap_success=os.execute('nmap -sn '..ip ..test)

 --Si la commande nmap à répondu
 if nmap_success then
   if(debug==true)then
    print(prefixe.."nmap 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.."nmap fail "..switch)
   end
   --si le switch etait sur oN on l'eteind
   if(otherdevices[switch]=='On') then
      commandArray[switch]='Off'
   end
 end


end
Bon courage à tous

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 06 juil. 2016, 18:49
par Sopalin
Merci pour ce bout de code LUA qui m'aide grandement.
Je tourne sur domoticz sur Windows.

La commande nmap retour une nil value dans nmap _success, une idée ? :

Code : Tout sélectionner

--Initialise la commande de retour finale
commandArray={}


--Mode deboggage (affichage des messages)
debug=true
--Prefixe pour les sorties de log
prefixe="(NMAP) "

test="|find \'Host is up\'"

--Tableau des périphériques à "pinguer"
-- Key = adresse ip à pinguer
-- Value = périphérique virtuel à switcher
local nmap_success
local nmap={}
nmap['127.0.0.1']='Presence Thomas'
--nmap['1.1.1.2']='dipositif_virtuel2'
--nmap['1.1.1.3']='dipositif_virtuel3'
--nmap['1.1.1.4']='dipositif_virtuel4'
--nmap['1.1.1.5']='dipositif_virtuel5'

--pour chaque entree du tableau
for ip, switch in pairs(nmap) do

 --nmap_success=os.execute('nmap --system-dns -sn '..ip ..test)
 nmap_success=os.execute('nmap --system-dns -sn 127.0.0.1 | find "Host is up" >nul 2>&1')
 
 --nmap_success=os.execute('ping 127.0.0.1 -n 1 -w 100>nul')
 --print(prefixe..nmap_success..switch)

 --Si la commande nmap à répondu
 if nmap_success then
   if(debug==true)then
    print(prefixe.."nmap 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.."nmap fail "..switch)
   end
   --si le switch etait sur oN on l'eteind
   if(otherdevices[switch]=='On') then
      commandArray[switch]='Off'
   end
 end


end

Re: Demande d'aide : Presence Virtuel Script LUA avec la commande nmap

Publié : 08 juil. 2016, 11:36
par Sopalin
J'ai réussi à contourner le problème en redirigeant la sorti vers un fichier texte que j'analyse ensuite.
Cependant nmap me retourne host is down de temps en temps. La détection doit déconner avec les iPhone