Aller au contenu

Etre notifié en cas de changement de connexion internet


Messages recommandés

Posté(e) (modifié)

Bonjour à tous,

 

Voici un petit tuto pour ceux d'entre vous, qui comme moi, ont une connexion internet de secours (modem 4G ou autre) ;)

Il est peut être agréable de savoir laquelle est utilisée.

Notamment si l'on est absent et que l'on souhaite rester informé de ce qui se passe chez nous.

J'ai créé une petite scène toute simple ainsi qu'un VD me permettant d'avoir le statut de la connexion.

Il n'y a aucune interaction avec, c'est juste de l'information.

 

EDIT - Version 2 :

  • suppression du bug du timeout
  • ajout d'un label update dans le VD pour avoir la date du dernier changement
  • modification des icones
  • possibilité d'afficher l'IP si celle-ci change

 

 

Sommaire :

 

  1. Prérequis
  2. Le VD
  3. La scène principale
  4. La scène de notification
  5. Installation
  6. Conclusion
  7. Bug connu
  8. Téléchargement

 

 

1. Prérequis :

 

Comme dit en introduction, pour avoir une connexion internet de secours, il faut un 2ème modem (modem 4G par exemple).

Il existe beaucoup de modèles différents, certains mêmes provenant de notre FAI...

Me concernant, j'utilise un TP-Link TL-MR6400 avec une carte SIM provenant de mon FAI avec l'option multisim.

 

Il faut également pouvoir  relier ces 2 modems dans un routeur acceptant plusieurs entrées WAN pour que le basculement entre la ligne ADSL plantée et la 4G se fasse automatiquement.

Je n'irais pas plus loin sur l'explication d'une telle installation, car elle serait vraiment trop longue, et les pro du réseau seront mieux vous conseiller que moi. :13:

Il y a un tel choix possible en fonction de beaucoup de critères (FAI, marque, tarif, abonnement, configuration logiciel, configuration matériel, …, - un tuto spécifique serait le bienvenu)

 

Donc ce petit tuto s'adresse plutôt aux personnes ayant déjà une 2ème connexion internet chez eux.

 

2. Le VD :

 

vd2.png.fe0c8cc33ab940671cb077595d39d479.png

 

 

Celui-ci affiche simplement si on est connecté en ADSL, 4G... ou pas.

Il indique aussi l'adresse IP public.

Il n'y a pas de code source dans le mainLoop :)

 

3. La scène principale : (rien de bien méchant :74:)

--[[
%% autostart
%% properties
%% events
%% globals
--]]

--[[
Version 2

teste toutes les XX minutes si connecté par ADSL ou 4G
envoie une requete à un site qui renvoie l'IP public
j'analyse la première partie de l'IP : (ISP = Bouygues)
176 = ADSL ; 80 = 4G
Modification d'une VG suivant l'état pour les notifications
Et modification du VD.
--]]

--déclaration icones
local IcoADSL = 1098
local Ico4G = 1095
local IcoInc = 1096
local IcoOFF = 1097
--déclaration IP
local IPADSL = 176
local IP4G = 80
--déclaration autres
local IDVD = 164
local VG = "TypeConnection"

--Teste la présence de la VG. la crée si absente
function TestVG(VGName)
  if fibaro:getGlobal(VGName) == nil then
    newVar = {}
      newVar.name = VGName
      newVar.value = ""
    api.post("/globalVariables", newVar)
    print("VG "..newVar.name.." créée")
  else
    print("VG "..VGName.." existante")
  end
end

--demande de l'adresse IP 
function RequestIP()
  local IP = net.HTTPClient({ timeout = 2000 })
  IP:request("http://bot.whatismyipaddress.com/", {
    success = function(response) 
      CheckIp(response.data)
      setTimeout(RequestIP, 1*60*1000) --bouclage
    end,
    error = function(response) --timeout ou autre
      print("Err : "..response)
      --modification du VD et de la VG  
      fibaro:setGlobal("TypeConnection","OFF") 
      fibaro:call(IDVD, "setProperty", "currentIcon", IcoOFF)
      fibaro:call(IDVD, "setProperty", "ui.Label1.value", "OFF")
      --affiche l'erreur  
      fibaro:call(IDVD, "setProperty", "ui.Label2.value", response)
      setTimeout(RequestIP, 1*60*1000) --bouclage pour relancer
    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]) == IPADSL then
    print("ADSL - "..IP)
    --pour notification push
    fibaro:setGlobal("TypeConnection","ADSL") 
    --modifie le VD
    fibaro:call(IDVD, "setProperty", "currentIcon", IcoADSL)
    fibaro:call(IDVD, "setProperty", "ui.Label1.value", "ADSL")
    fibaro:call(IDVD, "setProperty", "ui.Label2.value", IP)
  
  elseif tonumber(detail[1]) == IP4G then
    print("GSM - "..IP)
    fibaro:setGlobal("TypeConnection","GSM") 
    fibaro:call(IDVD, "setProperty", "currentIcon", Ico4G)
    fibaro:call(IDVD, "setProperty", "ui.Label1.value", "GSM")
    fibaro:call(IDVD, "setProperty", "ui.Label2.value", IP)
  
  else --sinon affiche l'IP reçu
    print("IP inconnnue - "..IP)
    fibaro:setGlobal("TypeConnection","INC")
    fibaro:call(IDVD, "setProperty", "currentIcon", IcoInc)
    fibaro:call(IDVD, "setProperty", "ui.Label1.value", "???")
    --affiche l'IP obtenue
    fibaro:call(IDVD, "setProperty", "ui.Label2.value", IP)    
  end
end

TestVG(VG) --teste de la VG
RequestIP() --appel de la fonction principale

Elle est lancée au boot de la HC2 (%%autostart)

Très simple, la fonction RequestIP() interroge toutes les minutes le site http://bot.whatismyipaddress.com/ (pas d'inscription nécessaire) qui renvoie l'adresse IP public.

 

Ensuite la fonction CheckIP() analyse la chaine de caractères de retour.

Suivant le premier chiffre de l'IP, j'en déduis si je suis en ADSL ou en 4G.

Dans mon cas, 176 = IP ADSL et 80 = IP 4G.

Je n'analyse pas les autres chiffres de l'IP public car ceux-ci peuvent peut-être changer de temps à autre. mais pas le début.

 

Suivant le résultat, je renseigne une VG (pour les notifications push ou autres besoins) et je modifie l'icône du VD et ses labels.

La fonction TestVG() teste si la VG est présente ou pas et la crée le cas échéant.

 

4. La scène de notification :

 

--[[
%% autostart
%% properties
%% events
%% globals
TypeConnection
--]]

--[[
Scène lancée au boot de la HC2 et sur changement de VG
- Envoie les push & mail
- update des label et icon sur certain VD
--]]

local IDTel = tonumber(fibaro:getGlobalValue("IdPhoneJJ"))
local IDMail = 2
local Trigger=fibaro:getSourceTrigger()

--temporise pour le boot de la HC2
if Trigger.type == "autostart" then fibaro:sleep(20*1000) end

--VG TypeConnection**********************************************************
if Trigger.varName == "TypeConnection" or Trigger.type == "autostart" then
  
  if fibaro:getGlobal("TypeConnection") == "ADSL" then
    fibaro:call(IDTel, "sendPush", "Connexion par ADSL")
    fibaro:call(IDMail, "sendEmail", "Type of connection", os.date("%m/%d/%Y").." - "..os.date("%H:%M").." - Connexion par ADSL")
    print(os.date("%d/%m/%Y").." - Connexion par ADSL")
  
  elseif fibaro:getGlobal("TypeConnection") == "GSM" then
    fibaro:call(IDTel, "sendPush", "Connexion par GSM")
    fibaro:call(IDMail, "sendEmail", "Type of connection", os.date("%m/%d/%Y").." - "..os.date("%H:%M").." - Connexion par GSM")
    print(os.date("%d/%m/%Y").." - Connexion par GSM")
  
  elseif fibaro:getGlobal("TypeConnection") == "INC" then  
    fibaro:call(IDTel, "sendPush", "Connexion HC2 - IP inconnue")
    fibaro:call(IDMail, "sendEmail", "Type of connection", os.date("%m/%d/%Y").." - "..os.date("%H:%M").." - Connexion HC2 - IP inconnue")
    print(os.date("%d/%m/%Y").." - Connexion HC2 - IP inconnue")
  
  elseif fibaro:getGlobal("TypeConnection") == "OFF" then
    fibaro:call(IDTel, "sendPush", "Connexion HC2 - OFF")
    fibaro:call(IDMail, "sendEmail", "Type of connection", os.date("%m/%d/%Y").." - "..os.date("%H:%M").."Connexion HC2 - OFF")
    print(os.date("%d/%m/%Y").." - Connexion HC2 - OFF")
  end
  --mise à jour du label update dans le VD
  fibaro:call(164, "setProperty", "ui.Label3.value", os.date("%d/%m/%Y - %H:%M"))
end

Les notifications se fond dans une scène à part, car si elles étaient dans la scène principale, j'aurai une notif par minute... :huh:

Cette scène est un bout de ma scène réelle, car elle centralise toutes les notifications de mes VG.

Donc apparait ici que ce qui concerne la VG "TypeConnection".

 

Elle est lancée au boot de la HC2 (%%autostart) et sur changement de la VG (%%Global)

En cas de boot (if Trigger.type == "autostart" then fibaro:sleep(20*1000) end) je retarde un peu l'exécution pour soulager la HC2)

Après suivant la valeur de la VG, je notifie...

 

5. Installation :

 

Pour connaitre son IP public en ADSL, vous pouvez utiliser le site ci-dessus de la scène principale.

Noter l'IP renvoyée.

Refaire la même manipulation étant connecté en 4G (ou autre).

Il suffit après de modifier les variables au début de la scène principale (ID du VD, ID des icones, premier N° des IP)

Pas besoin de s'occuper de la VG, la scène le fait.

 

 

6. Conclusion :

 

Cela peut toujours être utile un jour.

Du coup, dès que la connexion change, je suis informé.

Dans mon cas par mail et par push.

Il faut juste laissé le temps à l'installation de basculer d'une connexion à l'autre (environ 2 minutes : 1 minutes pour comprendre qu'on a plus d'ADSL :P et 1 petite minute environ pour basculer sur la 4G)

 

7. Bug connu :

 

 

8. Téléchargement : (V2)

 

 

  • Les icones :Con_4G.png.85fa926782b090b33b962280acdd0150.pngCon_ADSL.png.a4ed0287175abf45ad707ce4b0d08bf4.pngCon_inc.png.5911d44e64a27ebf2d66b647ffb378da.pngCon_off.png.7d413af0b343af225416cc1c793110bf.png

 

 

 

Modifié par jjacques68
Version 2
  • Upvote 6
Posté(e)

Excellent, il faudra que je l'installe.

 

Par contre il faudra faire une modification : En ADSL, tu auras une IP fixe, par contre pas en 4G. Du coup potentiellement ton adresse 4G peut très bien commencer comme ton adresse ADSL. Le mieux est donc de prendre l'adresse ADSL complète comme référence. D'ailleurs celle de la 4G pourrait bien commencer par carrément autre chose.

Posté(e)
Il y a 15 heures, Nico a dit :

Du coup potentiellement ton adresse 4G peut très bien commencer comme ton adresse ADSL

 

Es-tu sur ? Ce que j'ai constaté, c'est que l'ip de la 4G (celle relevé par le site ou par dyndns) change plusieurs fois par jour.

hier elle a changé 3 fois. Mais les 2 premiers numéro de l'ip n'ont jamais changé.

 

en plus, si je regarde la config du modem 4G, sont ip est en 10.xx.xx.xx (comme mon tél)

alors que les sites ou dyndns voient 80.xx.xx.xx

assez étrange comme situation...

Posté(e)

Pas besoin d'abonnement pro pour l'ADSL, cela dépend du FAI. Chez Free par exemple c'est gratuit et standard depuis 10 ans. Tu es chez qui ?

 

Sinon pour la 4G, le début pourra effectivement rester fixe assez longtemps, mais ce n'est pas une vérité à long terme. De mémoire les relais téléphonique travail avec des plages effectivement, mais cela change au bout d'un moment, tu ne pourras rien y faire.

Posté(e)

Ah bah tient, justement j'ai une scène similaire qui tourne chez moi depuis quelques mois, j'avais mis ça en place avant d'avoir la fibre et de passer en IP variable (pas d'IP fixe garantie chez Orange, contrairement à Free), afin de détecter non seulement la bascule sur réseau 4G comme toi, mais aussi le changement d'IP de la connexion principale pour faire une mise à jour de DNS dynamique.
Pas de chance (enfin si, j'ai plutôt de la chance), mon IP en fibre n'a pas changé depuis que j'ai la fibre (2 mois).

D'ailleurs, au lieu de regarder uniquement l'IP, je surveille aussi le provider.

La seule fois où la scène m'a notifié, c'est quand je suis passé de Free ADSL à Orange Fibre, au moins elle fonctionne et ne plante pas.
Je ne me souviens plus comment j'ai géré le Timeout de la fonction httpclient, faudra que je regarde à l'occasion, mais j'avais un peu cherché.

Posté(e)

Je viens de mettre à jour le tuto (voir edit version 2 en haut du post)

 

@Nico j'attends un peu pour voir l'évolution des IP public pour faire ce que tu me disais...

La maintenant, si l'IP change, je l'affiche simplement dans le VD.

 

 

 

 

  • Upvote 1
Posté(e)
Le 19/08/2017 à 16:29, jjacques68 a dit :

--temporise pour le boot de la HC2 if Trigger.type == "autostart" then fibaro:sleep(20*1000) end

Salut @jjacques68

Ce serait mieux avec un setTimeout non ? Ou il y a une raison au sleep ?

Posté(e)

beuh non, juste une petite tempo...

Le soucis c'est que toutes les scènes démarrent (celles en %%autostart) en même temps lors d'un reboot de la HC2 (je suppose).

 

Donc je me dis qu'en étalant dans le temps le démarrage des scènes, la HC2 encaissera mieux le coup.

Sans cette tempo, il m'arrive de ne pas recevoir les notifications au démarrage...

 

honnêtement le setTimeout... je sais bien l'utiliser pour les boucles, mais pour retarder une commande... ???

(on en avait déjà discuté toi et moi il me semble ;))

 

:2:

 

Posté(e)

tout a fait d'accord, tu as raison d'attendre un peu que tout soit bien demarre.

 

au lieu de boucler avec ta fonction dans le setTimeout


 

setTimeout(function()

     code qui sera execute à la fin du "tempsdattente"

end, tempsdattente*1000)

 

  • 1 mois après...
Posté(e) (modifié)

Merci beaucoup pour ce tuto très clair. Installé chez moi sans problème, avec un syno RT2600ac configuré pour gérer le failover avec un routeur 4G (j'avais pansé d'abord à utiliser un dongle 4G directement sur le syno, mais je n'ai jamais eu confirmation qu'il saurait faire du failover entre WAN et dongle 4G)

 

Le seul pb que j'ai, c'est que très régulièrement je reçois des notifications indiquant que ma HC2 n'est pas connectée. J'ai essayé d'augmenter la durée du timeout de la fonction RequestIP, mais sans succès.

 

Pas de pb chez vous ? Avez vous une piste pour m'aider à chercher pcq là je sèche...

 

merci

Modifié par ggpublic
Posté(e) (modifié)

Merci pour ce Toto. Je vais certainement l'implementer ton VD.

 

Mais avant @ggpublic pourrais-tu nous expliquer comment tu as intégré le failover sur ton RT2600ac sans utiliser le dongle 4G. Je possède le équipement que toi et je n'ai pas encore intégré le failover.

Modifié par MAM78
Posté(e)

Moi j'avais fais du failover en 4G avec la clef USB, cela fonctionne, mais c'est pas top, car chauffe beaucoup, en tout cas le dongle que j'avais. Ils en ont ajouté depuis, mais bon.

Du coup moi j'ai ajouté un routeur 4G à côté, et je l'ai mis sur le lan 1, et ensuite dans Internet tu indiques que ton lan1 c'est le WAN de secours, et voilà le travail. Est en PROD depuis la beta (Avant la beta, on ne pouvait pas utiliser le lan 1 comme Wan).

Posté(e)

Merci pour vos réponses.

@jjacques68, j’ai;deux types de messages dans le debug:

Err : Software caused connection abort

ou

 Err : Network is unreachable

 

je n’ai pas réussi à identifier de pattern, cela semble se produire de manière aléatoire, environ une dizaine de fois par jour.

je n’ai effectivement pas touché au timeout mais bien eu Settimeout mais sans succes.

 

@MAM78 tout pareil que @Nico, Avec un routeur 4G TPLINK sur le port LAN1. Ça marche,plutôt bien

 

 

Posté(e)

Bon c’est clairement qu’il ne reçoit pas de réponse du site qui renvoit l’adresse IP.

Tu peux peutêtre quand même essayer de monter le Timeout à 4 secondes pour voir s’il y a amélioration.

 

Aurais-tu un moyen de vérifier si tu as des coupures de connexion internet ?

Il se peut aussi que le failover est trop sensible... et donc beaucoup de changement WAN ADSL/4G...

et le changement de port WAN prends quand même un peu de temps (chez moi 1 bonne minute pour pas dire 2).

Et pendant ce temps la, il n’y a pas de connexion !! (Et donc signalé par le VD).

Dès le retour de l’ADSL, re changement de port WAN et re perte de connexion... ainsi de suite...

 

Faudrait faire des tests et vérifier combien de temps le changement ADSL/4G prend.

 

 

Posté(e)

Sur le Syno, le temps de bascule est paramétrage ainsi que les tests à effectuer. Mon Huaway étant always on, c'est immédiat une fois que que le Syno bascule.

×
×
  • Créer...