Aller au contenu

Messages recommandés

Posté(e) (modifié)

Salut à  tous et bonne année 2015. Plein de réussite dans vos projets domotiques  :60:

 

Je viens vous présenter mon VD pour vérifier la connexion internet.

 

J'ai repris le code PING de Jean-christophe Vermandé que j'ai adapté à  mes besoins.

 

Le VD lance des requête ping toutes les 5mins vers des sites internet.

On peut mettre autant de site que l'on souhaite. Mon avis étant un minimum de 2. En effet si le serveur WEB en question est HS, on fait un test sur un autre.

J'ai inclus la remonté de l'adresse public. Pour ce faire j'utilise l'api suivante : http://www.realip.info/api/p/realip.php

 

INSTALLATION : 

- Le VD est téléchargeable ci-dessous.

- Créer une variable global "internet" (valeur 1: ok / valeur 2 : nok) ou avec un autre nom étant donné qu'il est possible de changer facilement le nom dans la déclaration des variables du VD.

La variable servant à  créer des scenes. Par exemple on envoit une notification SMS en cas de panne internet...

- Mettre les icônes. Je vous en propose 2 ci-dessous.

 

Voila j'espère que ça servira à  certains et si vous avez des remarques, je suis preneur!!!

post-538-0-56110400-1420298760_thumb.png

post-538-0-14025900-1420298761_thumb.png

Check_Internet.vfib

Modifié par c-lol
  • Upvote 6
Posté(e)

Merci pour le partage :)

 

Pas encore testé, mais ça me semble une bonne amélioration du script suivant qui existait déjà  sur le forum : [Tuto Multimédia] Test de connexion internet ou d'accès à  un domaine.

 

Je n'avais encore jamais mis en oeuvre de surveillance de ma connexion Internet, mais depuis que j'ai une passerelle SMS opérationnelle, ça me redonne envie de m'y mettre.

Posté(e)

Ah oui effectivement j'aurais pu prendre ce script comme base, ça l'aurait simplifié.

Du coup le fait d'utiliser le ping, on pourrait s'en servir pour ping plusieurs IP sur un réseau local.

J'ai fais ce script dans le but de me faire une passerelle SMS. Je prends le pb à  l'envers!! lol  ;)

Posté(e)

Merci pour le post C-lol.

Je viens de l'amender afin de redémarrer ma BOX internet si le test échoue une deuxième fois 10 min après.

Par contre je ne lance le scenario que toutes les 30 min.

 

Particulièrement utile quand on est loin de chez soi et que la box a planté  (c'est rare mais arrive avec le cable).

 

Reste à  mettre le gateway SMS: très utile si la maison a disjoncté: permet de prévenir quelqu'un pour re-enclencher. (rare aussi mais...)

Posté(e)

 Tu vas dans les paramètres du module (virtuel, physique ou scène), attention les répertoires sont différents et ensuite en cliquant sur changer l'icône puis bouton droit sur l'icône sélectionnée: afficher l'image et tu retrouves dans l'adresse le n° de celle-ci sous cette forme: User1079.png. Bien sà»r, tu ne sauvegardes pas mais reviens sur la maison.

Posté(e)

- Tu peux aussi te servir du Toolkit de kriskroff en chargeant les informations du virtual device (Get Api Raw Data).

- Dans chrome clique droit sur l'icone "inspecter l’élément" dans le code HTML tu peux voir le numéro de l'icone 

<a id="iconShow_1016" class="toDelete iconShow" onclick="if (iconAction == 0 || confirm('Etes vous sà»r de vouloir supprimer cette collection d´icônes?')) changeIcon('1016','virtualDevice', 51, 0); return false;" href="#"><img class="ChooseIcon" src="/fibaro/n_vicons/User1016.png"></a>

ici l'icone est 1016.

  • 2 semaines après...
Posté(e)

c-lol,

Lorsque ma connection internet est ok -> le script fonctionne bien

 

Mais lorsue je débranche le cable internet de mon router (pour simuler internet ko), le script me donne l'erreur suivante :

[DEBUG] 22:56:04: Start process
[DEBUG] 22:56:04: Il y a 2 element(s)
[DEBUG] 22:56:04: Resolving www.google.com , try #0 please wait...
[ERROR] 22:56:04: line 35: Expected value but found invalid token at character 1

Pour rappel, voici le code "autour" de la ligne 35 :

--Fonction What's My Ip
-- utilise le site "http://www.realip.info/api/p/realip.php"
local function ipPublic()
	HC2 = Net.FHttp("www.realip.info", 80);
  	result = HC2:GET("/api/p/realip.php");
    --fibaro:debug(result);
   	decode = json.decode(result);
	ip = decode["IP"];
  	--fibaro:debug(ip);
  	return ip;
end

ligne 35 =    decode = json.decode(result);

 

où est l'erreur ? Il semble qu'il se plante lorsqu'il veut résoudre mon adresse IP externe, alors qu'il n'y a pas de connection internet. Normal que ça ne marche pas,mais pas que ça plante ...

 

P.S.1 : comment vous faite pour introduire du "beau" code ? (je vois qu'à  affichage, c'est ok)

P.S.2 : je suis archi nul en LUA, donc il faudra être très explicite  :2: Merci

Posté(e)

Je suis aussi bon que toi en LUA donc malheureusement je ne pourrais pas t'aider ;) LOL par contre essaye de simuler une panne en enlevant la ligne Xdsl de ta box FAI,  car en enlevant le cable ethernet tu vires la box HC2 du reseau.

 

++

Posté(e)

Je suis aussi bon que toi en LUA donc malheureusement je ne pourrais pas t'aider ;) LOL par contre essaye de simuler une panne en enlevant la ligne Xdsl de ta box FAI,  car en enlevant le cable ethernet tu vires la box HC2 du reseau.

 

++

 

J'avais retiré le cable de mon router vers l'extérieur. Ma box est toujours sur le réseau

Posté(e)

Il me semble que Json.decode ne fonctionne pas en 3,600

 

ça c'est pas cool ! :angry:  :angry:  :angry:

ma première utilisation spécifique de la HC2, et patatra, et même pas en v4.

Quelqu'un d'autre pourrait confirmer ?

Posté(e)

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

 

:)

  • Upvote 1
Posté(e)

Merci Krikroff d'avoir pris également le temps de réécrire le code (tu as bien compris que j'étais nul ...)

J'essaye ce soir dès que je rentre àla maison.

Posté(e)

@jojo,

 

etant donne que ton routeur est debranché, la reponde est nulle, et ca buggue le json.encode et json.decode, pas d'encodage dans ce cas.

Je me demande si on ne pourrait pas rajouter un json.null

Posté(e)

@jojo,

 

etant donne que ton routeur est debranché, la reponde est nulle, et ca buggue le json.encode et json.decode, pas d'encodage dans ce cas.

Je me demande si on ne pourrait pas rajouter un json.null

 

Pepite,

Je t'avais dit que j'étais nul, j'ai rien compris à  ce que tu as écrit.

La seule chose que je peux confirmer :

  • mon HC2 est toujours connecté à  mon routeur => je peux toujours y accéder sur mon réseau local, même si je n'ai pas d'internet.
  • pour simuler une perte d'internet, je débranche simplement mon routeur de mon modem qui va vers l'extérieur (! je suis en Belgique, donc l'architecture est un peux différente de vos freebox, ...)
Posté(e)

Désolé les gars, j’étais absent, je viens juste de checker mes mails!!

 

C'est vrai qu'un de mes défauts c'est de ne pas géré les retours d'erreurs!! va falloir que je corrige ça dorénavant!!

 

Je vais intégrer le code de krikroff et reuploader le VD.

 

Je fais ça dans le WE!!!

Posté(e)

Je viens de commencer à  regardé.

 

Je suis chez Free et quand on a plus de net, la freebox nous retourne une jolie page d'erreur donc un "status = 200". Le script comprend donc que c'est bon, mais dans la réalité non!! 

 

post-538-0-56748700-1422033675_thumb.png

 

Faudrait voir s'il est possible de parser du html pour trouver cette ligne 

<link href="http://mafreebox.freebox.fr/err/err.css" rel="stylesheet" type="text/css">
Posté(e)

c-lol,

Je viens de tester la correction du script par Krikroff :

  • la VD fonctionne toujours correctement lorsque la connection internet est ok : j'ai la bonne icône
  • par contre, quand j'ai retiré mon cable vers l'extérieur (toujours du réseau local) la bonne icône ne s'affiche pas. Est-ce qie ça a jamais fonctionné sans internet.

Question sjubsidiaire : pourquoi faire un test sur www.google.com si http://www.realip.info/api/p/realip.php fonctionne.

En fait il ne faudrait faire le test sur un autre site que si http://www.realip.info/api/p/realip.php ne fonctionne pas ?

×
×
  • Créer...