@Berale24, json.encode / json.decode fonctionne très bien en V3.600
Le problème est que json.decode ne peut decoder un nil (valeur null) et il faut toujours et dans tous les cas faire une gestion des erreurs sur le code de retour, statut de la requête, type et valeur de la réponse...
Voici le code modifié
local function ipPublic()
local ip, clientHttp = nil, Net.FHttp("www.realip.info", 80);
local response, status, errorCode = clientHttp:GET("/api/p/realip.php");
-- check error
if errorCode == 0 then
-- check status and response value before...
if ((tonumber(status) == 200) and (response ~= nil)) then
response = json.decode(response);
ip = response.IP;
else
fibaro:debug("Error!");
end
else
fibaro:debug("Unable to check network status, error code is "..errorCode..
", response is ["..response.."]")
end
-- destroy object
clientHttp = nil
return ip;
end
fibaro:debug(ipPublic());
Il est possible d'aller encore plus loin dans la gestion des erreurs: validation de l' IP avant le retour de la fonction, exécution de la fonction dans un pcall afin d' isoler le code et prévenir tout plantage du HC2 etc.