Extrait du sujet NginX Proxi Manager perd la connexion dès que la Livebox reboot :
Pour ceux qui ne veulent pas utiliser l’add-on DuckDNS et qui ont plusieurs noms de domaine, voici 3 méthodes alternatives pour informer DuckDNS de la mise à jour de l’adresse IP…
1. Utiliser une seconde fois l’intégration DuckDNS
En fait, chaque intégration native est disponible en téléchargement depuis le GitHub officiel Home Assistant Core
Donc si on télécharge le zip du projet global :
On a maintenant tous le nécessaire pour récupérer l’intégration DuckDNS qui nous intéresse.
On dois désarchiver le fichier téléchargé, naviguer dedans jusqu’à l’intégration DuckDNS et copier le dossier de l’intégration dans notre instance Home Assistant dans le dossier custom_components
(si le dossier custom_components
n’éxiste pas, il faut le créer dans le dossier /config
) :
On a donc le dossier duckdns
dans notre dossier custom_components
.
Si on laisse ainsi, l’intégration duckdns
appelée dans le fichier configuration.yaml
par les lignes :
#configuration.yaml
duckdns:
domain: mon_domaine
access_token: mon_soken
c’est maintenant le dossier présent dans custom_components
qui est appelé car il est prioritaire (cela permet d’outrepasser n’importe quelle intégration native si on veut faire des modifications).
A la prochaine mise à jour de l’intégration (contenue dans une mise à jour de Home Assistant), l’intégration ne sera pas mise à jour car ce sera toujours le dossier présent dans
custom_components
qui sera appelé et qui n’aura pas été modifié à moins de récupérer la dernière version comme précédemment).
La demande initiale est de pouvoir mettre à jour plusieurs noms de domaine, donc il faut modifier l’intégration que nous venons de copier.
Le principe est le suivant : l’intégration incorporée va mettre à jour un nom de domaine et l’intégration que nous venons de placer dans le dossier custom_components
mettra à jour un second nom de domaine (si un troisième nom de domaine, il faudra répéter les opérations).
Pour pourvoir utiliser 2 intégrations DuckDNS, il faut modifier celle que nous venons de placer, en la renommant duckdns_2
au lieu de duckdns
:
- On renomme le dossier en
duckdns_2
- On renomme dans le fichier
init.py
:DOMAIN = "duckdns_2"
- On renomme dans le fichier
manifest.json
:"domain": "duckdns_2",
- On renomme dans le fichier
services.yaml
:set_txt_2:
On oublie pas de sauvegarder
On a maintenant une nouvelle intégration qui peut être appelée dans le fichier configuration.yaml
:
#configuration.yaml
duckdns:
domain: !secret duckdns_domain
access_token: !secret duckdns_access_token
duckdns_2:
domain: !secret duckdns_2_domain
access_token: !secret duckdns_access_token
On redemmare.
C’est tout ! On a maintenant 2 nom de domaine mis à jour par Home Assistant.
Il ne faut pas oublier que l’intégration
duckdns2
ne se mettra jamais à jour si on ne récupère pas la dernière version de l’intégration duckdns
à chaque mise à jour de Home Assistant.
Si on as un troisième nom de domaine, il faut créer de la même manière duckdns_3
…
2. Utiliser une requête RESTful (mise à jour du nom de domaine sans automatisation)
Si on gratte un peu le sujet, on trouve rapidement la requête qu’il faut envoyer pour mettre à jour l’adresse IP :
https://www.duckdns.org/update?domains=$DOMAINS&token=$TOKEN&ip=$NEWIP
Home assistant permet de lancer des requêtes et de conserver le résultat dans une entité : RESTful - Home Assistant
On va donc utiliser la plateforme rest
.
Nous avons donc besoin pour construire la requête :
- le nom de domaine : sois en dur dans le code, sois dans une entité
input_text
(modeTexte)
- le token : sois en dur dans le code, sois dans une entité
input_text
(modePassword)
- l’adresse IP extérieur : DNS IP - Home Assistant
Je vais détailler les deux choix (en dur dans le code ou par des entités paramétrables) :
En dur dans le code :
sensor:
- platform: dnsip
name: Home Assistant IP
rest:
- resource_template: https://www.duckdns.org/update?domains=<DOMAINE>&token=<TOKEN>ip={{states('sensor.home_assistant_ip')}}
scan_interval: 300
sensor:
- name: "Reponse de DuckDNS"
Par des entités paramétrables :
sensor:
- platform: dnsip
name: Home Assistant IP
rest:
- resource_template: https://www.duckdns.org/update?domains={{states('input_text.nom_de_domaine')}}&token={{states('input_text.duckdns_token')}}&ip={{states('sensor.home_assistant_ip')}}
scan_interval: 300
sensor:
- name: "Reponse de DuckDNS"
On redémarre.
Maintenant, si on est passé par les entités personnalisée, il faut les renseignées (dans une cartes entités
par exemple).
A chaque changement d’adresse ip détecté par la plateforme dnsip
, l’entité sensor.home_assistant_ip
sera mise à jour.
Sa mise à jour entraîne l’envoie de la requête de mise à jour car l’entité mise à jour est présente dans le modèle de la requête.
C’est tout.
La différence avec la première solution et que nous ne sommes pas dépendant d’une intégration et de ses mises à jour.
3. Utiliser une commande RESTful (mise à jour du nom de domaine avec automatisation)
Cette méthode est quasiment identique à la précédente.
Au lieu d’utiliser la plateforme rest
, on peut utiliser l’intégration RESTful Command
: RESTful Command - Home Assistant
On a besoin des mêmes informations que la méthode précédente (adresse ip, nom de domaine et token) :
rest_command:
update_duckdns:
url: https://www.duckdns.org/update?domains={{states('input_text.nom_de_domaine')}}&token={{states('input_text.duckdns_token')}}&ip={{states('sensor.home_assistant_ip')}}
On redémarre.
On a maintenant un nouveau service disponible du nom de rest_command.update_duckdns
.
Il faut donc utiliser une automatisation qui détecte un changement d’adresse ip pour envoyer la requête de mise à jour (elle doit s’exécuter également au démarrage si jamais l’adresse ip externe change pendant un redémarrage ou l’initialisation de HA) :
alias: DuckDNS - Mise à jour <DOMAINE>
description: 'Mise à jour du nom de domaine sur changement d'adresse ip externe (et au démarrage)'
trigger:
- platform: state
entity_id: sensor.home_assistant_ip
- platform: homeassistant
event: start
condition: []
action:
- service: rest_command.update_duckdns
mode: single
C’est fini pour mes explications.