Page 16 sur 28

Re: [DzVents] LiveBox 3 et 4

Publié : 09 mai 2019, 19:24
par Neutrino
Le script fait déjà plus de 500 lignes.
Ce serait beaucoup trop lourd à maintenir et à faire tourner.
"Diviser pour mieux régner."

Re: [DzVents] LiveBox 3 et 4

Publié : 09 mai 2019, 22:06
par papoo
les informations ne proviennent pas du même appareil. elles proviennent de requêtes différentes. et comme le dit neutrino, le script livebox est suffisamment complexe pour ne pas le surcharger avec les infos du script liveboxTV.

Re: [DzVents] LiveBox 3 et 4

Publié : 10 mai 2019, 09:51
par vrolland
Ok ;)

Re: [DzVents] LiveBox 3 et 4

Publié : 02 mai 2020, 16:45
par gritche2
Bonjour,

je débute sur domoticz et je n'arrive pas à comprendre le soucis que j'ai.
Tout d'abord mon domoticz est installé sur une VM de mon nas et non sur un raspberry (j'ai changé en conséquence les répertoires pour le json et les cookies).

Après avoir eu des soucis de connexion (mot de passe changé) je n'arrive toujours pas àfaire fonctionner.
Le script s'execute mais si termine avec

Code : Tout sélectionner

dzVents: Info: Livebox 1.15: mac : A4:xx:xx:xx:xx:xx introuvable
J'ai donc supprimé de la liste des MAC adresse à surveiller tous les équimements.
Il accède bien car dans les traces je vois des éléments de mon réseau, des info qu'il a de la box (mes wifi, un élément connecté sur ma box)...

J'ai fait un test en ne gardant que wifi 2.4 et même résultat.
Il s'arrête sur mon wifi 5G et la fin du log semble tronquée :

Code : Tout sélectionner

"Actions":[{"Function":"startEventing","Name":"startEventing","Arguments":[{"Name":"name","Type":"string","Mandatory":true},{"Name":"types","Type":"string","Mandatory":false}]},{"Function":"stopEventing","Name":"stopEventing","Arguments":[{"Name":"name","Type":"string","Mandatory
2020-05-02 16:37:00.692 Status: dzVents: Info: Livebox 1.15: mac : A4:xx:xx:xx:xx:xx introuvable
2020-05-02 16:37:00.692 Status: dzVents: Info: Livebox 1.15: mac : 3C:xx:xx:xx:xx:xx introuvable
A noter que j'ai bien créé les capteurs virtuels.
Le problème est difficile à diagnostiquer car les log sont tronqués.

Auriez vous une idée ?

Par avance merci pour votre aide.

Re: [DzVents] LiveBox 3 et 4

Publié : 08 mai 2020, 13:57
par hestia
Merci pour ce script
mon besoin est assez basique, je voudrais surtout connaître l'information correspondant à l'état du voyant, en général "la Livebox est connectée à Internet" mais parfois (rarement) autre chose!

Est-ce possible avec ce script?

J'ai fait le paramétrage suivant, mais pas sûr que les données qui remontent correspondent à une équivalence de mon besoin (savoir comment la Livebox voit la connexion internet).
J'ai la fibre, donc je pense que les données "ATM" ne sont pas disponibles. Pas de données spécifiques pour la fibre?

Code : Tout sélectionner

-- Variables à modifier ------------------------------------------------
local adresseLB         = '192.168.1.1' --Adresse IP de votre Livebox 4
local password          = "dkjé"'"445G"
local tmpDir            = "/var/tmp" --répertoire temporaire, dans l'idéal en RAM
local myOutput          = tmpDir.."/Output.txt"
local myCookies         = tmpDir.."/Cookies.txt"
local fichier_contacts  = "/home/pi/domoticz/scripts/contacts.json"
local liveBox3          = true --true si vous avez une liveBox3/play

-- Domoticz devices

local IPWAN             = 1115 --"Livebox" -- Nom du capteur Text IP WAN, nil si non utilisé
local IPv6WAN           = nil --"IPv6 WAN" -- Nom du capteur Text IPv6 WAN, nil si non utilisé
local UptimeLB          = 1117 --"Uptime Livebox"  -- Nom du capteur Text Uptime Livebox, nil si non utilisé
local internet          = nil --"Internet"  -- Nom du capteur Interrupteur Internet, nil si non utilisé
local VoIP              = nil --"VoIP"  -- Nom du capteur Interrupteur VoIP, nil si non utilisé
local ServiceTV         = nil --"Service TV"  -- Nom du capteur Interrupteur Service TV, nil si non utilisé
local wifi24            = nil --"WiFi 2.4"  -- Nom du capteur Interrupteur wifi 2.4Ghz, nil si non utilisé
local wifi5             = nil --"WiFi 5"  -- Nom du capteur Interrupteur wifi 5Ghz, nil si non utilisé
local firmware          = nil --"Firmware LB" -- Nom du capteur Text Firmware LB, nil si non utilisé
local DernierAppel      = nil --"Dernier Appel" -- Nom du capteur Text Dernier Appel, nil si non utilisé
local missedCall        = nil -- "Appels manqués" -- Nom du capteur Text appels manqués, nil si non utilisé
local nbMissedCall      = 4 -- Nombre d'appels manqués à afficher
local failedCall        = nil -- "Appels sans réponse" -- nil -- Nom du capteur Text appels sans réponse, nil si non utilisé
local nbFailedCall      = 4 -- Nombre d'appels sans réponse à afficher
local succeededCall     = nil -- "Appels réussis" -- Nom du capteur Text appels réussis, nil si non utilisé
local nbSucceededCall   = 4 -- Nombre d'appels réussis à afficher
local clearCallList     = nil -- "Effacer liste appels" -- Nom du capteur Interrupteur PushOn clearCallList
local reboot            = 1116 -- Nom du capteur Interrupteur PushOn reboot
local sonner            = nil -- "Sonner" -- Nom du capteur Interrupteur PushOn faire sonner tel
local notifyMissedCall  = false

local devices_livebox_mac_adress = { -- MAC ADDRESS des périphériques à surveiller
                                     --   "18:A6:43:4B:C9:D8",
                                    }


-- Capteurs pour connexion xDSL seulement
local SyncATM = nil -- Nom du capteur custom Synchro ATM down, nil si non utilisé
local SyncATMup = nil -- Nom du capteur custom Synchro ATM up, nil si non utilisé
local Attn = nil -- Nom du capteur custom Attenuation de la ligne, nil si non utilisé
local MargedAttn = nil -- Nom du capteur custom Marge d'atténuation, nil si non utilisé
-- Livebox 4 seulement
local TransmitBlocks = nil  -- Nom du capteur Incremental Counter TransmitBlocks, nil si non utilisé
local ReceiveBlocks = nil  -- Nom du capteur Incremental Counter ReceiveBlocks, nil si non utilisé
local fetchIntervalMins = 1 --  intervalle de mise à jour.

Re: [DzVents] LiveBox 3 et 4

Publié : 08 mai 2020, 15:23
par Neutrino
Normalement, la ligne

Code : Tout sélectionner

local internet          = nil --"Internet"  -- Nom du capteur Interrupteur Internet, nil si non utilisé
permet de remonter l'info si ta connexion active ou pas.
Et non, j'ai pas trouvé de données spécifiques pour la fibre.

Re: [DzVents] LiveBox 3 et 4

Publié : 08 mai 2020, 17:04
par hestia
Merci!
comme c'était noté "Interrupteur", je n 'avais pas compris qu'il s'agissait d'un état...

Par contre l'Interrupteur PushOn reboot n'a pas l'air de beaucoup secouer ma box...
ça fait:
Info: Livebox 1.15: ------ Start internal script: Livebox: Device: "Redémarrage Livebox (Dummy1)", Index: 1116
Debug: Livebox 1.15: Context : hAiTGdFmVQngacfp5gvXahHpMPgJ2YiP+GuV54PlCW9hMa5rXD8AWtz6t+KfML0B
Info: Livebox 1.15: ------ Finished Livebox

et la Livebox est toujours up !?

Re: [DzVents] LiveBox 3 et 4

Publié : 08 mai 2020, 18:41
par Neutrino
ça fait très longtemps que j'ai pas touché à ce bouton :mrgreen:
Trouve la ligne (vers 510)

Code : Tout sélectionner

myContextID.."\" -d \"{\\\"parameters\\\":{}}\" http://"..adresseLB.."/sysbus/NMC:reboot")
et remplace

Code : Tout sélectionner

reboot
par

Code : Tout sélectionner

Reboot

Re: [DzVents] LiveBox 3 et 4

Publié : 09 mai 2020, 00:16
par hestia
Merci!
je comprends... je mets des "idx" en général au lieu de "name" dans mes (rares) scripts, car je change souvent les noms...
J'avais mis un idx pour reboot et les autres et donc il n'était pas trouvé pour déclencher l'action, et pas de message d'erreur.
Je propose une petite modif pour avoir le choix name ou idx et un message d'erreur au cas où on ne trouve pas le device (je n'ai pas testé tous les capteurs...)

Code : Tout sélectionner

--[[
    Prérequis :
    Domoticz v3.8837 or later (dzVents version 2.4 or later)

    Sources :     https://www.alex-braga.fr/ressources_externe/xdslbox_3.4.10.sh
    https://alex-braga.fr/blog/post/Monitoring-de-la-Livebox-4-avec-Cacti
    
                https://github.com/rene-d/sysbus
                https://github.com/NextDom/plugin-livebox/

    Livebox 3/4 stats

                https://easydomoticz.com/forum/viewtopic.php?f=17&t=7247
                https://github.com/papo-o/domoticz_scripts/new/master/dzVents/scripts/livebox.lua
                https://pon.fr/dzvents-toutes-les-infos-de-la-livebox-en-un-seul-script/

-- Authors  ----------------------------------------------------------------
    V1.0 -  Neutrino -     Domoticz
    V1.1 -  Neutrino -     Activation/désactivation du WiFi
    V1.2 -  papoo -        Liste des n derniers appels manqués, sans réponse, réussis et surveillance périphériques des connectés/déconnectés
    V1.3 -  Neutrino -     Possibilité de purger le journal d'appels
    V1.4 -  papoo -        Possibilité de rebooter la Livebox
    V1.5 -  papoo -        Correction non mise à jour des devices après RAZ de la liste des appels
    V1.6 -  papoo -        Correction horodatage heures d'appel à GMT+2
    V1.7 -  papoo -        Affichage des noms connus via fichiers de contacts
    V1.8 -  Neutrino -     Support de la Livebox 3 Play, gestion heures d'été/heure d'hiver
    V1.9 -  Neutrino -     Prise en charge du Wifi 5 GHz de la Livebox 3
    V1.10 - Neutrino -     Gestion fichier contacts inexistant, gestion périphériques différentes, version du firmware, correction de bugs,
                           Optimisation du nombre de requêtes
    V1.11 - Neutrino       Uptime de la box et non de la connexion dsl
    V1.12 - JCLB           Faire sonner le téléphone
    V1.13 - Neutrino       Correction de bugs
    V1.14 - papoo          Notification appel manqué
    V1.15 - papoo          Correction de bugs
    V1.16 - hestia         Domoticz devices identification possible par idx or nom (item == domoticz.devices(<idx> ou <name>))
                            + robustesse sur le trigger si le device n'est pas trouvé 
]]--
-- Variables à modifier ------------------------------------------------
local adresseLB         = '192.168.1.1' --Adresse IP de votre Livebox 4
local password          = "4>gxjWz8"
local tmpDir            = "/var/tmp" --répertoire temporaire, dans l'idéal en RAM
local myOutput          = tmpDir.."/Output.txt"
local myCookies         = tmpDir.."/Cookies.txt"
local fichier_contacts  = "/home/pi/domoticz/scripts/contacts.json"
local liveBox3          = false --true si vous avez une liveBox3/play

-- Domoticz devices

local IPWAN             = 1115 --"Livebox" -- Nom du capteur Text IP WAN, nil si non utilisé
local IPv6WAN           = nil --"IPv6 WAN" -- Nom du capteur Text IPv6 WAN, nil si non utilisé
local UptimeLB          = 1117 --"Uptime Livebox"  -- Nom du capteur Text Uptime Livebox, nil si non utilisé
local internet          = 1119 --"Internet"  -- Nom du capteur Interrupteur Internet, nil si non utilisé
local VoIP              = 1120 --"VoIP"  -- Nom du capteur Interrupteur VoIP, nil si non utilisé
local ServiceTV         = 1121 --"Service TV"  -- Nom du capteur Interrupteur Service TV, nil si non utilisé
local wifi24            = nil --"WiFi 2.4"  -- Nom du capteur Interrupteur wifi 2.4Ghz, nil si non utilisé
local wifi5             = nil --"WiFi 5"  -- Nom du capteur Interrupteur wifi 5Ghz, nil si non utilisé
local firmware          = nil --"Firmware LB" -- Nom du capteur Text Firmware LB, nil si non utilisé
local DernierAppel      = nil --"Dernier Appel" -- Nom du capteur Text Dernier Appel, nil si non utilisé
local missedCall        = nil -- "Appels manqués" -- Nom du capteur Text appels manqués, nil si non utilisé
local nbMissedCall      = 4 -- Nombre d'appels manqués à afficher
local failedCall        = nil -- "Appels sans réponse" -- nil -- Nom du capteur Text appels sans réponse, nil si non utilisé
local nbFailedCall      = 4 -- Nombre d'appels sans réponse à afficher
local succeededCall     = nil -- "Appels réussis" -- Nom du capteur Text appels réussis, nil si non utilisé
local nbSucceededCall   = 4 -- Nombre d'appels réussis à afficher
local clearCallList     = nil -- "Effacer liste appels" -- Nom du capteur Interrupteur PushOn clearCallList
local reboot            = 1116 -- Nom du capteur Interrupteur PushOn reboot
local sonner            = nil -- "Sonner" -- Nom du capteur Interrupteur PushOn faire sonner tel
local notifyMissedCall  = false

local devices_livebox_mac_adress = { -- MAC ADDRESS des périphériques à surveiller
                                     --   "18:A6:43:4B:C9:D8",
                                    }


-- Capteurs pour connexion xDSL seulement
local SyncATM = nil -- Nom du capteur custom Synchro ATM down, nil si non utilisé
local SyncATMup = nil -- Nom du capteur custom Synchro ATM up, nil si non utilisé
local Attn = nil -- Nom du capteur custom Attenuation de la ligne, nil si non utilisé
local MargedAttn = nil -- Nom du capteur custom Marge d'atténuation, nil si non utilisé
-- Livebox 4 seulement
local TransmitBlocks = nil  -- Nom du capteur Incremental Counter TransmitBlocks, nil si non utilisé
local ReceiveBlocks = nil  -- Nom du capteur Incremental Counter ReceiveBlocks, nil si non utilisé
local fetchIntervalMins = 1 --  intervalle de mise à jour.

local scriptName = 'Livebox'
local scriptVersion = '1.16'

return {
    active = true,
    logging = {
                    -- level    =   domoticz.LOG_DEBUG, -- Uncomment to override the dzVents global logging setting
                     level    =   domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres
                    -- level    =   domoticz.LOG_ERROR,
                    -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
        marker = scriptName..' '..scriptVersion
    },
    on = {
        timer = {
            'every '..tostring(fetchIntervalMins)..' minutes',
        },
    devices = {wifi5,wifi24,clearCallList,reboot,sonner}
    },

    execute = function(domoticz, item)
        local notificationTable = {domoticz.NSS_TELEGRAM } 
                            --[[ 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 domoticz.NSS_TELEGRAM
                                Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l'ensemble par des {}.
                                Exemple :{domoticz.NSS_PUSHBULLET, domoticz.NSS_HTTP}
                            --]]

-- SVP, ne rien changer sous cette ligne
        function os.capture(cmd, raw)
            local f = assert(io.popen(cmd, 'r'))
            local s = assert(f:read('*a'))
            f:close()
            if raw then return s end
            s = string.gsub(s, '^%s+', '')
            s = string.gsub(s, '%s+$', '')
            s = string.gsub(s, '[\n\r]+', ' ')
            return s
        end

        function disp_time(time)
            local days = math.floor(time/86400)
            local remaining = time % 86400
            local hours = math.floor(remaining/3600)
            remaining = remaining % 3600
            local minutes = math.floor(remaining/60)
            remaining = remaining % 60
            local seconds = remaining
            return string.format("%d:%02d:%02d:%02d",days,hours,minutes,seconds)
        end

        function traduction(str) -- supprime les accents de la chaîne str
            if (str) then
            str = string.gsub (str,"missed", "manqué")
            str = string.gsub (str,"failed", "échoué")
            str = string.gsub (str,"succeeded", "réussi")
            end
            return (str)
        end

        function get_timezone()
          local now = os.time()
          return os.difftime(now, os.time(os.date("!*t", now)))
        end


        function format_date(str) -- supprime les caractères T et Z de la chaîne str  et corrige l'heure suivant le fuseau horaire
            if (str) then
                _, _, A, M, j, h, m, s = string.find(str, "^(%d+)-(%d+)-(%d+)T(%d+):(%d+):(%d+)Z$")
                if domoticz.time.isdst == true then --test si heure d'été
                    h = h + 1 + get_timezone()/3600 
                else
                     h = h + get_timezone()/3600
                end
                str= A.."-"..M.."-"..j.." - "..h..":"..m..":"..s
            end
            return (str)
        end

        function delta_date(str) -- supprime les caractères T et Z de la chaîne str  et corrige l'heure suivant le fuseau horaire
            diff = 0
            if (str) then
                _, _, A, M, j, h, m, s = string.find(str, "^(%d+)-(%d+)-(%d+)T(%d+):(%d+):(%d+)Z$")
                h = h + get_timezone()/3600
                diff = os.time()-os.time{year=A, month=M, day=j, hour=h, min=m, sec=s}
            end
            return (disp_time(diff))
        end



        function ReverseTable(t)
            local reversedTable = {}
            local itemCount = #t
            for k, v in ipairs(t) do
                reversedTable[itemCount + 1 - k] = v
            end
            return reversedTable
        end

        function searchName(contacts, phoneNumber)
            name = phoneNumber
            for index, variable in pairs(contacts) do
                if variable.Phone == phoneNumber then
                    name = variable.Name
                    break
                end
            end
            return name
        end

        function searchKey(children, mac)
            key = -1
            if children then
                for index, variable in pairs(children) do
                    if variable.Key == mac then
                        key = index
                        break
                    end
                end
            end
            return key
        end
        local function readLuaFromJsonFile(fileName)
            local file = io.open(fileName, 'r')
            if file then
                local contents = file:read('*a')
                local lua_value = domoticz.utils.fromJSON(contents)
                io.close(file)
                return lua_value
            end
            return nil
        end
        --Connexion et récupération du cookies
        os.execute("curl -s -o \""..myOutput.."\" -X POST -c \""..myCookies.."\" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d \"{\\\"service\\\":\\\"sah.Device.Information\\\",\\\"method\\\":\\\"createContext\\\",\\\"parameters\\\":{\\\"applicationName\\\":\\\"so_sdkut\\\",\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\""..password.."\\\"}}\" http://"..adresseLB.."/ws > /dev/null")

        --Lecture du cookies pour utilisation ultérieure
        myContextID = os.capture("tail -n1 \""..myOutput.."\" | sed 's/{\"status\":0,\"data\":{\"contextID\":\"//1'| sed 's/\",//1' | sed 's/\"groups\":\"http,admin//1' | sed 's/\"}}//1'")
        domoticz.log('Context : '..myContextID, domoticz.LOG_DEBUG)

        if (item.isTimer)then

            --Données de connexion
            if SyncATM or SyncATMup or Attn or MargedAttn then
                MIBs=os.capture("curl -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..myContextID.."\" -d \"{\\\"service\\\":\\\"NeMo.Intf.data\\\",\\\"method\\\":\\\"getMIBs\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                domoticz.log('MIBs : '..MIBs, domoticz.LOG_DEBUG)
                local lbAPIData = domoticz.utils.fromJSON(MIBs)
                if lbAPIData.status == nil or lbAPIData == nil then
                    domoticz.log('Lecture de la MIBs impossible', domoticz.LOG_ERROR)
                else
                    if SyncATM then domoticz.log('ATM Down: '..lbAPIData.status.dsl.dsl0.DownstreamCurrRate, domoticz.LOG_INFO)
                    domoticz.devices(SyncATM).updateCustomSensor(lbAPIData.status.dsl.dsl0.DownstreamCurrRate) end

                    if SyncATMup then domoticz.log('ATM Up: '..lbAPIData.status.dsl.dsl0.UpstreamCurrRate, domoticz.LOG_INFO)
                    domoticz.devices(SyncATMup).updateCustomSensor(lbAPIData.status.dsl.dsl0.UpstreamCurrRate) end

                    if Attn then domoticz.log('Attn : '..tostring(lbAPIData.status.dsl.dsl0.DownstreamLineAttenuation/10)..' dB', domoticz.LOG_INFO)
                    domoticz.devices(Attn).updateCustomSensor(tostring(lbAPIData.status.dsl.dsl0.DownstreamLineAttenuation/10)) end

                    if MargedAttn then domoticz.log('Marge d\'Attn : '..tostring(lbAPIData.status.dsl.dsl0.DownstreamNoiseMargin/10)..' dB', domoticz.LOG_INFO)
                    domoticz.devices(MargedAttn).updateCustomSensor(tostring(lbAPIData.status.dsl.dsl0.DownstreamNoiseMargin/10)) end
                end
            end

            -- Volume de données échangées
            if TransmitBlocks or ReceiveBlocks then
                DSLstats=os.capture("curl -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..myContextID.."\" -d \"{\\\"service\\\":\\\"NeMo.Intf.dsl0\\\",\\\"method\\\":\\\"getDSLStats\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                domoticz.log('DSLstats : '..DSLstats, domoticz.LOG_DEBUG)
                local lbAPIDataDSL = domoticz.utils.fromJSON(DSLstats)
                if lbAPIDataDSL.status == nil then
                    domoticz.log('Lecture de la MIBs DSL impossible', domoticz.LOG_ERROR)
                else
                    domoticz.log("TransmitBlocks : "..lbAPIDataDSL.status.TransmitBlocks)
                    if TransmitBlocks then domoticz.devices(TransmitBlocks).update(0,lbAPIDataDSL.status.TransmitBlocks) end
                    domoticz.log("ReceiveBlocks : "..lbAPIDataDSL.status.ReceiveBlocks)
                    if ReceiveBlocks then domoticz.devices(ReceiveBlocks).update(0,lbAPIDataDSL.status.ReceiveBlocks) end
                end
            end

            --État WiFi
            if wifi24 or wifi5 then
                wifi=os.capture("curl -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..myContextID.."\" -d \"{\\\"service\\\":\\\"NeMo.Intf.lan\\\",\\\"method\\\":\\\"getMIBs\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                domoticz.log('wifi : '..wifi, domoticz.LOG_DEBUG)
                local lbAPIDataWifi = domoticz.utils.fromJSON(wifi)
                if lbAPIDataWifi.status == nil then
                    domoticz.log('Lecture de la MIBs Wifi impossible', domoticz.LOG_ERROR)
                else
                    if wifi24 then
                        domoticz.log('Wifi 2.4 Ghz : '..lbAPIDataWifi.status.wlanvap.wl0.VAPStatus, domoticz.LOG_INFO)
                        if (lbAPIDataWifi.status.wlanvap.wl0.VAPStatus == 'Up' and domoticz.devices(wifi24).active == false)then
                            domoticz.devices(wifi24).switchOn().silent()
                        elseif (lbAPIDataWifi.status.wlanvap.wl0.VAPStatus ~= 'Up' and domoticz.devices(wifi24).active)then
                            domoticz.devices(wifi24).switchOff().silent()
                        end
                    end

                    if wifi5 then
                        if (lbAPIDataWifi.status.wlanvap.eth6)then
                            domoticz.log('Wifi 5 Ghz : '..lbAPIDataWifi.status.wlanvap.eth6.VAPStatus, domoticz.LOG_INFO)
                            if (lbAPIDataWifi.status.wlanvap.eth6.VAPStatus == 'Up' and domoticz.devices(wifi5).active == false)then
                                domoticz.devices(wifi5).switchOn().silent()
                            elseif (lbAPIDataWifi.status.wlanvap.eth6.VAPStatus ~= 'Up' and domoticz.devices(wifi5).active)then
                                domoticz.devices(wifi5).switchOff().silent()
                            end
                        else
                            --support de la livebox3
                            domoticz.log('Wifi 5 Ghz : '..lbAPIDataWifi.status.wlanvap.wl1.VAPStatus, domoticz.LOG_INFO)
                            if (lbAPIDataWifi.status.wlanvap.wl1.VAPStatus == 'Up' and domoticz.devices(wifi5).active == false)then
                                domoticz.devices(wifi5).switchOn().silent()
                            elseif (lbAPIDataWifi.status.wlanvap.wl1.VAPStatus ~= 'Up' and domoticz.devices(wifi5).active)then
                                domoticz.devices(wifi5).switchOff().silent()
                            end
                        end
                    end
                end
            end

            --Dernier Appel reçu ou émis
            local missedCallList = ""
            local failedCallList = ""
            local succeededCallList = ""
            if DernierAppel or missedCall or failedCall or succeededCall then
                callList=os.capture("curl -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..myContextID.."\" -d \"{\\\"service\\\":\\\"VoiceService.VoiceApplication\\\",\\\"method\\\":\\\"getCallList\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                domoticz.log('callList : '..callList, domoticz.LOG_DEBUG)
                local lbAPIDataCallList = domoticz.utils.fromJSON(callList)
                if lbAPIDataCallList.status == nil then
                    domoticz.log('Lecture de la MIBs Téléphonie impossible', domoticz.LOG_ERROR)
                else
                    domoticz.log('CallList : '..#lbAPIDataCallList.status, domoticz.LOG_INFO)
                    if (#lbAPIDataCallList.status>0) then
                        contacts = readLuaFromJsonFile(fichier_contacts)
                        if contacts == nil then contacts = {} end
                        domoticz.log('Dernier Appel : '..lbAPIDataCallList.status[#lbAPIDataCallList.status].remoteNumber, domoticz.LOG_INFO)
                        domoticz.log('Dernier Appel : '..traduction(lbAPIDataCallList.status[#lbAPIDataCallList.status].callType), domoticz.LOG_INFO)
                        NumeroEtat = searchName(contacts, lbAPIDataCallList.status[#lbAPIDataCallList.status].remoteNumber) .. " - "..lbAPIDataCallList.status[#lbAPIDataCallList.status].callType
                        if DernierAppel and domoticz.devices(DernierAppel).text ~= traduction(NumeroEtat) then
                                domoticz.devices(DernierAppel).updateText(traduction(NumeroEtat))
                        end
                        -- x Appels manqués, sans réponse, réussis
                        for i, call in ipairs(ReverseTable(lbAPIDataCallList.status)) do
                            if call.callType == "missed" and nbMissedCall > 0 then
                                --domoticz.log(call.remoteNumber .. " " .. traduction(call.callType) .. " " .. format_date(call.startTime), domoticz.LOG_INFO)
                                missedCallList = missedCallList .. searchName(contacts, call.remoteNumber) .. " - " .. format_date(call.startTime) .. "\n"
                                nbMissedCall = nbMissedCall - 1
                            end
                            if call.callType == "failed" and nbFailedCall > 0 then
                                --domoticz.log(call.remoteNumber .. " " .. traduction(call.callType) .." ".. format_date(call.startTime), domoticz.LOG_INFO)
                                failedCallList = failedCallList .. searchName(contacts, call.remoteNumber) .." - ".. format_date(call.startTime) .. "\n"
                                nbFailedCall = nbFailedCall - 1
                            end
                            if call.callType == "succeeded" and nbSucceededCall > 0 then
                                --domoticz.log(call.remoteNumber .. " " .. traduction(call.callType) .. " " .. format_date(call.startTime), domoticz.LOG_INFO)
                                succeededCallList = succeededCallList .. searchName(contacts, call.remoteNumber) .. " - " .. format_date(call.startTime) .. "\n"
                                nbSucceededCall = nbSucceededCall - 1
                            end
                        end
                        if missedCallList == "" then missedCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels manqués : \n'..missedCallList, domoticz.LOG_INFO)
                        -- Notification appels manqués
                        if missedCall and notifyMissedCall == true then
                            domoticz.log("delai depuis la dernière MAJ du device appels manqués : "..tostring(domoticz.devices(missedCall).lastUpdate.minutesAgo).." minutes", domoticz.LOG_INFO)
                            if domoticz.devices(missedCall).lastUpdate.minutesAgo < 1 and domoticz.devices(missedCall).text ~= "Aucun appel à afficher" then 
                                   domoticz.notify("Notification d'appel en absence", "Appel(s) en absence : \n"..tostring(domoticz.devices(missedCall).text), domoticz.PRIORITY_NORMAL,domoticz.SOUND_DEFAULT, "" , notificationTable )
                            end
                        end

                        if missedCall and domoticz.devices(missedCall).text ~= traduction(missedCallList) then
                            domoticz.devices(missedCall).updateText(traduction(missedCallList))
                        end
                        if failedCallList == "" then failedCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels sans réponse : \n'..failedCallList, domoticz.LOG_INFO)
                        if failedCall and domoticz.devices(failedCall).text ~= traduction(failedCallList) then
                            domoticz.devices(failedCall).updateText(traduction(failedCallList))
                        end
                        if succeededCallList == "" then succeededCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels réussis : \n'..succeededCallList, domoticz.LOG_INFO)
                        if succeededCall and domoticz.devices(succeededCall).text ~= traduction(succeededCallList) then
                            domoticz.devices(succeededCall).updateText(traduction(succeededCallList))
                        end
                    else
                        NumeroEtat = "Aucun appel à afficher"
                        domoticz.log('Dernier Appel : '..NumeroEtat, domoticz.LOG_INFO)
                        if DernierAppel and domoticz.devices(DernierAppel).text ~= NumeroEtat then
                            domoticz.devices(DernierAppel).updateText(NumeroEtat)
                        end
                        if missedCallList == "" then missedCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels manqués : \n'..missedCallList, domoticz.LOG_INFO)
                        if missedCall and domoticz.devices(missedCall).text ~= traduction(missedCallList) then
                            domoticz.devices(missedCall).updateText(traduction(missedCallList))
                        end
                        if failedCallList == "" then failedCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels sans réponse : \n'..failedCallList, domoticz.LOG_INFO)
                        if failedCall and domoticz.devices(failedCall).text ~= traduction(failedCallList) then
                            domoticz.devices(failedCall).updateText(traduction(failedCallList))
                        end
                        if succeededCallList == "" then succeededCallList = "Aucun appel à afficher" end
                        domoticz.log('Appels réussis : \n'..succeededCallList, domoticz.LOG_INFO)
                        if succeededCall and domoticz.devices(succeededCall).text ~= traduction(succeededCallList) then
                            domoticz.devices(succeededCall).updateText(traduction(succeededCallList))
                        end
                    end
                end
            end

            if firmware or devices_livebox_mac_adress or ServiceTV or VoIP or UptimeLB then
                LAN=os.capture("curl -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..myContextID.."\" -d \"{\\\"service\\\":\\\"Devices.Device.HGW\\\",\\\"method\\\":\\\"topology\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                LAN=LAN:gsub('"SerialNumber ... ','"SerialNumber" : "'):gsub(" ... ",'     ')
                domoticz.log('LAN : '..LAN, domoticz.LOG_DEBUG)
                LAN = domoticz.utils.fromJSON(LAN)
            --Version du firmware
                if LAN.status[1].SoftwareVersion and firmware then
                    domoticz.log("Version Firmware : "..LAN.status[1].SoftwareVersion,domoticz.LOG_INFO)
                    if domoticz.devices(firmware).text ~= LAN.status[1].SoftwareVersion then
                        domoticz.devices(firmware).updateText(LAN.status[1].SoftwareVersion)
                    end
                end

            --Uptime
                uptime = LAN.status[1]['Children']
                for l=1,#uptime do -- récupération de l'arbre des périphériques LAN
                    if uptime[l]["Key"]== "lan" then
                        uptime = uptime[l]
                        break
                    end
                end
                if uptime.FirstSeen and UptimeLB then
                    uptime = delta_date(uptime.FirstSeen)
                    domoticz.log("Uptime : "..uptime,domoticz.LOG_INFO)
                    if domoticz.devices(UptimeLB).text ~= uptime then
                        domoticz.devices(UptimeLB).updateText(uptime)
                    end
                end

            --Etat du Service TV
                if LAN.status[1].IPTV and ServiceTV then
                    domoticz.log("IPTV : "..tostring(LAN.status[1].IPTV),domoticz.LOG_INFO)
                    if (LAN.status[1].IPTV)then
                        domoticz.devices(ServiceTV).switchOn().checkFirst()
                    else
                        domoticz.devices(ServiceTV).switchOff().checkFirst()
                    end
                elseif ServiceTV then
                    domoticz.devices(ServiceTV).switchOff().checkFirst()
                end

            --Etat du Service VoIP
                if LAN.status[1].Telephony and VoIP then
                    domoticz.log("Telephony : "..tostring(LAN.status[1].Telephony),domoticz.LOG_INFO)
                    if (LAN.status[1].Telephony)then
                        domoticz.devices(VoIP).switchOn().checkFirst()
                    else
                        domoticz.devices(VoIP).switchOff().checkFirst()
                    end
                elseif  VoIP then
                    domoticz.devices(VoIP).switchOff().checkFirst()
                end

            --Etat du Service Internet
                if LAN.status[1].Internet and internet then
                    domoticz.log("Internet : "..tostring(LAN.status[1].Internet),domoticz.LOG_INFO)
                    if (LAN.status[1].Internet)then
                        domoticz.devices(internet).switchOn().checkFirst()
                    else
                        domoticz.devices(internet).switchOff().checkFirst()
                    end
                elseif internet then
                        domoticz.devices(internet).switchOff().checkFirst()
                end

            -- IP WAN
                if LAN.status[1].ConnectionIPv4Address and IPWAN then
                    domoticz.log("IP WAN : "..LAN.status[1].ConnectionIPv4Address,domoticz.LOG_INFO)
                    if  domoticz.devices(IPWAN).text ~= LAN.status[1].ConnectionIPv4Address then
                        domoticz.devices(IPWAN).updateText(LAN.status[1].ConnectionIPv4Address)
                    end
                end

            -- IPv6WAN
                if LAN.status[1].ConnectionIPv6Address and IPv6WAN then
                    domoticz.log("IPv6 WAN : "..LAN.status[1].ConnectionIPv6Address,domoticz.LOG_INFO)
                    if  domoticz.devices(IPv6WAN).text ~= LAN.status[1].ConnectionIPv6Address then
                        domoticz.devices(IPv6WAN).updateText(LAN.status[1].ConnectionIPv6Address)
                    end
                end

            --Présence de périphériques
                LAN = LAN.status[1]['Children']
                for l=1,#LAN do -- récupération de l'arbre des périphériques LAN
                    if LAN[l]["Key"]== "lan" then
                        LAN = LAN[l]['Children']
                        break
                    end
                end
                local k=-1
                for i=1,#devices_livebox_mac_adress do -- recherche de l'adresse MAC et son statut
                    for j=1,#LAN do
                        if(LAN[j]['DiscoverySource'] == "selflan")then
                            k=searchKey(LAN[j]['Children'],devices_livebox_mac_adress[i])
                            if (k~=-1 and LAN[j]['Children'][k]['Active'])then
                                domoticz.log('switch : '..LAN[j]['Children'][k]['Name'].." On", domoticz.LOG_INFO)
                                if (domoticz.devices(LAN[j]['Children'][k]['Name']))then
                                    domoticz.devices(LAN[j]['Children'][k]['Name']).switchOn().checkFirst()
                                end
                                break
                            elseif (k~=-1 and LAN[j]['Children'][k]['Active']==false)then
                                domoticz.log('switch : '..LAN[j]['Children'][k]['Name'].." Off", domoticz.LOG_INFO)
                                if (domoticz.devices(LAN[j]['Children'][k]['Name']))then
                                    domoticz.devices(LAN[j]['Children'][k]['Name']).switchOff().checkFirst()
                                end
                                break
                            end
                        end
                    end
                    if (k==-1) then
                        domoticz.log('mac : '..devices_livebox_mac_adress[i].." introuvable", domoticz.LOG_INFO)
                    end
                end
            end

        elseif item.isDevice then
            if item == domoticz.devices(wifi5) then
                if liveBox3 then chip='wifi1_ath' else chip='wifi0_quan' end
                os.execute("curl -m1 -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..
                    myContextID.."\" -d \"{\\\"service\\\":\\\"NeMo.Intf.lan\\\",\\\"method\\\":\\\"setWLANConfig\\\",\\\"parameters\\\":{\\\"mibs\\\":{\\\"penable\\\":{\\\""..chip.."\\\":{\\\"PersistentEnable\\\":"..
                    tostring(item.active)..", \\\"Enable\\\":true}}}}}\" http://"..adresseLB.."/ws")
                domoticz.log("wifi5 "..tostring(item.active),domoticz.LOG_INFO)

            elseif item == domoticz.devices(wifi24) then
                if liveBox3 then chip='wifi0_ath' else chip='wifi0_bcm' end
                os.execute("curl -m1 -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..
                    myContextID.."\" -d \"{\\\"service\\\":\\\"NeMo.Intf.lan\\\",\\\"method\\\":\\\"setWLANConfig\\\",\\\"parameters\\\":{\\\"mibs\\\":{\\\"penable\\\":{\\\""..chip.."\\\":{\\\"PersistentEnable\\\":"..
                    tostring(item.active)..", \\\"Enable\\\":true}}}}}\" http://"..adresseLB.."/ws")
                domoticz.log("wifi24 "..tostring(item.active),domoticz.LOG_INFO)

            elseif item == domoticz.devices(clearCallList) then
                os.execute("curl -m1 -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..
                    myContextID.."\" -d \"{\\\"service\\\":\\\"VoiceService.VoiceApplication\\\",\\\"method\\\":\\\"clearCallList\\\",\\\"parameters\\\":{}}\" http://"..adresseLB.."/ws")
                domoticz.log("clearCallList "..tostring(item.active),domoticz.LOG_INFO)

            elseif item == domoticz.devices(reboot) then
                os.execute("curl -m1 -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..
                    myContextID.."\" -d \"{\\\"parameters\\\":{}}\" http://"..adresseLB.."/sysbus/NMC:reboot")
                domoticz.log("reboot "..tostring(item.active),domoticz.LOG_INFO)

            elseif item == domoticz.devices(sonner) then
                os.execute("curl -m1 -s -b \""..myCookies.."\" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H \"X-Context: "..
                    myContextID.."\" -d \"{\\\"parameters\\\":{}}\" http://"..adresseLB.."/sysbus/VoiceService/VoiceApplication:ring")
                domoticz.log("sonner "..tostring(item.active),domoticz.LOG_INFO)
            else
                domoticz.log("capteur " .. item.name .. " non déclaré !?", domoticz.LOG_ERROR)
            end
        end
        --Déconnexion et suppression des fichiers temporaires
        os.execute("curl -m1 -s -b "..myCookies.." -X POST http://"..adresseLB.."/logout &")
        os.execute('rm "'..myCookies..'" "'..myOutput..'" &')
    end
}
Comme le bouton reboot a fonctionné ma Livebox a rebooté :D
et le script est passé pendant qu'elle était down... Et cela a coincé dzVent :?

Code : Tout sélectionner

2020-05-08 23:02:20.176 Error: EventSystem: Warning!, lua script /home/pi/domoticz/dzVents/runtime/dzVents.lua has been running for more than 10 seconds
2020-05-08 23:02:20.407 Error: dzVents: Error: (3.0.2) ------ Finished Internet after >20 seconds. (using 0.402 seconds CPU time !)
2020-05-08 23:02:26.660 Error: dzVents: Error: (3.0.2) Livebox 1.15: An error occurred when calling event handler Livebox
2020-05-08 23:02:26.660 Error: dzVents: Error: (3.0.2) Livebox 1.15: ...i/domoticz/scripts/dzVents/generated_scripts/Livebox.lua:393: attempt to index a nil value (global 'LAN')
2020-05-08 23:03:01.236 Error: dzVents: Error: (3.0.2) Livebox 1.15: An error occurred when calling event handler Livebox
2020-05-08 23:03:01.236 Error: dzVents: Error: (3.0.2) Livebox 1.15: ...i/domoticz/scripts/dzVents/generated_scripts/Livebox.lua:167: time result cannot be represented in this installation
Et le capteur Internet n'a donc pas été mis à jour pendant que le Livebox était down.
Le plus gênant est que probablement mes autres scripts étaient coincés pendant ce temps (20 secondes).
N'étant pas trop codeur, je ne vois pas comment éviter cela

Re: [DzVents] LiveBox 3 et 4

Publié : 29 juil. 2020, 13:26
par lolo19430
Bonjour,

JE suis nouveau en domotique et avec Domoticz...

Donc désolé pour les questions qui seront trés bêtes .....

J'ai une livebox 4 , decodeur 4, j'aimerai utiliser ce script ....

Mais je ne trouve pas de tuto d'installation quand on est une quiche comme moi et que l'on débute ....

Est ce que que quelqu'un peut m'aider ?