--[[
name : myIP.lua
auteur : papoo
Mise à jour : 31/03/2020
Création : 23/01/2018 V1=> https://pon.fr/etre-notifie-de-son-changement-dip-publique-en-lua/
https://pon.fr/dzvents-notification-changement-dip
https://easydomoticz.com/forum/
github :
Principe : tester, via l'api du site myip.com votre adresse publique et être notifié de chaque changement.
possibilité de tester une IP en V4 ou V6, d'être notifié seulement par mail en renseignant la variable EmailTo avec une plusieurs adresses mails,
mais aussi avec toutes autres notifications paramétrées dans domoticz avec le choix de celles-ci (variable notification pour activer celles-ci, variable subsystem pour ne sélectionner qu'une ou plusieurs notifications parmi celles disponible
Le délai d"exécution est modifiable simplement (variable delai à renseigner en minutes) ainsi que l'activation/désactivation du fonctionnement de ce script (variable script_actif)
]]--
local emailTo = "mon.adresse@mail.com" -- nil si notification par mail non souhaitée
local notifications = true -- false si notidfications non souhaitées
local site_url = 'https://api.myip.com/' -- url
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName = 'myIP'
local scriptVersion = '2.00'
local response = 'myIP_response'
return {
active = true,
on = {
timer = { 'every 30 minutes' },--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#timer_trigger_rules
httpResponses = { response } -- Trigger
},
data = {
ip = { history = true, maxItems = 1 }
},
logging = {
level = domoticz.LOG_DEBUG, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_INFO, -- Only one level can be active; comment others
-- level = domoticz.LOG_ERROR,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = scriptName..' v'..scriptVersion },
execute = function(dz, item)
local SubSystem = "TELEGRAM,PUSHBULLET"
--[[ Systèmes de notification disponibles :
NSS_GOOGLE_CLOUD_MESSAGING NSS_HTTP NSS_KODI NSS_LOGITECH_MEDIASERVER NSS_NMA NSS_PROWL NSS_PUSHALOT NSS_PUSHBULLET NSS_PUSHOVER NSS_PUSHSAFER
Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l'ensemble par des {}.
Exemple :{dz.NSS_PUSHBULLET, dz.NSS_HTTP} si laissé vide, toutes les notifications dz seront activées
--]]
local function logWrite(str,level) -- Support function for shorthand debug log statements
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
function split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end
function notificationTable(str)
--NSS_GOOGLE_CLOUD_MESSAGING, NSS_HTTP, NSS_KODI, NSS_LOGITECH_MEDIASERVER, NSS_NMA,NSS_PROWL, NSS_PUSHALOT, NSS_PUSHBULLET, NSS_PUSHOVER, NSS_PUSHSAFER, NSS_TELEGRAM
if (str) then
str = string.gsub (str,"GCM", dz.NSS_GOOGLE_CLOUD_MESSAGING)
str = string.gsub (str,"HTTP", dz.NSS_HTTP)
str = string.gsub (str,"LMS", dz.NSS_LOGITECH_MEDIASERVER)
str = string.gsub (str,"NMA", dz.NSS_NMA)
str = string.gsub (str,"PROWL", dz.NSS_PROWL)
str = string.gsub (str,"PUSHALOT", dz.NSS_PUSHALOT)
str = string.gsub (str,"PUSHOVER", dz.NSS_PUSHOVER)
str = string.gsub (str,"PUSHSAFER", dz.NSS_PUSHSAFER)
str = string.gsub (str,"PUSHBULLET", dz.NSS_PUSHBULLET)
str = string.gsub (str,"TELEGRAM", dz.NSS_TELEGRAM)
end
return (split(str,','))
end
if (item.isTimer) then
dz.openURL({--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#Asynchronous_HTTP_requests
url = site_url,
callback = response
})
end
if (item.isHTTPResponse and item.ok) then
results = dz.utils.fromJSON(item.data)
newAddress = results.ip
country = results.country
cc = results.cc
logWrite('--- --- --- Adresse IP Publique : '..tostring(newAddress))
logWrite('--- --- --- pays : '..tostring(country))
logWrite('--- --- --- code pays format ISO 3166-1 alpha-2 : '..tostring(cc))
oldAddress = dz.data.ip.getLatest().data
if dz.data.ip.getLatest().time.daysAgo ~= 0 then
delay = tostring(dz.data.ip.getLatest().time.daysAgo) .. ' jours'
elseif dz.data.ip.getLatest().time.hoursAgo ~= 0 then
delay = tostring(dz.data.ip.getLatest().time.hoursAgo) .. ' heures'
else
delay = tostring(dz.data.ip.getLatest().time.minutesAgo).. ' minutes'
end
if oldAddress ~= newAddress then
logWrite('--- --- --- l\'adresse IP Publique a changé '..tostring(newAddress))
logWrite('--- --- --- l\'ancienne adresse étée '..tostring(oldAddress))
logWrite('--- --- --- Depuis '..tostring(delay))
if emailTo ~= nil then
dz.email(
'l\'adresse IP Publique a changé',
'la nouvelle adresse IP est :
'..
'http://'..newAddress..':8080
'..
'l\'ancienne adresse étée '..tostring(oldAddress)..'
'..
'Depuis '..tostring(delay)
, emailTo)
end
if notifications == true then
dz.notify("\xF0\x9F\x98\x81 l\'adresse IP Publique a changé \xF0\x9F\x98\x81", "la nouvelle adresse IP est : http://"..newAddress, dz.PRIORITY_NORMAL,dz.SOUND_DEFAULT, "" , notificationTable(SubSystem) )
end
dz.data.ip.add(newAddress)
else
logWrite('--- --- --- l\'adresse IP Publique n\'a pas changé '..tostring(newAddress))
end
end
--end
end
}