Aller au contenu
Krikroff

Ping d'un équipement réseau

Recommended Posts

@gorn, peut-être des infos ici http://www.domotique-fibaro.fr/index.php/topic/2613-detection-de-pr%C3%A9sence/ sinon la tout de suite je n'ai pas d'idée pour windows phone ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Krikroff,

 

L'identification par adresse MAC c'est mieux,car c'est la seule constante sur un équipement réseau.

En affichant la table ARP tu peux récupérer la liste des devices connectés et voir si ton device est dansa la liste. tu peux également récupérer l'adresse IP du device à  travers son adresse MAC.

 

J'ai vu un script intéressant ICI mais je ne sais pas si c'est implémentable sur notre chère box ?

 

Un avis ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je sais bien tout cela, c'est bien pour cela que j'utilise mon device freebox serveur pour ça ;) . Malheureusement le lua du HC2 est limité (même en V4) :( , encore la semaine dernière j'ai essayé de coder une lib  avec les moyens du bord pour avoir le SNMP et bien c'est cuit ... Peut-être en V4 stable si plus d'ouverture ou implémentation par Fibaro! 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, je vois que tu as tout tenté.

Ils sont quand même un peu "parano" chez fibaro, alors que tu peux générer une attaque D.O.S simplement avec une MainLoop et une requête qui va bien...les limitations imposés ne sont clairement pas pour des raisons de sécurité. Ou alors j'ai rien compris !

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Le code fonctionne bien  , un grand merci Krikroff

J'ai quant meme une question :  Pourquoi bytes derrière la variable local ?

 

local bytes,errorCode = tcpSocket:write("test");

 

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

En l’occurrence la variable bytes n' est pas utilisée ici mais par habitude puisque tcpSocket:write retourne la réponse "bytes" et aussi un code d'erreur :)

Partager ce message


Lien à poster
Partager sur d’autres sites

 Comme je n'avais compris son utilité je l'avais suprimé -_-  mais le code dans ce cas ne fonctionne pas  :D

 

Merci krikroff

Partager ce message


Lien à poster
Partager sur d’autres sites

Juste pour ma culture personnelle ou peut on trouver la doc ou explication de cette"fonction"

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

Je me permet juste 2 petites remarques concernant ce script :

 

     1) Il y a une erreur ligne 51

fibaro:log("Error: " .. f);

Ce n'est pas dans f que le message de l'erreur est contenu mais plutôt dans result.

En plus f est un booléen donc cela générera une erreur d'interprétation LUA.

 

Donc à  corriger avec 

fibaro:log("Error: " .. result); 

     2) J'ai remarque en faisant des tests que le "setReadTimeout" ne servait pas à  grand chose car si le host de destination est inaccessible, c'est la ligne au dessus, celle de connection TCP qui va bloquer. Je n'ai pas trouvé d'information là  dessus mais existe-t-il un genre "connectTimeout" sur cet objet ?

Sinon il serait intéressant de trouver une méthode qui permet de faire un "vrai" ping (packet ICMP)

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bien vu ;) pour l'erreur d’interprétation LUA avec le booléen. Je précise que j'utilise la possibilité offerte par pcall pour retourner un résultat true|false pour valider ou pas le "pseudo" ping :).

 

Pour un vrai ping ce n'est pas possible pour le moment car toutes les librairies exposées par Fibaro sont "bridées".

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est vraiment dommage de ne pas pouvoir effectuer un vrai Ping car en ce qui me concerne, j'utilise ce code pour détecter l'état de ma TV Samsung (dont le réseau est DOWN si en veille...)

Le souci c'est que lorsque je l'éteint, l'ouverture de la socket peut prendre jusqu'à30 secondes avant de rendre la main.

Sinon, il n'existe pas un moyen de fixer un temps d'exécution àune fonction ? Avec un appel non bloquant par exemple ?

Cela permettrait de pouvoir définir une durée max àl'ouverture de la socket et dans on cas limiter le délai d'attente.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai une bonne et une mauvaise nouvelle :rolleyes:

 

Sinon, il n'existe pas un moyen de fixer un temps d'exécution à  une fonction ? Avec un appel non bloquant par exemple ?

 

La bonne: c'est simple à  faire avec la méthode setTimeout ;)

 

La mauvaise: ce n'est possible que dans une scène (en V4) sur le nouveau moteur, de plus pas de TCPSocket possible dans les scènes, pas simple !

 

sinon peut-être qu'en testant plusieurs fois de suite tu peux déterminer l'état ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Krikroff, je ne connaissais pas encore setTimeoout  :)

On en revient toujours au même dès qu'on veut essayer de faire un truc simple, ça devient très vite compliqué avec toutes ces limitations absurdes car effectivement je suis dans une Mainloop...

 

Tester plusieurs fois de suite, c'est bien ce que je fais mais lorsque la TV s'éteint, la première tentative génère un timeout de 30s... d'où l'idée d'un connectTimeout.

Je pense que ce Timeout est du au fait que la TV est en train de couper son interface réseau...

 

Sinon je crois que je vais coder un script sur RPI qui se charge du ping et qui met à  jour un une variable Globale mais ça m'ennui de devoir déporter un truc aussi simple.

Partager ce message


Lien à poster
Partager sur d’autres sites

@krikroff,

Je travaille avec mprinfo sur un VD "Synology monitoring" et nous aimerions bien réutiliser ton code "ping".

ok pour toi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Krikoff,

 

Je voulais me servir de ta scène pour mes équipement réseau, seulement voila, j'ai l'erreur suivante :

 

Peux-tu m'aider ... ??

Partager ce message


Lien à poster
Partager sur d’autres sites

@Rem's,

Tu peux également utiliser mon Synology Monitoring pour surveiller d'autres équipements réseau. Pour le ping, il est inspiré du code de Krikroff

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous,

 

J'ai mis ce bout de code dans le main loop d'un device virtuel, mais visiblement, ça ne fonctionne pas.

 

Le but est de tester la présence de mon iPhone ou pas.

si l'iphone est en veille, il n'est pas censé me trouver.

si il est actif, il est censé me trouver.

tcpSocket = Net.FTcpSocket("192.168.2.31", 3500)
bytes, errorCode = tcpSocket:write("test")
 
if errorCode == 0
then
fibaro:setGlobal("PresenceJJ", "oui");
fibaro:debug("present");
else
fibaro:setGlobal("PresenceJJ", "non");
fibaro:debug("absent");
end

Quand j'utilise la fenêtre de debug du module, quand l'iphone est en veille, il ne fait absolument rien (alors qu'il devrait afficher absent),

et quand l'iphone est actif, là  il me marque absent !!!

 

j'ai raté qqch ?

 

Merci d'avance !!!

 

PS :

 

si je met le port 62078, il m'affiche bien quand il est actif, mais rien si il est en veille...

Partager ce message


Lien à poster
Partager sur d’autres sites

je me réponds à  moi même,

 

en fait ça marche.

 

Simplement le retour négatif du ping met environ 20 secondes à  venir.

Alors que le retour positif met 2-3 secondes.

 

Donc c'est ok.

 

Dommage qu'avec les iPhone il faille envoyer un push pour le sortir de son mode veille pour que le ping réponde...

du coup toutes les 15 minutes je fais un push de test.

 

Mais maintenant la HC peux savoir quand je suis à  la maison ou pas, sans passer par le service de géolocalisation et donc sans vider la batterie à  vu d'Å“il.

 

merci pour vos informations !!

Partager ce message


Lien à poster
Partager sur d’autres sites

×