Aller au contenu

jjacques68

Membres confirmés
  • Compteur de contenus

    4 365
  • Inscription

  • Dernière visite

  • Jours gagnés

    39

Tout ce qui a été posté par jjacques68

  1. oui j'ai déjà vu cette fonction, mais je sais pas où m'en servir, et quoi faire du retour de cette fonction...
  2. alors j'ai fait un essai fatiguant mais concluant j'avais une rallonge SMA de 10m, j'ai tirer cette rallonge de la cave pour finir dans le grenier (juste assez de câble ) et là ou j'habite il y a 2 antennes Bouygues piles dans le même axe. Comme tu dis, il faut bien l'orienter. du coup maintenant j'ai une réception 4G à 50 % stable (pointe à 75 %) Je pense pouvoir monter à 75 % stable en enlevant la dernière rallonge SMA de 2 m qui ne ressemble à rien (avec socle magnétique). Je vais prendre la même que celle de 10m mais en 2m.
  3. Bon alors antenne reçu. l'amélioration de la réception est vraiment lite. Pour la mesure, je me fie au voyant sur le modem qui correspond au pourcentage de force de réception dans le webadmin (25%-50%-75%-100%) La je suis à25% des fois 50% en 4G. Si je le sort, je passe à75% stable. Faut que je trouve un meilleur emplacement...
  4. et voilà! c'est pas très beau, mais comme dit @Lazer, visiblement en telnet c'est du brut de décoffrage ! [DEBUG] 07:46:56: NetgearCave - 1F000103 login: [DEBUG] 07:46:56: NetgearCave - admin Password: [DEBUG] 07:46:56: NetgearCave - NetgearCave# [DEBUG] 07:46:56: NetgearCave - configure terminal NetgearCave(config)# [DEBUG] 07:46:56: NetgearCave - radio 2.4 disable NetgearCave(config)# [DEBUG] 07:46:56: NetgearCave - exit NetgearCave# [DEBUG] 07:46:57: NetgearCave - % Activating config... [DEBUG] 07:46:57: NetgearCave - disconnect Telnet [DEBUG] 07:46:57: NetgearRdc - 1F000103 login: [DEBUG] 07:46:58: NetgearRdc - admin Password: [DEBUG] 07:46:58: NetgearRdc - NetgearRdc# [DEBUG] 07:46:58: NetgearRdc - configure terminal NetgearRdc(config)# [DEBUG] 07:46:58: NetgearRdc - radio 2.4 disable NetgearRdc(config)# [DEBUG] 07:46:58: NetgearRdc - exit NetgearRdc# [DEBUG] 07:46:59: NetgearRdc - % Activating config... [DEBUG] 07:46:59: NetgearRdc - disconnect Telnet [DEBUG] 07:46:59: NetgearEtage - 1F000103 login: [DEBUG] 07:46:59: NetgearEtage - admin Password: [DEBUG] 07:46:59: NetgearEtage - NetgearEtage# [DEBUG] 07:47:00: NetgearEtage - configure terminal NetgearEtage(config)# [DEBUG] 07:47:00: NetgearEtage - radio 2.4 disable NetgearEtage(config)# [DEBUG] 07:47:00: NetgearEtage - exit NetgearEtage# [DEBUG] 07:47:01: NetgearEtage - % Activating config... [DEBUG] 07:47:01: NetgearEtage - disconnect Telnet [DEBUG] 07:47:01: OFF OK Mon problème de check semble résolu j'ai simplement augmenté le temps entre la fin du premier script et le lancement du check. Je pense que les AP travaillent encore après la validation...
  5. jjacques68

    Volet Roulant

    il me semble dans la notice de ce module, ils disent de faire 2 aller-retour en utilisant les boutons du modules sur la HC2. mais je sais plus si c'est juste après l'inclusion...
  6. alors !! j'en suis à la version 4 qui est de mieux en mieux je trouve et non toujours pas de classes !! (en fait je sais pas ce que c'est !!!) local deviceIP = { {name = "NetgearCave", ip = "192.168.xxx.xxx"}, {name = "NetgearRdc", ip = "192.168.xxx.yyy"}, {name = "NetgearEtage", ip = "192.168.xxx.zzz"} } local SendCommand = { {name="login", command="admin".."\n", txtmatch="Password:"}, {name="pass", command="xxxxxxx".."\n"}, {name="config", command="configure terminal".."\n", txtmatch="config"}, {name="wifiOff", command="radio 2.4 disable".."\n", txtmatch="disable"}, {name="retourMenu", command="exit".."\n"}, {name="save", command="save-and-activate".."\n", txtmatch="Activating"} } local devicePort = 23 local maxRetry = 5 local delayCommand = 100 function onError(com, device) fibaro:debug("ERROR sur "..device.." avec commande "..com) fibaro:call(fibaro:getGlobal("IdPhoneJJ"), "sendPush" , "Erreur lors de WIFI OFF sur "..device.." avec la commande "..com) end function StandbyLabel(name) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..name..".value", "en cours...") end function Disconnect() for _,device in ipairs(deviceIP) do --boucle sur chaque device StandbyLabel(device.name) -- met les ... sur les label tcpSocket = Net.FTcpSocket(device.ip, devicePort) --ouvre la connexion tcpSocket:setReadTimeout(2000) --set the read timeout local result = "" local retry = 0 --attend le login while string.match(result, "login:") == nil and retry < maxRetry do fibaro:sleep(delayCommand) result = tcpSocket:read() retry=retry+1 end --si on a atteint les 5 essais alors erreur if retry >= maxRetry then onError(com.command, device.name) end fibaro:debug(device.name.." - "..result) --affiche le login for _,com in ipairs(SendCommand) do --boucle sur chaque commande de la table SendCommand local retry = 0 result="" bytes, errorCode = tcpSocket:write(com.command) if errorCode == 0 then --détermine le texte a trouver dans la réponse - C'EST NUL çA !! if com.txtmatch then txt = com.txtmatch else txt = device.name.."#" end --boucle jusqu'à trouver le texte MAX 5 essai while string.match(result, txt) == nil and retry < maxRetry do fibaro:sleep(delayCommand) result = tcpSocket:read() retry=retry+1 end --si on a atteind les 5 essais alors erreur if retry >= maxRetry then onError(com.command, device.name) end fibaro:debug(device.name.." - "..result) --affiche le resultat de la commande passée else --errorCode = 1 - dans quels cas c'est pssible ? onError(com.command, device.name) end end fibaro:debug(device.name.." - disconnect Telnet") --deconnect la session telnet et passe au device suivant tcpSocket:disconnect() tcpSocket=nil end return true --renvoie true si tout est ok (plus vraiment utile) end --MAIN local result = Disconnect() if result == true then fibaro:debug("OFF OK") else fibaro:debug("ERROR") end --effectue un check des device fibaro:sleep(15*1000) fibaro:call(fibaro:getSelfId(), "pressButton", 10) J'ai largement pioché les idées dans des VD sur le forum, désolé je serais plus capable de dire qui à fait quoi, mais en tout cas je vous remercie tous pour l'aide !! Sans doute certains se reconnaitront J'ai pu utiliser les string.match(). J'ai rajouter des sleep() dans les boucles de détections car je les limite à 5 essais et donc elles s'enchainaient trop vite ! A la fin du script, j'utilise l'appel d'un autre script pour vérifier l'état des 3 access point. En fonction de leur état, l’icône du VD change et les notifications push également. Et ça marche pas mal je pense ! le but est que lorsque que je me couche ou que je quitte la maison, j'enclenche l'alarme, et en même temps je coupe le wifi. quand je me réveil ou que je rentre, je coupe l'alarme et le wifi s'allume. Juste un soucis à régler j'ai mis un sleep de 15 secondes à la fin du script pour appeler le check. Mais souvent le check se passe mal. Comme si il ne pouvait pas "encore accéder" aux paramètres des AP - malgré les 15 secondes ou 30 même !! ça me plante le VD, il suffit juste de refaire un check et c'est bon... A méditer...
  7. jjacques68

    Volet Roulant

    pour le calibrage, y a un bouton calibrer dans les paramètres avancés du module.
  8. jjacques68

    Volet Roulant

    peut être faire un recalibrage du module !
  9. euh pour la classe on va y aller doucement au fait, encore merci pour votre aide et patience !! donc voilà la version 3, un code un peu moins crade : local deviceIP = { {name = "NetgearCave", ip = "192.168.xxx.xxx"}, {name = "NetgearRdc", ip = "192.168.xxx.yyy"}, --{name = "NetgearEtage", ip = "192.168.xxx.zzz"} } local devicePort = 23 local SendCommand = { {name="login", command="admin".."\n", txtmatch="Password:"}, {name="pass", command="xxxxxxx".."\n"}, {name="config", command="configure terminal".."\n", txtmatch="config"}, {name="wifiOff", command="radio 2.4 disable".."\n", txtmatch="disable"}, {name="retourMenu", command="exit".."\n"}, {name="save", command="save-and-activate".."\n", txtmatch="Activating"} } function Disconnect() for _,device in ipairs(deviceIP) do --pour chaque device du tableau deviceIP --ouvre la connexion tcpSocket = Net.FTcpSocket(device.ip, devicePort) tcpSocket:setReadTimeout(2000) --affiche le login local result = "" while string.find(result, "login:") == nil do result = tcpSocket:read() end --on lit la réponse jusqu'à avoir le mot clé "login" fibaro:debug(device.name.." - "..result) --envoi des commandes for _,com in ipairs(SendCommand) do --pour chaque commande du tableau SendCommand result="" bytes, errorCode = tcpSocket:write(com.command) if errorCode == 0 then if com.txtmatch then --un peu nul, mais si pas de txtmatch dans le tableau SendCommand, on prend le nom du device txt = com.txtmatch -- prend le mot clé définit dans le tableau SendCommand else txt = device.name.."#" --prend le nom du device pour le prompt car différent d'un device à l'autre (+ le #) end while string.find(result, txt) == nil do result = tcpSocket:read() end --on lit la reponse jusqu'à avoir le mot clé définit dans txtmatch (ou le nom du device) fibaro:debug(device.name.." - "..result) else fibaro:debug("Error dans "..com.name) --en cas d'erreur, mais je vois pas trop laquelle en fait !?? end end --deconnect la session telnet fibaro:debug(device.name.." - disconnect") tcpSocket:disconnect() end end --appel de la fonction pincipale Disconnect() Et voila le debug : [DEBUG] 07:22:50: NetgearCave - login: [DEBUG] 07:22:50: NetgearCave - Password: [DEBUG] 07:22:50: NetgearCave - NetgearCave# [DEBUG] 07:22:50: NetgearCave - onfigure terminal NetgearCave(config)# [DEBUG] 07:22:50: NetgearCave - adio 2.4 disable NetgearCave(config)# [DEBUG] 07:22:50: NetgearCave - xit NetgearCave# [DEBUG] 07:22:51: NetgearCave - % Activating config... [DEBUG] 07:22:51: NetgearCave - disconnect [DEBUG] 07:22:51: NetgearRdc - login: [DEBUG] 07:22:51: NetgearRdc - Password: [DEBUG] 07:22:51: NetgearRdc - NetgearRdc# [DEBUG] 07:22:51: NetgearRdc - onfigure terminal NetgearRdc(config)# [DEBUG] 07:22:51: NetgearRdc - adio 2.4 disable NetgearRdc(config)# [DEBUG] 07:22:51: NetgearRdc - xit NetgearRdc# [DEBUG] 07:22:53: NetgearRdc - % Activating config... [DEBUG] 07:22:53: NetgearRdc - disconnect ça marche très bien, pareil pour activer le wifi. Le code est moins crade... Mais pas encore très satisfait, car en cas d'erreur (ex demande d'activer alors qu'il est déjà activé), le script s'arrête et ne déconnecte donc jamais la session. et puis le debug est par porpre ! ça commence bien (login:, password, prompt) et puis après ça part en cou... et comme vu avec @Lazer, je pense que ma détection du mot clé dans la réponse n'est pas bonne. Mais les fonction string() avec les pattern, c'est une prise de tête moooooonumentale ! ce qui aurait été top aussi, c'est de pouvoir dans le tableau SendCommand pour la valeur "txtmatch", insérer le nom du device comme ci-dessous (pour la commande pass et retourMenu), mais ça marche pas : local deviceIP = { {name = "NetgearCave", ip = "192.168.xxx.xxx"}, {name = "NetgearRdc", ip = "192.168.xxx.xxx"} } local SendCommand = { {name="login", command="admin".."\n", txtmatch="Password:"}, {name="pass", command="xxxxxxx".."\n", txtmatch=deviceIP.name.."#"}, {name="config", command="configure terminal".."\n", txtmatch="config"}, {name="wifiOff", command="radio 2.4 disable".."\n", txtmatch="disable"}, {name="retourMenu", command="exit".."\n", txtmatch=deviceIP.name.."#"}, {name="save", command="save-and-activate".."\n", txtmatch="Activating"} } d'où ce bout de code un peu nul dans la fonction : if com.txtmatch then --un peu nul, mais si pas de txtmatch dans le tableau SendCommand, on prend le nom du device txt = com.txtmatch -- prend le mot clé définit dans le tableau SendCommand else txt = device.name.."#" --prend le nom du device pour le prompt car différent d'un device à l'autre (+ le #) end
  10. oula !! bon ok. alors c'était ça la fonction string.match() ?? parce que j'ai absolument rien trouver de compréhensible sur cette fonction sur les sites qui parlent de lua (quand ils en parlent de cette fonction...) il y a string.gmatch(), j'ai trouvé la string.find() et encore je l'utilise pas correctement...
  11. je continue doucement... par contre je bug depuis un petit moment la-dessus : je viens d'ajouter la commande me permettant d'aller dans le menu config : bytes, errorCode = tcpSocket:write("configure terminal".."\n") --menu configuration if errorCode == 0 then --boucle jsuqu'à l'arrivé du menu config while string.find(result, "config") == nil do result = tcpSocket:read() end fibaro:debug(result) else fibaro:debug("Error dans le menu config") end et voici le debug : [DEBUG] 20:23:01: login: [DEBUG] 20:23:01: Password: [DEBUG] 20:23:02: NetgearRdc# [DEBUG] 20:23:02: onfigure terminal NetgearRdc(config)# c'est pas logique, je devrais avoir que "NetgearRdc(config)# " ?? !! et puis il est passé où le "c" de configue ?
  12. alors j'ai essayer avec string.match() mais aucun resultat ???? J'ai contourné avec un string:find() voilà un bout du code qui m'emmène jusqu'au prompt : --ouvre la connexion tcpSocket = Net.FTcpSocket(deviceIp, devicePort) --set the read timeout tcpSocket:setReadTimeout(2000) local result = "" --affiche le login while string.find(result, "login:") == nil do result = tcpSocket:read() end fibaro:debug(result) --transmet le login bytes, errorCode = tcpSocket:write("admin".."\n") --login if errorCode == 0 then --boucle jusqu'à la demande du mot de pass while string.find(result, "Password:") == nil do result = tcpSocket:read() end fibaro:debug(result) else fibaro:debug("Error dans le login") end --trasmet le mot de pass bytes, errorCode = tcpSocket:write("xxxx".."\n") --pass if errorCode == 0 then --boucle jusqu'à l'arrivé du prompt while string.find(result, "NetgearRdc#") == nil do result = tcpSocket:read() end fibaro:debug(result) else fibaro:debug("Error dans le mdp") end --deconnect la session telnet tcpSocket:disconnect() fibaro:abort() et voilà le debug : [DEBUG] 18:39:44: login: [DEBUG] 18:39:44: Password: [DEBUG] 18:39:44: NetgearRdc# ça semble un peu plus propre sans les sleep() , mais par contre je traite plus le errorCode du coup ! c'est instantané l'enchainement des commandes... Modification faites, j'ai rajouter les errorCode... il faudra aussi que je regroupe dans une fonction les lignes de code, car elles sont répétitives. Et je mettrait les commandes telnet dans une variable tableau, un peu comme le watchdog avec le mot clé à rechercher !
  13. ok bon je m'y remets ce soir je posterai le nouvelle version merci !
  14. string.match() permet de faire une recherche de chaine dans une chaine ? c'est bien ça ? et le prompt c'est le nom du périphérique (en Telnet) suivi de ":", si je me trompe pas ! donc si je comprends bien, - je fais un read() dans une variable, - je fais un string.match(variable, prompt:) - si je trouve, c'est que la commande est terminée - je peux donc passer à la suivante. mais si la commande se passe mal, ou mauvaise valeur saisie, j'ai quand même le prompt qui revient. et les autres commandes ne passeront pas. Il faudrait alors analyser chaque réponse en détail, pas que attendre le prompt ! Et les réponses sont jamais identiques d'une commande à l'autre !
  15. dans la deuxième version j'ai fait des read() et afficher le resultat dans le debug, mais alors du coup ça veut dire que je peux enlever mes sleep() ? peux pas tester pour le moment...
  16. merci, mais je me suis inspirer de quelque tuto bien sur... fermer la connexion TCP me créait une erreur... mais je pense qu'il faut que je mette un sleep avant pour pas fermer trop tôt. c'est pas très clair ces histoires de sleep et de setReadTimeOut. Si j'enchaine trop vite les commandes, j'ai l'impression qu'elles passent pas. doit certainement y avoir une logique, un truc du genre attendre la réponse précédente pour envoyer une nouvelle commande... ??? !!!
  17. OOOHHHHHH PUNAISE !!!! siiiiii !!!!! ça marche !!!!!! (je m’étais trompé dans la commande d'activation/desactivation du wifi ) et j'ai un aperçu dans le debug !! local deviceIp = "192.168.xxx.xxx" local devicePort = 23 --ouvre la connexion tcpSocket = Net.FTcpSocket(deviceIp, devicePort) --set the read timeout tcpSocket:setReadTimeout(2000) bytes, errorCode = tcpSocket:write("admin".."\n") --login fibaro:sleep(1000) if errorCode == 0 then local result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error1") end bytes, errorCode = tcpSocket:write("xxxxxxx".."\n") --pass fibaro:sleep(1000) if errorCode == 0 then result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error2") end bytes, errorCode = tcpSocket:write("configure terminal".."\n") --menu configuration fibaro:sleep(1000) if errorCode == 0 then result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error3") end bytes, errorCode = tcpSocket:write("radio 2.4 disable".."\n") --coupe le wifi fibaro:sleep(1000) if errorCode == 0 then result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error4") end bytes, errorCode = tcpSocket:write("exit".."\n") --retour menu fibaro:sleep(1000) if errorCode == 0 then result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error5") end bytes, errorCode = tcpSocket:write("save-and-activate".."\n") --save modif fibaro:sleep(3000) --doit être plus long ????????? if errorCode == 0 then result = tcpSocket:read() fibaro:debug(result) else fibaro:debug("error6") end --tcpSocket:disconnect() --si je laisse ça marche pas !!! j'ai du mal avec cette ligne : --set the read timeout tcpSocket:setReadTimeout(2000) combien de temps faut-il laisser entre chaque envoi de commande ? merci pour votre aide !
  18. bon je viens de rentrer, et première essai qui bien sur ne marche pas et j'ai aucune erreur retournée... : local deviceIp = "192.168.xxx.xxx" local devicePort = 23 --ouvre la connexion tcpSocket = Net.FTcpSocket(deviceIp, devicePort) --set the read timeout tcpSocket:setReadTimeout(2000) bytes, errorCode = tcpSocket:write("admin".."\n") --login fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok1") else fibaro:debug("error1") end bytes, errorCode = tcpSocket:write("xxxxxx".."\n") --pass fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok2") else fibaro:debug("error2") end bytes, errorCode = tcpSocket:write("configure terminal".."\n") --menu configure fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok3") else fibaro:debug("error3") end bytes, errorCode = tcpSocket:write("radio 2.4 off".."\n") --coupe le wifi fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok4") else fibaro:debug("error4") end bytes, errorCode = tcpSocket:write("exit".."\n") --retour en arrière dans le menu fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok5") else fibaro:debug("error5") end bytes, errorCode = tcpSocket:write("save-and-activate".."\n") --enregistre les modifs fibaro:sleep(1000) if errorCode == 0 then fibaro:debug("ok6") else fibaro:debug("error6") end le debug affiche tous les ok de 1 à 6... bon en même temps ça aurait été trop simple... mais fallait que j'essaye mais j'ai aucun moyen de savoir si la connexion se passe bien et si les commandes sont bien envoyées !! le log de l'access point reste vierge (même si je fait un telnet depuis windows d’ailleurs...)
  19. alors je viens de tester sans le setTimeout : --demande de l'adresse IP function RequestIP() local IP = net.HTTPClient() IP:request("http://bot.whatismyipaddress.com/", { success = function(response) CheckIp(response.data) end, Error = function(err) print("Err : "..err) --setTimeout(RequestIP, 5000) end }) end --analyse l'adresse IP function CheckIp(IP) local i=1 local detail={} --inscrit les 4 parties de l'adresse dans le tableau detail for Num in string.gmatch(IP, "%d+") do detail[i] = Num i=i+1 end --vérifié la 1ère partie : 176 = ADSL et 80 = GSM if tonumber(detail[1]) == 176 then print("ADSL - "..IP) elseif tonumber(detail[1]) == 80 then print("GSM - "..IP) else print("Déconnecté - "..IP) end --bouclage --setTimeout(RequestIP, 5000) end while true do RequestIP() fibaro:sleep(5*60*1000) end Mais rien ne se passe... même pas une première réponse... je devrais avoir au moins ADSL - xxx.xxx.xxx.xxx une fois ! nan ? A moins que j'ai mal placé le while true do ? J'ai remis le setTimeout et c'est redevenu normal. Au moins on est fixé. Bon j'ai contourneé le problème avec le watchdog qui relance la scène si elle plante, mais elle ne devrait pas planter logiquement ! Pour une fois que je traite le cas "error" !!!
  20. Oui c'est comme des menus, j'ai galèré àcomprendre comment ça marchait... Mais je pense avoir de bonnes pistes de départ. Y a cette histoire de réponse qui le derange encore mais je vai voir... Pas ce soir car par chez moi... Je tiens au jus sur l'avancement... Merci tous !
  21. Oui j'ai vu ces tutos, Le soucis est que je ne peux pas l'activer/désactiver en une seule commande. Il faut dans l'ordre que je connais : Se connecter avec Login et pass Entrer dans la "section" configuration Activer/désactiver le wifi Revenir dans la section précédente Exécuter une commande pour enregistrer (save-and-activate) Fermer la session Il faudrait enchaîner ces opérations plus les tiennes... Read et prompt... Que je découvre...
  22. Mais si marche, tout ce que je croyais comprendre s'effondrera
  23. Exactement
  24. J'utilise souvent le setTimeout et j'ai pas d'instance en plus. Par contre Net.httpclient est aussi asynchrone... Mais je vais essayer de faire ce que tu me dis dès que je suis devant le pc, Te tiens au jus... Merci
  25. Ben le while true do est remplacé par le setTimeout ! Je pense qu'il y a un problème de timeout dans la requête. Je ne reçoit pas de réponse àtemps et relance une requête avant que la précédente ne soit terminée. J'ai passé de 5 secondes à5 minutes le setTimeout et depuis pas de problème... Mais je n'arrive pas àrécupérer le code retour, je reçois toujours 200 (ok) alors que en cas de problème de connexion au site je devrais avoir 404 ou 504 !
×
×
  • Créer...