Adresse IP publique

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Adresse IP publique

Message par lost »

tekkharibo a écrit :Pourquoi ne pas utiliser ChangeIP

Perso j'ai un dns depuis 2 ans dessus et gratuitement compatible avec livebox
Sinon, sans service externe, pour les livebox actuelles après avoir installé curl on peut faire ainsi:

Code : Tout sélectionner

curl -s -X POST -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}' http://192.168.1.1/ws
Il n'y a même pas besoin de mettre son login admin, on récupère son IP externe (v4 et v6), état de connection etc... sous forme de json.

Pour des trucs plus chiadés, cf:
https://github.com/rene-d/sysbus
tekkharibo
Messages : 282
Inscription : 28 déc. 2017, 09:51
Localisation : Albi

Re: Adresse IP publique

Message par tekkharibo »

lost a écrit :
tekkharibo a écrit :Pourquoi ne pas utiliser ChangeIP

Perso j'ai un dns depuis 2 ans dessus et gratuitement compatible avec livebox
Sinon, sans service externe, pour les livebox actuelles après avoir installé curl on peut faire ainsi:

Code : Tout sélectionner

curl -s -X POST -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}' http://192.168.1.1/ws
Il n'y a même pas besoin de mettre son login admin, on récupère son IP externe (v4 et v6), état de connection etc... sous forme de json.

Pour des trucs plus chiadés, cf:
https://github.com/rene-d/sysbus
Je trouve que le problème de travailler directement avec l'adresse IP et que si on a pas de box pro, il faut changer son IP dans l'appli Domoticz ou autre client.

Par contre merci pour le github je vais regarder ça de mon coté
Projet de domotique low-cost : Mon installation MAJ 01/05/2020
Dans le doute reboot !
Si vous êtes pas loin d'Albi on peut se rencontrer pour partager
Jihem
Messages : 337
Inscription : 19 sept. 2014, 13:04
Localisation : Finistère Sud

Re: Adresse IP publique

Message par Jihem »

Bonjour à tous
Lost à écrit
Sinon, j'aimerais savoir comment le 1er demandeur a eu son domaine no-ip perdu: Chez eux, tant qu'on l'update régulièrement, il me semblait que le renouvellement était tacite
Chez no-ip le hostname doit être confirmé tous les mois
Please confirm your hostname now. Inactive hostnames are removed from our system if they are not confirmed every 30 day
je ne sais pas ce qu’ils entendent par "inactif" mais ma livebox change tous les 2 jours etr la nouvelle adresse est bien mise à jour chez No-ip.
6 jours plus tard on reçoit un mail
xxxx.ddns.net has expired
On peut encore pendant quelque jours récupérer son domaine, ensuite le nom est supprimé et mis en quarantaine pendant 30 jours. Ensuite il est théoriquement possible de le recréer.
les fêtes et une grosse grippe ont eu raison de ces délais, c'est pourquoi je cherchais une solution de récupération de l'adresse physique.

pour l'instant j'ai créer un fichier bash:

Code : Tout sélectionner

#!/bin/bash

IP=$(wget -q -O - http://checkip.dyndns.com | w3m -dump -T text/html)
#echo ${IP#*: }
     curl "http://IP-raspberry:8080/json.htm?type=command&param=udevice&idx=107&nvalue=0&svalue=${IP#*: }"
que j’exécute toutes les heures dans un cron et qui modifie un bouton texte.
Un script lua m’envoie un mail sur un compte crée pour domoticz quand l'adresse change

Code : Tout sélectionner

email= "domoticz.xxxxxx@gmail.com"
commandArray = {}
IP_old = uservariables['IP_old']           -- uservariable qui stock l'IP actuelle
IP = (otherdevices_svalues['IP'])          -- IP reçue sur le bouton texte "IP"
if devicechanged['IP'] and IP_old ~= IP    -- si l'IP change domoticz envoie un mail 
   then                                                                                  
        commandArray['Variable:IP_old'] = IP
        commandArray["SendEmail"]= "Domoticz#Livebox "..IP.."#"..email
end
return commandArray
Pour l'instant cela marche bien; avec le mail, je ne suis pas harcelé de notifications quand l'adresse change et je peux récuperer l'adresse de la livebox en cas de pépin. Reste le problème du recours à un site externe qui peut cesser de fonctionner.
j'ai essayé

Code : Tout sélectionner

curl -s -X POST -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}' http://192.168.1.1/ws
mais je n'ai aucun résultat; peut être parce qu’il s'agit d'une livebox assez ancienne.
Encore merci de toutes vos réponses
Hard:Raspberry Pi4 + SSD Arduino Tablette murale Archos
Soft: Domoticz WireGuard vpn Homebridge Tradfri Ikea
Devices:[/colore]Rfxtrx433 DI-O Chacon Sonoff touch Anémomètre, pluviometre, sondes Orégon, capteurs humidité Miflora, téléinfo
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Adresse IP publique

Message par lost »

Jihem a écrit : Chez no-ip le hostname doit être confirmé tous les mois

(...)

Reste le problème du recours à un site externe qui peut cesser de fonctionner.
j'ai essayé

Code : Tout sélectionner

curl -s -X POST -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}' http://192.168.1.1/ws
mais je n'ai aucun résultat; peut être parce qu’il s'agit d'une livebox assez ancienne.
En effet, après vérification (de mémoire, je pensais à no-ip car c'est une des solutions que j'avais envisagé après le changement de conditions d'utilisation, similaire, de dyndns il y a qq années), je suis en fait chez change-IP a qui les demandes d'update régulières suffisent fort logiquement à indiquer que le domaine est bien utilisé... Comme dyndns avant que je me fasses avoir.

Ceci dit, je pense mettre en place un système comme le tiens... potentiellement utile en cas de pb temporaire avec change-ip ou s'ils venaient eux aussi à "stupidifier" leurs conditions d'utilisation actuelles!

Pour le 2nd point, sur la page github précédente ils donnaient ceci pour les anciennes LB (sans le pipe au parser json pas installé chez moi):

Code : Tout sélectionner

$ curl -s -X POST -H "Content-Type: application/json" -d '{"parameters":{}}' http://192.168.1.1/sysbus/NMC:getWANStatus
Ce qui fonctionne d'ailleurs aussi sur ma LB play (la noire), au même titre que la commandé précédente... enfin presque: On a l"IPv4, mais pas l'IPv6 (si activé, ce qui est le cas chez moi). Ni le préfixe IPv6 utilisé déterminant le sous réseau qui t'es alloué (car en IPv6, plus de NAT: chaque machine a une IP externe individuelle).
Probable que les anciennes LB ne supportaient pas IPv6 et que ce soit sans objet dans ton cas.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Adresse IP publique

Message par papoo »

si cela peut aider quelqu’un j'ai moi aussi commis un petit script pour cet usage, utilisant l'api de myip.com

Code : Tout sélectionner

--[[
name : script_time_my_ip_com.lua
auteur : papoo
date de création : 23/01/2018
Date de mise à jour : 22/01/2018
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)
http://pon.fr/etre-notifie-de-son-changement-d-ip-publique-en-lua/
https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_my_ip_com.lua
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = false  			        -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true                   -- active (true) ou désactive (false) ce script simplement
local delai = 30                            -- délai d'exécution de ce script en minutes de 1 à 59 (délai entre deux appels à l'API)
local url_my_ip = "https://api.myip.com/"   -- Adresse de l'API permettant de connaitre l'IP publique
local var_my_ip = "IP Publique"             -- nom de la variable contenant l'IP publique
local type_ip = "v4"                        -- v4 pour les adresses en IPV4, v6 pour les adresses en IPV6
local domoticzURL = "127.0.0.1:8080"
local EmailTo = 'votre@mail.com'   -- adresses mail, séparées par ; si plusieurs (pour la notification par mail) nil si inutilisé
local notification = true                   -- true si l'on  souhaite être notifié  via le système de notification domoticz, sinon false.
local subsystem = "pushbullet"              -- les différentes valeurs de subsystem acceptées sont : gcm;http;kodi;lms;nma;prowl;pushalot;pushbullet;pushover;pushsafer
                                            -- pour plusieurs modes de notification séparez chaque mode par un point virgule (exemple : "pushalot;pushbullet"). si subsystem = nil toutes les notifications seront activées.
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
------------- Autres Variables -------------
--------------------------------------------
local nom_script = 'Mon IP Publique'
local version = '0.2'
local ipv
local objet
local message
--------------------------------------------
----------- Fin Autres Variables -----------
--------------------------------------------	
--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	
-------------------------------------------- 
	-- chemin vers le dossier lua
	if (package.config:sub(1,1) == '/') then
		 luaDir = debug.getinfo(1).source:match("@?(.*/)")
	else
		 luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
	end
	 curl = '/usr/bin/curl -m 5 -u domoticzUSER:domoticzPSWD '		 	-- ne pas oublier l'espace à la fin
	 json = assert(loadfile(luaDir..'JSON.lua'))()						-- chargement du fichier JSON.lua
--------------------------------------------
function creaVar(vname,vvalue,vtype) -- pour créer une variable nommée toto comprenant la valeur 10, de type 2
    if vtype ~= nil then
        os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=command&param=saveuservariable&vname='..url_encode(vname)..'&vtype='..vtype..'&vvalue='..url_encode(vvalue)..'" &')
    else
        os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=command&param=saveuservariable&vname='..url_encode(vname)..'&vtype=2&vvalue='..url_encode(vvalue)..'" &')
    end
end -- usage :  creaVar('toto','10','2') ou creaVar('toto','10')
--------------------------------------------
function url_encode(str) -- encode la chaine str pour la passer dans une url 
   if (str) then
   str = string.gsub (str, "\n", "\r\n")
   str = string.gsub (str, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
   end
   return str
end 
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time = os.date("*t")

if script_actif == true then
    if ((time.min-1) % delai) == 0 then -- toutes les xx minutes en commençant par xx:01    
        voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)

        --=========== Lecture json ===============--
        if type_ip == "v6" then ipv = 6 else ipv = 4 end
        -- local config = assert(io.popen(curl..'-6 "'.. url_my_ip ..'"'))
        -- else 
        local config = assert(io.popen(curl..'-'..ipv..' "'.. url_my_ip ..'"')) 
        --end
        local blocjson = config:read('*all')
        config:close()
        local jsonValeur = json:decode(blocjson)

        local adresse = jsonValeur.ip
        local country = jsonValeur.country
        local cc = jsonValeur.cc

        voir_les_logs('--- --- --- Adresse IP Publique : '..adresse,debugging)
        voir_les_logs('--- --- --- pays : '..country,debugging)
        voir_les_logs('--- --- --- code pays format ISO 3166-1 alpha-2 : '..cc,debugging)
        --=========== Variable  ===============--
        if var_my_ip ~= nil and var_my_ip ~= "" then -- le nom de la variable utilisateur a-t-il été renseigné ?
            if(uservariables[var_my_ip] == nil) then -- Création de la variable  car elle n'existe pas
                voir_les_logs("--- --- --- La Variable " .. var_my_ip .." n'existe pas --- --- --- ",debugging)
                voir_les_logs("--- --- --- adresse " .. adresse .."  --- --- --- ",debugging);
                voir_les_logs("--- --- --- Création de la Variable " .. var_my_ip .." manquante --- --- --- ",debugging)
                creaVar(var_my_ip, 'adresse inconnue',2)
                print('script supendu')
            else
                voir_les_logs("--- --- --- La Variable " .. var_my_ip .." est à : ".. uservariables[var_my_ip],debugging)
            end
        --=========== Vérification  ===============--            
            if(uservariables[var_my_ip] == adresse ) then
                voir_les_logs("--- --- --- adresse " .. adresse .."  --- --- --- ",debugging);                
            else 
                commandArray['Variable:'.. var_my_ip] = tostring(adresse) -- mise à jour de la variable utilisateur
                if EmailTo ~= nil then
                    message = 'L\'adresse IP est maintenant : '..adresse
                    voir_les_logs("--- --- --- Notification par mail activée",debugging)            
                    objet = 'Changement de l\'adresse IP  à '..os.date("%H:%M")
                    voir_les_logs("--- --- --- Objet:"..objet,debugging)
                    voir_les_logs("--- --- --- Corps du message: "..message,debugging)
                    voir_les_logs("--- --- --- Destinataire: "..EmailTo,debugging)
                    commandArray['SendEmail']= objet..'#'.. message  .. '#' .. EmailTo
                else
                    voir_les_logs("--- --- --- Notification par mail désactivée",debugging)  
                end -- if notif_mail
                
                if notification ~= nil then -- notifications système
                    if subsystem ~= nil then
                        voir_les_logs("--- --- --- Notification système activée pour les services "..subsystem,debugging)
                        commandArray[#commandArray+1] = {['SendNotification'] = 'Attention# L\'adresse IP vient de changer. La nouvelle adresse est maintenant : '..adresse ..'#0###'.. subsystem ..''}
                    else
                        voir_les_logs("--- --- --- toutes les Notifications système sont activées",debugging)
                        commandArray[#commandArray+1] = {['SendNotification'] = 'Attention# L\'adresse IP vient de changer. La nouvelle adresse est maintenant : '..adresse}
                    end
                end
                
            end
        else
            voir_les_logs("--- --- --- La Variable  var_my_ip n\'a pas été renseignée, impossible de surveiller le changement",debugging)        
        end
    -- ====================================================================================================================	

    voir_les_logs("======== Fin ".. nom_script .." (v".. version ..") ==========",debugging)        
    end        
end -- if script_actif
return commandArray
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Jihem
Messages : 337
Inscription : 19 sept. 2014, 13:04
Localisation : Finistère Sud

Re: Adresse IP publique

Message par Jihem »

bonjour
Merci Papoo pour ton script très complet, mais il fait toujours appel à une API externe et mon but est de rester indépendant. Bien que ce soit complètement de ma faute, j'ai réussi à perdre le lien avec no-ip qui me reliait à ma boxe.

@lost
en fait, les commandes

Code : Tout sélectionner

curl -s -X POST -H "Content-Type: application/json" -d '{"parameters":{}}' http://192.168.1.1/sysbus/NMC:getWANStatus
ne peuvent pas marcher pas car je ne suis pas sur le réseau de la boxe et ayant perdu mon domaine No-ip, je ne peut plus me connecter par l’intermédiaire de mon VPN.
Je réglerai tout ça quand je serai sur place.
Merci à tous et bon dimanche
Hard:Raspberry Pi4 + SSD Arduino Tablette murale Archos
Soft: Domoticz WireGuard vpn Homebridge Tradfri Ikea
Devices:[/colore]Rfxtrx433 DI-O Chacon Sonoff touch Anémomètre, pluviometre, sondes Orégon, capteurs humidité Miflora, téléinfo
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Adresse IP publique

Message par vil1driver »

Juste pour info

http://www.domoticz.com/forum/viewtopic ... 60f2bf4951

Bon c'est toujours via un site externe par contre
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Vercing
Messages : 9
Inscription : 11 mai 2017, 09:23

Re: Adresse IP publique

Message par Vercing »

Bonjour,

Je souhaiterais rajouter ma pierre à l'édifice et j'essaie de créer un nouveau plugin python à partir du "Wan IP Checker" indiqué ci-dessus qui mettrait automatiquement à jour mon dynhost chez ovh.

Je suis parti du script en python trouvé à cette adresse :
https://github.com/janhenke/ovh-dynhost ... dynhost.py

pour finir avec le code suivant :

Code : Tout sélectionner

# WAN IP Checker
#
# Author: ycahome, 2017
#
#  version 1.2.0 (2018-02-01): Bug Fixes, error handling and timeout on urlopen
#          1.2.2             : Added check for http:// or https:// on the "Check My IP URL" field.
#                            : Added notification check on Debug mode every 5 minutes
#                            : Bug Fixes
#
"""
<plugin key="WAN-IP-OVH" name="Wan IP OVH" author="ycahome + Vercing	" version="1.0.0" externallink="https://easydomoticz.com/forum/posting.php?mode=reply&f=8&t=5732">
    <params>
        <param field="Address" label="Check My IP URL" width="200px" required="true" default="https://4.ifcfg.me/ip"/>
        <param field="Mode1" label="Check Interval(seconds)" width="75px" required="true" default="60"/>
        <param field="Mode3" label="Notifications" width="75px">
            <options>
                <option label="Notify" value="Notify"/>
                <option label="Disable" value="Disable"  default="true" />
            </options>
        </param>
		<param field="Mode5" label="MàJ OVH" width="75px">
            <options>
                <option label="misajour" value="misajour"/>
                <option label="Disable" value="Disable"  default="true" />
            </options>
        </param>
         <param field="Mode6" label="Debug" width="75px">
            <options>
                <option label="True" value="Debug"/>
                <option label="False" value="Normal"  default="true" />
            </options>
        </param>
    </params>
</plugin>
"""

import Domoticz
import hmac
import hashlib
import time
import urllib
import urllib.request
import urllib.error
import requests

#from urllib2 import urlopen
from datetime import datetime, timedelta


class BasePlugin:
    enabled = False
    pluginState = "Not Ready"
    sessionCookie = ""
    privateKey = b""
    socketOn = "FALSE"

    def __init__(self):
        self.debug = False
        self.error = False
        self.nextpoll = datetime.now()
        self.pollinterval = 60  #Time in seconds between two polls
        return

    def onStart(self):

        Domoticz.Debug("onStart called")
        self.pollinterval = int(Parameters["Mode1"])  #Time in seconds between two polls

        if Parameters["Mode6"] == 'Debug':
            self.debug = True
            Domoticz.Debugging(1)
            DumpConfigToLog()
        else:
            Domoticz.Debugging(0)


        #if 'wanipaddress' not in Images: Domoticz.Image('wanipaddress.zip').Create()

        #Domoticz.Debug("Number of icons loaded = " + str(len(Images)))
        #for image in Images:
        #    Domoticz.Debug("Icon " + str(Images[image].ID) + " " + Images[image].Name)


        # create the mandatory child device if it does not yet exist
        if 1 not in Devices:
            Domoticz.Device(Name="WAN IP 1", Unit=1, TypeName="Text").Create()
            Domoticz.Log("Device created.")
        DumpConfigToLog()
        Domoticz.Heartbeat(int(Parameters["Mode1"]))


    def onStop(self):
        Domoticz.Log("Plugin is stopping.")
        Domoticz.Debugging(0)

    def onHeartbeat(self):

        Domoticz.Debug("onHeartbeat called")


        url = Parameters["Address"]

        if mid(url,0,7)!= "http://" and mid(url,0,8)!= "https://"  :
         Domoticz.Error("Check my IP URL Prefix is wrong: 'http://' or 'https://' required.")
         return

        try:
          response = urllib.request.urlopen(url, timeout = 30).read()
        except urllib.error.URLError as err0:
          Domoticz.Error("URL Request error: " + str(err0) + " URL: " + url)
          response =  ""
        except urllib.error.HTTPError as err01:
          Domoticz.Error("HTTP Request error: " + str(err01) + " URL: " + url)
          response =  ""
        else:
          WANip = str(response,'utf-8')
          WANip = WANip.strip(' \t\n\r')

          if WANip != "" and len(WANip)<16:
            Domoticz.Debug("IP Discovery Site's response len is:"+ str(len(WANip)))
            Domoticz.Debug("WAN IP retrieved:" + WANip)
            CurWANip = Devices[1].sValue
            CurWANip = CurWANip.strip(' \t\n\r')
            Domoticz.Debug("Previous WAN IP:" + CurWANip)

            CurMin = str(datetime.now().minute)
            if len(CurMin) == 1: CurMin = "0" + CurMin

            if Parameters["Mode6"] == 'Debug' and (mid(CurMin,1,1) == "3" or  mid(CurMin,1,1) == "5" or  mid(CurMin,1,1) == "0"):
              Domoticz.Error("Debug is on. Trigering IP Change:")
              CurWANip = "0.0.0.0"

            if  CurWANip != WANip:
              Domoticz.Log("WAN IP Updated to:" + WANip)
              Devices[1].Update(1,WANip)
              if Parameters["Mode3"] == 'Notify':
                Domoticz.Log("Running WAN IP Notifications")
                Domoticz.Debug("WAN IP retrieved:" + WANip)

                ServerURL = "http://127.0.0.1:8080/json.htm?param=sendnotification&type=command"
                Domoticz.Debug("ConstructedURL ServerURL is:" + ServerURL)

                MailDetailsURL = "&subject=WAN-IP-Changed&body=" + WANip


                notificationURL = ServerURL + MailDetailsURL
                Domoticz.Debug("ConstructedURL is:" + notificationURL)
                try:
                  response = urllib.request.urlopen(notificationURL, timeout = 30).read()
                except urllib.error.HTTPError as err1:
                  Domoticz.Error("HTTP Request error: " + str(err1) + " URL: " + notificationURL)
                return
                Domoticz.Debug("Notification URL is :" + str(notificationURL))
			  if Parameters["Mode5"] == 'misajour':
                Domoticz.Log("MaJ OVH")
                Domoticz.Debug("Maj OVH:" + WANip)
				queryArguments = {'system':'dyndns', 'hostname':'DYNHOST', 'myip':WANip}
				requests.get("https://www.ovh.com/nic/update", params=queryArguments, auth=('IDENTIFIANT','PASSWORD'))

            else:
              Domoticz.Log("WAN IP the same. Skipping")

            #Devices[1].Update(1,WANip, Images["wanipaddress"].ID)
          else:
            Domoticz.Error("IP Discovery Site's response not valid")





global _plugin
_plugin = BasePlugin()

def onStart():
    global _plugin
    _plugin.onStart()

def onStop():
    global _plugin
    _plugin.onStop()

def onHeartbeat():
    global _plugin
    _plugin.onHeartbeat()


# Generic helper functions
def DumpConfigToLog():
    for x in Parameters:
        if Parameters[x] != "":
            Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
    Domoticz.Debug("Device count: " + str(len(Devices)))
    for x in Devices:
        Domoticz.Debug("Device:           " + str(x) + " - " + str(Devices[x]))
        Domoticz.Debug("Device ID:       '" + str(Devices[x].ID) + "'")
        Domoticz.Debug("Device Name:     '" + Devices[x].Name + "'")
        Domoticz.Debug("Device nValue:    " + str(Devices[x].nValue))
        Domoticz.Debug("Device sValue:   '" + Devices[x].sValue + "'")
    return


#
# Parse an int and return None if no int is given
#

def parseIntValue(s):

        try:
            return int(s)
        except:
            return None


def mid(s, offset, amount):
    return s[offset:offset+amount]


J'ai rajouté un paramètre (mode 5) pour la mise à jour (ou non) du dynhost
=> à personnaliser : DYNHOST IDENTIFIANT & PASSWORD (lignes 157 et 158)

et comme je débute... forcément ça ne fonctionne pas ...

MàJ : Voici les messages d'erreur dans le LOG :
2018-02-07 10:04:01.937 Error: (WAN-IP-OVH) failed to load 'plugin.py', Python Path used was '/home/pi/domoticz/plugins/Wan-IP OVH/:/usr/lib/python3.4/:/usr/lib/python3.4/plat-arm-linux-gnueabihf:/usr/lib/python3.4/lib-dynload'.
2018-02-07 10:04:01.937 Error: (OVH-Dynhost) Module Import failed, exception: 'TabError'
2018-02-07 10:04:01.938 Error: (OVH-Dynhost) Import detail: File: /home/pi/domoticz/plugins/Wan-IP-OVH/plugin.py, Line: -1518834720, offset: 159
2018-02-07 10:04:01.938 Error: (OVH-Dynhost) Error Line ' if Parameters["Mode5"] == 'misajour':
Vu ma connaissance du python, le contraire aurait été trés étonnant...

Donc si une âme très charitable pouvait jeter son œil à ce code.... je lui en serait très reconnaissant...

Bien cordialement,

Cyril
QcVictor
Messages : 79
Inscription : 17 janv. 2015, 14:52

Re: Adresse IP publique

Message par QcVictor »

papoo a écrit :si cela peut aider quelqu’un j'ai moi aussi commis un petit script pour cet usage, utilisant l'api de myip.com

Code : Tout sélectionner

2018-02-07 17:16:00.428 Error: EventSystem: in script_time_my_ip_com: [string "--[[..."]:62: cannot open --[[
name : script_time_my_ip_com.lua
auteur : papoo
date de création : 23/01/2018
Date de mise à jour : 22/01/2018
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)
http://pon.fr/etre-notifie-de-son-changement-dip-publique-en-lua/
https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_my_ip_com.lua
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------

local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true -- active (true) ou désactive (false) ce script simplement
local delai = 30 -- délai d'exécution de ce script en minutes de 1 à 59 (délai entre deux appels à l'API)
local url_my_ip = "https://api.myip.com/" -- Adresse de l'API permettant de connaitre l'IP publique
local var_my_ip = "IP Publique" -- nom de la variable contenant l'IP publique
local type_ip = "v4" -- v4 pour les adresses en IPV4, v6 pour les adresses en IPV6
local domoticzURL = "127.0.0.1:8080"
local EmailTo = nil -- adresses mail, séparées par ; si plusieurs (pour la notification par mail) nil si inutilisé
local notification = true -- true si l'on souhaite être notifié via le système de notification domoticz, sinon false.
local subsystem = nil -- les différentes valeurs de subsystem acceptées sont : gcm;http;kodi;lms;nma;prowl;pushalot;pushbullet;pushover;pushsafer
-- pour plusieurs modes de notification séparez chaque mode par un point virgule. si subsystem = nil toutes les notifications seront activées.
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
------------- Autres Variables -------------
--------------------------------------------
local nom_script = 'Mon IP Publique'
local version = '0.2'
local ipv
local objet
local message
--------------------------------------------
----------- Fin Autres Variables -----------
--------------------------------------------
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging)
if (debugging) then
if s ~= nil then
print ("".. s .."")
else
print ("aucune valeur affichable")
end
end
end
--------------------------------------------
-- chemin vers le dossier lua
if (package.config:sub(1,1) == '/') then
luaDir = debug.getinfo(1).source:match("@?(.*/)")
else
luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
end
curl = '/usr/bin/curl -m 5 -u domoticzUSER:domoticzPSWD ' -- ne pas oublier l'espace à la fin
json = assert(loadfile(luaDir..'JSON.lua'))() -- chargement du fichier JSON.lua
--------------------------------------------
function creaVar(vname,vvalue,vtype) -- pour créer une variable nommée toto comprenant la valeur 10, de type 2
if vtype ~= nil then
os.execute(curl..'"'.. domoticzURL ..'/json.htm?type=command¶m=saveuservariable&vname='..url_encode(vname)..'&vtype='..vtype..'&vvalue='..url_encode(vvalue)..'" &')
else
os.execute(curl..'"'.. domoticzURL ..'/JSON.lua: File name too long
Ça coince pour moi !
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Adresse IP publique

Message par papoo »

@QcVictor
Que disent tes logs ? Il y a t’il une erreur à l’exécution du script ?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre