Krikroff Posté(e) le 16 janvier 2014 Signaler Partager Posté(e) le 16 janvier 2014 Il peut arriver lorsqu'un script dépend d'un traitement extérieur comme par exemple l'appel d'un service web qui retourne un json, que le script ne s’exécute pas correctement jusqu'au bout, les raisons peuvent être multiples: timeout, service indisponible etc. C'est pourquoi il peut être utile dans certaines conditions de relancer l’exécution du script jusqu’à obtention du résultat attendu. Voici comment faire: -- Copyright © 2013 Jean-christophe Vermandé local _selfId = fibaro:getSelfId(); -- update Public IP label httpClient = Net.FHttp("checkip.dyndns.com"); -- recursive function to ping device function checkIP(retry) retry = retry or 0; -- call domaine to check response, status, errorCode = httpClient:GET("/"); -- check for error if errorCode == 0 then -- Internet connection is alive :-) fibaro:setGlobal("NetworkStatus", 1); if tonumber(status) == 200 then local ip = response:match("(%d%d?%d?.%d%d?%d?.%d%d?%d?.%d%d?%d?)"); fibaro:call(_selfId, "setProperty", "ui.lblPublicIP.value", ip); else fibaro:call(_selfId, "setProperty", "ui.lblPublicIP.value", "Error!"); end else if retry < 5 then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(1000); return checkIP(tonumber(retry+1)); end -- Internet seems down, check connection... fibaro:setGlobal("NetworkStatus", 0); fibaro:call(_selfId, "setProperty", "ui.PublicIPLabel.value", "Unknown"); -- send mail fibaro:call(2, "sendEmail", "Check Network Status failed !", "Unable to check network status, error code is "..errorCode.. ", response is ["..response.."]"); end end -- execution de la fonction checkIP(); -- clean memory, destroy object httpClient = nil; Ce code interroge le service checkip.dyndns.com pour vérifier l'adresse IP, si le service est en erreur ou bien un problème avec FHttp, alors le script est relancé une nouvelle fois. Si au bout d'un maximum de 5 tentatives il y a toujours une erreur alors un mail est envoyé. La fonction récursive peut être dans d'autres cas: algorithme, calcul etc. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés