Dans le précédent article, je vous ai donné les bases pour la première automatisation via la solution Jeedom. Nous allons maintenant passer aux choses sérieuses et voir comment mettre à jour automatiquement son adresse IP privée dynamique.

Pour rappel, l’objectif est de mettre à jour son IP publique dans la configuration DynHost de OVH afin que votre nom de domaine pointe toujours vers votre solution domotique. Cette solution est également valable pour toute solution locale et accessible depuis l’extérieur via un nom de domaine comme un site Internet, un serveur NAS local accessible depuis l’extérieur, …

Le principe est assez simple et consiste à vérifier de manière régulière son adresse IP publique et la comparer avec la valeur récupérée lors de la vérification précédente. Dans le cas où un changement est détecté, on fait alors une connexion à OVH pour mettre à jour ce paramètre.

Passons maintenant aux choses sérieuses sachant que tout sera effectué via l’interface graphique de Jeedom.

Création des variables

Comme expliqué précédemment, deux variables doivent être créées. Si vous avez bien lu la documentation officielle, cette opération vous paraîtra simple mais je vais tout de même vous indiquer la marche à suivre:

  • Depuis Jeedom, allez dans le menu Outils > Variables puis sur le bouton [+ Ajouter] en haut à gauche. Les valeurs à saisir sont alors les suivantes (Pensez bien, dans la colonne action, à cliquer sur le dernier bouton pour valider. Les valeurs indiquées ne serviront que pour l’initialisation, mais n’ont clairement aucun sens :-)):
    • Nom: currentPublicIP
    • Valeur: JeNeSaisPas
  • Créez maintenant une seconde variable avec les informations suivantes :
    • Nom: newPublicIP
    • Valeur: JeNeSaisPasNonPlus

Les variables étant créés, nous pouvons passer au script.

Création du script

À présent, il va falloir exécuter un script qui va récupérer votre adresse IP publique via le site www.ifconfig.me/ip

Dans l’article précédent, vous avez installé le plugin <Script>. C’est maintenant que vous allez l’utiliser.

Cliquez sur le menu Plugins > Programmation > Script puis cliquez sur le bouton ajouter. Donnez un nom à votre script. Dans mon cas, je l’ai appelé <Retrieve my public IP>. Ce nom est important car c’est ainsi que vous pourrez le retrouver lors de la configuration du scénario. Cochez la case <Activer> et vous devriez donc avoir un écran de ce type:

Ne vous souciez pas de la valeur du champ <objet parent>, celle-ci n’est utile que pour retrouver plus facilement vos objets.

Allez ensuite dans l’onglet <Commandes>, cliquez en haut à droite sur le bouton <Ajouter une commande script> et saisissez les valeurs suivantes :

  • Nom: retrievePublicIP
  • Type Script: HTTP
  • Type: Info / Autre
  • Requête: ifconfig.me/ip

Vous devriez avoir ce type de fenêtre :

Cliquez sur le bouton [Sauvegarder] en haut à droite. Dernière étape, nous allons maintenant créer le scénario.

Création du scénario

Pour créer le scénario, allez dans le menu Outils > Scénarios puis cliquez sur le bouton [Ajouter]. Donnez-lui un nom puis validez.

Dans la fenêtre qui apparaît, laissez toutes les valeurs par défaut excepté le premier champ à droite nommé <Mode du scénario>. Il faut changer la valeur en <Programmé>. Dans mon cas, j’ai décidé de faire la vérification et la correction (si nécessaire) toutes les heures. Pour configurer cela, cliquez sur le point d’interrogation et sélectionnez les valeurs suivantes :

  • À exécuter : récurrent
  • Tous les : Heure

Une fois que vous avez validé, vous devriez avoir une fenêtre ressemblant à l’image ci-dessous :

Le champ prochain vous permet de connaître la date de la prochaine exécution.

Si tout est bon, passez à l’onglet <scénario>.

Ici le principe va être de récupérer votre adresse IP publique puis de stocker cette valeur dans une variable (précédemment créée). Pour cela, il suffit d’ajouter deux actions dans un bloc et de saisir les paramètres indiqués.

Action 1 : Exécuter le script précédemment créé

  • Cliquez sur le bouton [Ajouter bloc] tout en haut
  • Sélectionnez la valeur <action>
  • Un bloc action est alors créé. Cliquez sur le bouton [Ajouter] puis <action>
  • Un champ apparaît maintenant avec un bouton tout à droite (Si vous passez la souris dessus, le message indiqué sera <Sélectionner la commande>)
  • Cliquez sur ce bouton et sélectionnez les valeurs suivantes puis validez :
    • Objet : Laissez la valeur par défaut soit Aucun
    • Équipement : Dans la liste, vous devriez retrouver le nom de votre script. Dans mon cas : Retrieve my public IP
    • Commande : Rafraîchir

Action 2 : Affecter à la variable newPublicIP le résultat du script

  • Comme fait précédemment, créez une seconde action, mais cliquez cette fois sur le premier bouton pour sélectionner la valeur <Variable> et saisissez la valeur newPublicIP (c’est le nom de la variable que vous avez créé précédemment) puis saisissez les valeurs suivantes dans le champ à droite et cliquant sur le bouton à droite :
    • Objet: Laissez la valeur par défaut soit Aucun
    • Equipement: Dans la liste, vous devriez retrouver le nom de votre script. Dans mon cas: Retrieve my public IP
    • Commande: RetrievePublicIP (c’est le nom que vous avez défini lors de la création du script dans l’onglet <Commandes>)

Une fois validé, vous devriez obtenir ce type de résultat:

Enfin, ajoutez un bloc code et copiez le code suivant :

$currentIP = $scenario->getData("currentPublicIP");
$newIP = $scenario->getData("newPublicIP");

if ($currentIP === $newIP) {
  message::add("IP", "Pas de changement d'adresse IP: ".$currentIP);
}
else {
  $scenario->setData("currentPublicIP", $newIP);
  message::add("IP", "L'adresse IP publique a changé: Passage de ".$currentIP." à ".$newIP);
  
// Génération de l'URL pour l'appel de l'API de OVH pour mettre à jour l'IP dans la partie dynHost
  $HOST = ‘votre_site_web';
  $USER = 'votre_user_créé_durant_la_configuration_du_dynhost';
  $PWD = 'le_mot_de_passe_créé';
  
  $url = "https://".$USER.":".$PWD."@www.ovh.com/nic/update/?system=dyndns&hostname=".$HOST."&myip=".$newIP;
  
  // l'URL est prête, on l'execute
  fopen($url, "r");
}

Pensez bien à ajuster les valeurs des variables $HOST, $USER et $PWD avec vos propres valeurs en laissant bien les apostrophes au début et à la fin.

Vous devriez obtenir cette fenêtre :

Pensez bien à sauvegarder vos changements pour terminer cette configuration !!!

Conclusion

Si tout se passe bien, dans l’heure qui suit, le script devrait s’exécuter et s’il y a eu un changement d’adresse IP publique, ce changement sera effectué automatiquement dans la configuration de votre DynHost.

Pour tester, le plus simple est de mettre une adresse erronée dans votre configuration dynHost et de lancer manuellement ce script en cliquant sur le bouton [Executer] en haut à droite.

Cet article est certes assez technique mais c’est la solution la plus simple que j’ai trouvée après de nombreuses recherches sur Internet. Si tout fonctionne correctement, vous avez alors une solution domotique en place basée sur un Raspberry Pi et la solution Jeedom.

En cas de question, n’hésitez pas à les poser en commentaires.

Dans les prochains articles, j’expliquerai quelques bases sur l’assistant Google et décrirai quelques cas concrets que j’ai mis en place pour mes besoins personnels.

A bientôt!

Shares:

4 Comments

  • venin jf
    venin jf
    4 mars 2022 at 14 h 23 min

    Bonjour,
    Est ce que le sript et la mise en place sur jeedom,
    et surtout sur OVH fonctionnent toujours ?
    En attente de votre retour…

    JF

    Reply
    • Thierry
      Thierry
      5 mars 2022 at 10 h 20 min

      Bonjour,

      si tu regardes la section domotique, tu constateras des articles indiquant que je suis passé de Jeedom à Home Assistant. Je n’utilise donc plus ce script.

      Cependant, il n’y a pas de raison qu’il ne fonctionne plus. L(‘as-tu testé et si oui, quel souci as-tu rencontré?

      Thierry

      Reply
  • Claude
    Claude
    28 janvier 2021 at 10 h 44 min

    Bonjour,
    Après exécution, voici le log dont j’ai remplacé l’IP :
    [2021-01-28 10:31:00][SCENARIO] Start : Scenario lance manuellement.
    [2021-01-28 10:31:00][SCENARIO] Exécution de la commande [Hardware][Retrieve my public IP][Rafraichir]
    [2021-01-28 10:31:00][SCENARIO] Affectation de la variable newPublicIP => 00.000.000.000 = 00.000.000.000
    [2021-01-28 10:31:00][SCENARIO] Exécution d’un bloc élément : 164
    [2021-01-28 10:31:00][SCENARIO] Exécution d’un bloc code
    [2021-01-28 10:31:00][SCENARIO] syntax error, unexpected  »;’ (T_CONSTANT_ENCAPSED_STRING)
    [2021-01-28 10:31:00][SCENARIO] Fin correcte du scénario

    où dois-je supprimer ces guillemets dans le code ?

    $currentIP = $scenario->getData(« currentPublicIP »);
    $newIP = $scenario->getData(« newPublicIP »);

    if ($currentIP === $newIP) {
    message::add(« IP », « Pas de changement d’adresse IP: « .$currentIP);
    }
    else {
    $scenario->setData(« currentPublicIP », $newIP);
    message::add(« IP », « L’adresse IP publique a changé: Passage de « .$currentIP. » à « .$newIP);

    // Génération de l’URL pour l’appel de l’API de OVH pour mettre à jour l’IP dans la partie dynHost
    $HOST = ‘xxxxx.xx.xx’;
    $USER = ‘xxxxxxxx’;
    $PWD = ‘xxxxxx’;

    $url = « https:// ».$USER. »: ».$PWD. »@www.ovh.com/nic/update/?system=dyndns&hostname= ».$HOST. »&myip= ».$newIP;

    // l’URL est prête, on l’execute
    fopen($url, « r »);
    }

    Reply
    • Thierry
      Thierry
      28 janvier 2021 at 19 h 24 min

      Bonsoir,

      merci pour votre retour. ça fait plaisir de voir que mon script peut servir :-)

      Pour vous aider, je vous invite à suivre les étapes suivantes:
      1) Ajouter la commande ci-dessous avant la commande démarrant par $url =
      message::add(“DEBUG”, “Génération URL“);

      2) Après cette cette commande, ajoutez la ligne suivante:
      message::add(“DEBUG”, $url);

      3) Après exécution, en haut à droite, vous devriez alors voir deux entrées: L’une avec noté <Génération URL> et une autre avec l’url en question.
      4) Copiez alors cette dernière valeur et collez-là dans votre navigateur pour voir si l’URL est valide et validez

      En attente de votre retour…

      Thierry

      Reply

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.