[LUA] Notification changement IP Publique

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

[LUA] Notification changement IP Publique

Message 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.
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
romain1206
Messages : 54
Inscription : 30 janv. 2019, 21:30

Re: Script lua : Notification changement IP Publique

Message 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
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Script lua : Notification changement IP Publique

Message 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 ?
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
romain1206
Messages : 54
Inscription : 30 janv. 2019, 21:30

Re: Script lua : Notification changement IP Publique

Message 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
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Script lua : Notification changement IP Publique

Message par lmet »

Salut et merci pour ton retour :)
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

Re: Script lua : Notification changement IP Publique

Message 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
Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
Répondre