Page 1 sur 1

[LUA] Notification changement IP Publique

Publié : 01 août 2019, 01:08
par lmet
Salut à tous,

Je vous propose un petit script lua qui lors d'un changement de votre adresse IP publique :
° Envoie une notification via telegram.
° Modifie le DynHost d'OVH.
° Mets à jour une variable globale.

Pour l'installation :
Il faut créer un nouveau script lua "Réglages" "Plus d'options" "Evènements" "+" "LUA" "TIME" et y coller le code en supprimant le code de l'exemple proposé.

Il faudra ensuite créer une variable de type string dans "Réglages" "Plus d'options" "Variables utilisateur". Choisir un nom "WAN_IP" par exemple, en type de variable choisir "Chaîne" et une valeur "0.0.0.0" puis faire ajouter.
Dans le code à la ligne :

Code : Tout sélectionner

local uservar  = ""                                        -- Indiquer le nom de la variable utilisateur
Indiquer le nom de la variable choisie.

A ce stade le script ne fera que renseigner la variable utilisateur toutes les quinze minutes en cas de changement d'IP publique.
Pour recevoir une notification via telegram deux lignes sont à renseigner :

Code : Tout sélectionner

local token    = "" -- Indiquez le token telegram sinon ""
local chat_id  =0    -- Indiquez le chat_id telegram sinon Laisser à 0
Et pour modifier le DynHost d'OVH:

Code : Tout sélectionner

local host     = ""  -- Indiquer le sous-domaine OVH sinon laisser à ""
local cnx      = "LOGIN:MDP" -- Indiquer le login:mdp d'OVH sinon laisser à "LOGIN:MDP"
Bon! Assez causé voilà le script ;)

Code : Tout sélectionner

--[[
    Script de type "Time" : Renseigne une variable globale si changement d'adresse IP publique.
    Peut envoyer un message telegram et/ou modifier un DynHost OVH
    Prérequis : Créer une user variable de type Chaine valeur initiale : 1.0.0.0 par exemple
    Auteur : lmet
    url: http://www.lamaisonentique.com/domoticz-dynhost-ovh/
    lmet [v :0.2] : Modification function GetHTTPResult et délai paramétrable
    lmet [v :0.1] : version initiale
--]]
------------------------------------------------------- VARIABLES A EDITER -------------------------------------------------------

local uservar  = ""                                         -- Indiquer le nom de la variable utilisateur /!\ ne pas laisser vide
local token    = ""                                         -- Indiquer le token telegram sinon ""
local chat_id  = 0                                          -- Indiquer le chat_id telegram sinon Laisser à 0
local host     = ""                                         -- Indiquer le sous-domaine OVH sinon laisser à ""
local cnx      = "LOGIN:MDP"                                -- Indiquer le login:mdp d'OVH sinon laisser à "LOGIN:MDP"
local mrequest = 15                                         -- Délai entre deux requètes => 15 mn par défaut
local log      = false                                      -- (true/false) => Envoi ou pas de messages dans les logs

------------------------------------------------------ FIN VARIABLES A EDITER ----------------------------------------------------

local cmd      = "curl -s http://whatismyip.akamai.com/"    -- Adresse requête IP publique

function GetHTTPResult(cmd)
    local url = assert(io.popen(cmd)) 
    local blocjson = url:read('*all')
    url:close()
    wan_ip = blocjson
    return wan_ip
end

commandArray = {}

    -- Suivant le délai défini (quinze minutes par défaut) => Vérifier l'IP publique
    local m = os.date('%M') 
    if (m % mrequest == 0) then  
        wan_ip = GetHTTPResult(cmd)
        -- L'IP a changé!
        if wan_ip ~= uservariables[uservar] then
            if log == true then
				print ("[WAN_IP] --- Changement de l'IP publique valeur : " .. wan_ip)
			end
			-- Modifier l'entrée IP du DynHost OVH
            if cnx ~= "" then
                cmd = 'curl "https://www.ovh.com/nic/update?system=dyndns&hostname=' .. host .. '&myip=' .. wan_ip .. '"' .. ' -u "'  .. cnx .. '"'
                os.execute (cmd)
				if log == true then
					print ("[WAN_IP] --- Modification du DynHost effectuée")
				end
            end
            if token ~= "" and chat_id ~= 0 then
                local msg = "L'adresse IP a changé. Nouvelle IP : " .. wan_ip
                cmd  = 'curl --data chat_id='.. chat_id ..' --data-urlencode "text='.. msg ..'" "https://api.telegram.org/bot'.. token ..'/sendMessage" '
                os.execute (cmd)
				if log == true then
					print ("[WAN_IP] --- Notification telegram effectuée")
				end
            end
            -- Dans tous les cas renseigner la nouvelle IP
            commandArray["Variable:" .. uservar] = wan_ip
			if log == true then
				print ("[WAN_IP] --- Modification de la variable utilisateur : " .. uservar .. " effectuée" )
			end
		else
			if log == true then
				print ("[WAN_IP] --- Pas de changement IP publique actuelle : " .. wan_ip)
			end
        end
    end
    
return commandArray
Merci d'avance pour vos retours et propositions d'améliorations.

Re: Script lua : Notification changement IP Publique

Publié : 01 août 2019, 23:46
par romain1206
bonsoir,

merci pour ton script interessant

mais j'ai un soucis

Code : Tout sélectionner

 2019-08-01 23:45:04.852 Status: LUA: [WAN_IP] --- Changement de l'IP publique valeur :
2019-08-01 23:45:05.057 Status: LUA: [WAN_IP] --- Modification du DynHost effectuée
2019-08-01 23:45:05.367 Status: LUA: [WAN_IP] --- Notification telegram effectuée
2019-08-01 23:45:05.369 Status: LUA: [WAN_IP] --- Modification de la variable utilisateur : WAN_IP effectuée
2019-08-01 23:45:05.371 Status: EventSystem: Script event triggered: chgt_ip 
j'ai bien recu la notif telegram mais la variable est vide

Re: Script lua : Notification changement IP Publique

Publié : 02 août 2019, 01:51
par lmet
Bonsoir,
Merci pour ton retour et désolé que cela ne fonctionne pas.
En tapant : http://whatismyip.akamai.com/ dans ton navigateur as-tu bien ton IP publique en retour ?

Re: Script lua : Notification changement IP Publique

Publié : 04 août 2019, 23:09
par romain1206
lmet a écrit : 02 août 2019, 01:51 Bonsoir,
Merci pour ton retour et désolé que cela ne fonctionne pas.
En tapant : http://whatismyip.akamai.com/ dans ton navigateur as-tu bien ton IP publique en retour ?
effectivement, la page ne fonctionnait pas, mon DNS bloquait le domaine, apres ajout en whitelist l'ip s'affiche bien

Re: Script lua : Notification changement IP Publique

Publié : 05 août 2019, 02:23
par lmet
Salut et merci pour ton retour :)

Re: Script lua : Notification changement IP Publique

Publié : 05 août 2019, 11:17
par higgins91
merci pour ce script. Je l'ai allégé de télégram et de OVH. J'ai fais un envoi par email plutôt !
Le mail contient les liens pour se connecter directement à Domoticz, mes caméras IP et ma livebox. Plus besoin de les refaire manuellement!
J'ai aussi un text sur mon dashboard avec l'IP.

Code : Tout sélectionner

local uservar           = "IP_WAN"                                  -- Indiquer le nom de la variable utilisateur /!\ ne pas laisser vide
local mrequest          = 15                                        -- Délai entre deux requètes => 15 mn par défaut
local cmd               = "curl -s http://whatismyip.akamai.com/"   -- Adresse requête IP publique
local lien_domotique    = "http://"                                 -- adresse domotique
local lien_portillon    = "http://"                                 -- adresse camera portillon
local lien_portail    = "http://"                                 -- adresse camera portail
local lien_jardin    = "http://"                                 -- adresse jardin
local lien_maison2    = "http://"                                 -- adresse maison2 
local lien_livebox    = "https://"                                 -- adresse livebox

function GetHTTPResult(cmd)
    local url = assert(io.popen(cmd)) 
    local blocjson = url:read('*all')
    url:close()
    wan_ip = blocjson
    return wan_ip
end

commandArray = {}

    -- Suivant le délai défini (quinze minutes par défaut) => Vérifier l'IP publique
    local m = os.date('%M') 
    if (m % mrequest == 0) then  
        wan_ip = GetHTTPResult(cmd)
        -- L'IP a changé!
        if wan_ip ~= uservariables[uservar] then
            -- renseigner la nouvelle IP
			print ("[WAN_IP] --- Changement de l'IP publique valeur : " .. wan_ip)
            commandArray["Variable:" .. uservar] = wan_ip
            ttidx = 154
            commandArray['UpdateDevice'] = ttidx..'|0|'..wan_ip
            -- on fait plusieur lignes pour la domotique, les caméras, la livebox:
            -- retour à la ligne = <BR>
            lien_domotique = lien_domotique .. wan_ip .. ":1234"
            lien_portillon = lien_portillon .. wan_ip .. ":1235"            
            lien_portail   = lien_portail   .. wan_ip .. ":1236"
            lien_jardin    = lien_jardin    .. wan_ip .. ":1237"
            lien_maison2   = lien_maison2   .. wan_ip .. ":1238"
            lien_livebox   = lien_livebox   .. wan_ip .. ":1239"

            commandArray['SendEmail']='Nouvelle IP#' .. wan_ip .. "<BR>" .. "Domotique:" .. "<BR>" .. lien_domotique .. "<BR>" .. "Livebox:" .. "<BR>" .. lien_livebox  .. "<BR>" .. "Camera portillion:" .. "<BR>" .. lien_portillon .. "<BR>" .. "Camera portail:" .. "<BR>" .. lien_portail .. "<BR>" .. "Camera jardin:" .. "<BR>" .. lien_jardin .. "<BR>" .. "Camera maison2:" .. "<BR>" .. lien_maison2  .. '#email@gmail.com'
        end
    end
    
return commandArray