tonio50 Posté(e) le 17 janvier 2014 Signaler Posté(e) le 17 janvier 2014 C'est vrai que sur la Vera c'était bien pratique avec la fonction os.execute et les possibilités étaient importantes au niveau des plugins. Maintenant point de vue sécurité, je sais pas trop si ouvrir le protocole ICMP est dangeureux ???
jimbo007be Posté(e) le 17 janvier 2014 Signaler Posté(e) le 17 janvier 2014 certainement pas plus que tcp/udp mais bon, c'est pas vraiment ànous de décider donc ... faut bien faire avec
Krikroff Posté(e) le 17 janvier 2014 Auteur Signaler Posté(e) le 17 janvier 2014 Ici l'idée est d'obtenir la réponse d'une IP sur un port, nous sommes toujours sur note réseau local, c'est tout l’intérêt de ce script sur le HC2... Je pense que tout le monde à un firewall correctement paramétré au niveau de son routeur alors pas vraiment de soucis . Toutes les librairies sont présentes sur le HC2 n'oublions pas qu'a la base c'est un serveur , mais Fibaro suite à de gros problèmes avec des scripts d'utilisateurs à décidé d'exposer uniquement quelques méthodes avec une surcouche logiciel Fibaro , moi ça me saoul mais en même temps j'imagine le support Fibaro avec des gens qui pètent un câble pour une box HS par un script et faire comprendre les choses alors que l'utilisateur ne fait pas la différence entre un "string" et un "number".... je peux comprendre @tonio50: super heureux que cela marche pour toi maintenant, cool
jimbo007be Posté(e) le 17 janvier 2014 Signaler Posté(e) le 17 janvier 2014 krikroff : moi perso j'ai un vrai firewall derrière ma box internet mais bon pour Fibaro, je crois en effet qu'ils ont déjà vraiment assez de boulot en retard (ne fut-ce que pour délivrer une doc un peu correcte) sans rajouter des demandes en provenance d'utilisateurs qui auraient fait une fausse manip
biboun Posté(e) le 17 janvier 2014 Signaler Posté(e) le 17 janvier 2014 Je suis d'accord avec tous, ils ont assez de retard pour ne pas leur remettre des problèmes que l'on sait contourner, après d'un point de vue purement technique faire une requête à un service pour s'assurer qu'une machine est up, c'est un peu overkill ( le service peut -être planté sans que la machine ne soit down), et ça semble assez commun comme usage que de vouloir pinger des choses pour s'assurer que tout est en vie, dans un système domotique. /mode "chieur" off "chieur" est un string
Krikroff Posté(e) le 17 janvier 2014 Auteur Signaler Posté(e) le 17 janvier 2014 @biboun, je complétement en accord avec toi ... L'idée était que les utilisateurs rechercheraient plus naturellement "Ping" que "tester un service" . PS: Je ne faisais pas d'allusions à des personnes du forum, mais tu as raison "chieur" est bien un string
razowski Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 Ce bout de code LUA permet de faire un Ping sur un équipement de votre réseau. Première publication sur le Forum Fibaro ici http://forum.fibaro.com/viewtopic.php?t=1927 Les variables sont les suivantes: deviceIp : Adresse IP du périphérique réseau à contacter. devicePort : Port maxRetryProcess : Nombre de tentatives pour contacter le périphérique. --[[ %% properties %% globals --]] -- Ping v 1.0.1 [05-2013] -- Copyright © 2013 Jean-christophe Vermandé fibaro:log("Start process"); local _deviceIp = "192.168.1.250"; local _devicePort = 80; local _maxRetryProcess = 5; -- recursive function to ping device local function _ping(retry) retry = retry or 0; --open the socket local tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort); --set the read timeout tcpSocket:setReadTimeout(250); --notify user fibaro:log("Search on the local network, try #" .. retry .. " please wait..."); fibaro:sleep(250); --send packet local bytes, errorCode = tcpSocket:write("test"); --check for error if errorCode == 0 then return true; else if retry < _maxRetryProcess then fibaro:log("Retry process, please wait..."); fibaro:sleep(1000); return _ping(retry + 1); end return false; end end --ping device, secure with pcall to catch errors. local f, result = pcall(_ping); if (f) then if (result == true) then fibaro:log("Device has been found, is awake and listening."); else fibaro:log("Device was not found!"); end else fibaro:log("Error: " .. f); end Notez l'utilisation de la fonction LUA pcall qui permet l’exécution du code en mode "protégé" ou "encapsulé", c'est à dire qu' il ne lèvera pas d' erreur dans le processus de votre box si jamais le code provoquait une erreur. La box est protégée, vos scènes aussi . Tout d'abord, merci pour le script. J'ai fouillé les forums mais je ne trouve pas réponse à ma question : pourquoi un "_maxRetryProcess" ? Je souhaiterais que le ping tourne en boucle non-stop de tel sorte que sur changement d'état, je puisse actionner un scénario. Pour le moment, j'ai créé un device virtuel et utilisé ton code dans le main loop, l'idée étant de ne pas devoir cliquer sur un bouton pour lancer le ping. Mon main loop fonctionne. Mon routeur est allumé et ping. Je le reboot et mon device virtuel change de status, l'icône de mon device également. Par-contre, dès que le routeur a terminé son reboot et est à nouveau en ligne, le device virtuel ne se remet pas à jour. J'ai vu sur un de tes posts sur un autre forum qu'il semblait nécessaire de lancer un "FTcpSocket:disconnect();". Serais-tu en mesure d'apporter ton aide ?
Krikroff Posté(e) le 27 janvier 2014 Auteur Signaler Posté(e) le 27 janvier 2014 - Le maxRetryProcess est la pour limiter le nombre de tentatives. - Pour utiliser ce code en boucle il suffit comme vous l'avez fait: le mettre dans le main loop d'un périphérique virtuel avec un fibaro:sleep(xxx); en fin de code pour fixer le refresh ex: fibaro:sleep(120000); -> toutes les 2 minutes, c'est très important. - Si ce code est utilisé dans un mainloop, oui je voius conseil d'ajouter un tcpSocket:disconnect(); juste après la ligne suivante: local bytes, errorCode = tcpSocket:write("test");
razowski Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 1) Mais si c'est un ping, pourquoi un maxRetryProcess? Je conçois que le process pourrait tourner indéfiniment, mais en même temps dans ce cas c'est pas ce qu'on cherche ? 2) Pourriez-vous être plus précis sur l'emplacement où introduire le figaro:sleep(xx) ?
Krikroff Posté(e) le 27 janvier 2014 Auteur Signaler Posté(e) le 27 janvier 2014 Parce-que ce n'est pas du vrai Ping mais une interrogation d'un service sur une IP / Port. De plus il n'est pas utile d'occuper du proc + mémoire (socket) pour cela... Pour le sleep, c'est sur la dernière ligne du mainloop !
razowski Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 Nickel, merci pour les précisions.
biboun Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 A ce sujet Krikoff, ( le sleep dans la mainloop), le hc2 est-il malin ? Je voyais la main loop comme un cron qui troune toutes les 3 sec, du coup le principe du sleep n'aurait fait que lancer dans la nature un nouveau process tous les 3 secondes, chaque process se mettant en sleep, puis continuant sa vie, et donc a terme une finité de process lancés.. Mais ça semble marcher pourtant ?
Krikroff Posté(e) le 27 janvier 2014 Auteur Signaler Posté(e) le 27 janvier 2014 Oui c'est normal, je suis persuadé que le MainLoop est juste un while true do ...
biboun Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 mais si c'est un while true do, cela veut dire que ton sleep bloque totalement la boucle non ? Il y a une boucle dédiée par VD au final ? (pas très MAIN dans ce cas ) Dans ce cas ils ont juste fait while true do avec déjà un sleep à 3 secondes dedans ?
Krikroff Posté(e) le 27 janvier 2014 Auteur Signaler Posté(e) le 27 janvier 2014 Oui je suis d'accord avec toi, d'ailleurs certains problèmes sur la stabilité pourraient provenir de cette conception un peu cheap ! Oui le sleep bloque totalement la boucle c'est bien ça et puis le sleep c'est aussi un while t >= 3000ms do si tu veux mon avis. Bref, des boucles dans des boucles Outch le sac de nœuds :-( Mais en même temps ça marche alors !
biboun Posté(e) le 27 janvier 2014 Signaler Posté(e) le 27 janvier 2014 Rassure moi il ne bloque que la boucle du VD en question hein ?
Krikroff Posté(e) le 27 janvier 2014 Auteur Signaler Posté(e) le 27 janvier 2014 Oui pas d'inquiétude il bloque uniquement la boucle du VD ! Il ne bloque pas les boutons du VD non plus.... Heureusement :-)
xtrem57 Posté(e) le 10 août 2014 Signaler Posté(e) le 10 août 2014 Hello ! Une idée pour faire un "ping" sur un smartphone Android ? Je n'ai pas trouver de port ouvert...
Krikroff Posté(e) le 10 août 2014 Auteur Signaler Posté(e) le 10 août 2014 Il semble que l'application Sonos ouvre le port 3500. Peut être une piste
xtrem57 Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Effectivement, cela fonctionne avec le port 3500 ! J’espère que Sonos n'a pas prévu de modifier ça. Merci Krikroff !
Krikroff Posté(e) le 13 août 2014 Auteur Signaler Posté(e) le 13 août 2014 De rien Espérons oui que sonos ne change rien mais bon y'a pas de raisons...
Sebbrunie1 Posté(e) le 8 octobre 2014 Signaler Posté(e) le 8 octobre 2014 Bonsoir, quelqu'un a une idée du port pour un mac sur la freebox? Merci Sébastien
Krikroff Posté(e) le 9 octobre 2014 Auteur Signaler Posté(e) le 9 octobre 2014 Tu cherche un port ouvert sur un mac ? La freebox n'intervient pas a ce niveau en local ... Envoyé de mon iPhone àl'aide de Tapatalk
Sebbrunie1 Posté(e) le 10 octobre 2014 Signaler Posté(e) le 10 octobre 2014 J'ai mis 139, et tout marche merci beaucoup
gorn Posté(e) le 15 novembre 2014 Signaler Posté(e) le 15 novembre 2014 Merci Krikroff encore pour ce tuto. J'ai cependant quelques questions. J'ai mis ton code dans un module virtuel avec les modifs que tu avais cité ci dessus. Je chercher a savoir si mon téléphone est connecté au réseau. Jusque là , je pense que je suis bon... J'ai donc ouvert mon panneau d'admin de la freebox (V6) et j'ai trouvé l'adresse IP de mon téléphone. J'ai donc renseigné l'@IP de mon téléphone dans ton script mais je ne pense pas que cela soit passé. Voici donc mes questions : - où puis je trouver le port utilisé par mon téléphone (windows phone) - comment puis-je être certain que mon tel a été trouvé (a part le log). Désolé pour ces questions de newbie...
Messages recommandés