Aller au contenu

Ping d'un équipement réseau


Krikroff

Messages recommandés

@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 ;)

Lien vers le commentaire
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 ? 

Lien vers le commentaire
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! 

Lien vers le commentaire
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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

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 :)

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

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)

Lien vers le commentaire
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".

Lien vers le commentaire
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.

Lien vers le commentaire
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 ?

Lien vers le commentaire
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.

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...
  • 1 mois après...
  • 7 mois après...

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...

Lien vers le commentaire
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 !!

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...