Valider sa connexion externe à Jeedom
Rédigé le . Édité le .Pour savoir ce qu'est Jeedom, il faut lire les épisodes précédents. Cependant, j'ai un petit souci depuis le passage en 3.x, mon accès VPN décroche sans arrêt. Voici, comment, j'ai en partie palier au problème.
Description du problème
Lors de l'arrivée de la version 3.x de Jeedom, ma carte SD a décidé de mourrir
(juste parce que j'ai éteint le Raspberry PI un peu comme un bourrin). Ce n'était
pas la faute de Jeedom.
Et comme la méthode d'installation a changé légèrement elle aussi au même moment,
dites-vous que j'en ai chié.
Heureusement, la sauvegarde effectuée la veille du crash m'a sauvé.
Bref, depuis ce temps-là, mon accès externe en utilisant les DNS de Jeedom et un accès VPN tombait régulièrement (et ça continue)*. Ce qui m'obligeait à aller dans l'interface pour redémarrer le réseau de la Jeedom.
Solution
Petit rappel : si vous êtes ici suite à une recherche, c'est que vous avez un minimum de connaissances. On va donc se faciliter la vie en disant que vous savez éditer un fichier, installer un plugin, vous connecter à votre Jeedom, etc.
Je suis une grosse feignasse, plutôt que de faire ça trois ou quatre fois par jour (et surtout la nuit). C'est Jeedom qui redémarre à ma place.
Donc pour cela, on met un script en place et on utilise un scénario.
Le script
Chez moi il s'appelle : jdom_check_network_external.sh
(chez toi ce sera comme
tu veux).
Il doit aller dans ce répertoire : /var/www/html/plugins/script/core/ressources
Il doit être exécutable, et appartenir au bon user. Non, il n'y aura pas de
description de quoi faire, c'est tout ce qu'il y a de plus con sous unix.
#!/usr/bin/env bash
#set -xv
# domain to contact Jeedom
_dom="chezmoi.dns.jeedom.com"
_url="https://${_dom}/here.html"
while [ ${_cpt:=1} -le 2 ]; do
# Connection timeout is forced to 10 seconds and global timeout to 20s
_res="$(curl --connect-timeout 10 -m 20 -Lks "${_url}" 2>&1)"
_rc=${?}
if [ ${_rc} -eq 0 -a "${_res,,}" = "ok" ]; then
printf '%i\n' 0; exit 0
fi
printf '[%s] rc=%s "%s"\n' "$(date '+%Y%m%d-%H:%M:%S')" "${_rc}" "${_res}" >> "${0}.log"
((_cpt++))
done
printf '%i' 1; exit 0
Juste vous remplacez le fqdn (qui n'est pas réellement le mien) dans la variable
_dom
et voilà. Sachez qu'en lisant les sources on finit par trouver que le menu
Santé de la Jeedom fait à peu de chose près ce que je fais pour tester ; il
utilise le fichier here.html
.
Sachez aussi que le script écrit dans un fichier de log quand ça déconne :
$ cat jdom_check_network_external.sh.log
[20171119-10:59:22] rc=6 ""
[20171119-11:33:41] rc=28 ""
6: Couldn't resolve host. The given remote host was not resolved.
28: Operation timeout. The specified time-out period was reached according to the conditions.
Pour vous aider, le man de curl
vous dira pourquoi ça déconnait, dans la plupart
des cas, une erreur 6, c'est chez vous que ça merde, une 28 je dirais que c'est
chez Jeedom.
Ce qui me fait dire que le souci est chez Jeedom ? Bah, premièrement mes logs :
[20171114-23:02:23] rc=28 ""
[20171114-23:02:43] rc=28 ""
[20171115-00:02:03] rc=6 ""
[20171115-20:02:13] rc=28 ""
[20171115-20:02:23] rc=28 ""
[20171115-23:02:22] rc=28 ""
[20171116-23:02:23] rc=28 ""
[20171117-23:02:22] rc=28 ""
[20171118-23:02:23] rc=28 ""
[20171119-23:02:22] rc=28 ""
[20171120-23:02:23] rc=28 ""
[20171121-23:02:23] rc=28 ""
[20171122-23:02:23] rc=28 ""
Sachant que pendant ce temps mes connexions depuis et vers l'exterieur non pas souffert le moins du monde. Du coup, j'ai pas de deuxièmement.
Mais bon pour le moment, je me contente du script qui fait le taf. Je vous ai parlé de ma flemme ?
Le scénario
J'aurais plutôt dû mettre les scenarii. C'est mon côté : Y a un peu plus, je laisse ?
Quelques facts :
Juste pour vous habituer aux noms que j'utilise :
[Système][DNS Jeedom]
est mon objet VPN#[Système][vpnConnexion][scanVPN]#
est le code retour de mon script :jdom_check_network_external.sh
. Pour être plus précis, c'est l'appel à mon script (et donc son code retour).DNS-Validation+Restart
est le nom du scenario qui valide si le network est OKDNS-Restart
est le nom du scenario qui effectue le restart du networkvarDNSRestartInProgress
est une variable qui indique si un restart est déjà en cours
VPN
Vous l'avez configuré, vous savez donc où le trouver. On a besoin de connaître son parent et son nom.
Appel du script
Donc le module Script est nécessaire (le 1 sur l'image), et l'objet que
j'ai créé s'appelle [Système][vpnConnexion]
(le 2 sur l'image).
Voilà de plus près l'objet :
Et surtout sa configuration:
Finalement, c'est plutôt simple, non ?! Donc, la valeur de retour du script est
stockée dans scanVPN
Les scénarios
Comme je disais plus haut, j'en ai deux, un qui fait le restart à proprement parler.
Et le second qui lui fait le test et si nécessaire appelle le scénario du restart.
Vous pouvez tout mettre dans le même. Je préfère séparer pour pouvoir appeler le scénario de restart depuis Telegram lorsque je le souhaite.
Scénario : Restart
Au début du scénario je change la valeur d'une variable pour indiquer qu'un restart est en cours. C'est juste pour que les scénarios appelant icelui sache qu'il est déjà en train de tourner (il y a peut-être plus simple, mais j'ai pas cherché).
Ce scénario ne constiste qu'en un arrêt suivi 20 secondes plus tard d'un start.
Le plugin openVPN a déjà les commandes existantes, il suffisait juste de les appeler.
Comme vous pouvez le constater, j'ajoute des logs pour faire bien.
Scénario : Test
La configuration de ce scénario est on ne peut plus basique, il est programmé toutes les minutes et est configuré en synchrone.
Le scénario Test
lui regarde la valeur de la variable varDNSRestartInProgress
;
si elle est à 1 et dans ce cas, il
stoppe. Sinon, il attend 10 secondes. C'est pour être sûr que le script a eu le temps
de valider si le VPN était dispo.
Je suis conscient qu'on pourrait avoir le scénario qui tournerait en parallèle, mais c'est un peu pour ça que j'ai ajouté la variable qui dit que c'est déjà en cours.
Donc, si le script renvoi 0, on appelle le scénario de restart et on balance un Telegram pour dire qu'il y a eu restart.
Voilà, c'est pas plus compliqué que ça. Et comme je t'aime bien lecteur et qu'il me restait une image à afficher, je te propose la cartographie de mon restart dans Jeedom (ça prend en compte tous les objets liés à ce que je viens d'expliquer).
[*] La petite note de bas de page (si tu la vois pas : achètes un labrador)
Cette option est incluse dans les packs Jeedom (au moins le pack power). De mémoire, ils appellent cela DNS dynamique et HTTPS.
Au moins vous serez pas venu voir cette note pour rien... Retourne où tu étais.