[Dzvents] Activation/Désactivation planning device

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.
Alain78
Messages : 75
Inscription : 05 févr. 2022, 09:18

[Dzvents] Activation/Désactivation planning device

Message par Alain78 »

Bonjour,

Je crois avoir vu dans le forum cette demande il y a quelques temps. Ayant eu ce besoin j'ai réalisé ce script en Dzvents.
Je vous le partage, à adapter selon les besoins. Les informations sont en fin de ligne.

Les déclencheurs peuvent être différents ( interrupteur ou autres) moi j'avais besoin de variables car utilisées dans d'autres scripts.

Si besoin sur Planning spécifique, possibilité de rajouter une des valeurs et faire des conditions dessus.

Si sélection de plusieurs devices essayer de choisir un début de nom identique pour les devices sinon la liste des "callback" risque d’être longue.

Code : Tout sélectionner

-- Script pour Activation/Désactivation planning des radiateurs ---

local scriptName        = 'script_device_Enable-Disable_Planning'
local scriptVersion     = '1.00'

local Rad               = {}
Rad[1]                  = "Radiateur_Cuisine"
Rad[2]                  = "Radiateur_Entree"
Rad[3]                  = "Radiateur_Ch1"
Rad[4]                  = "Radiateur_Ch2"
Rad[5]                  = "Radiateur_Ch3"
Rad[6]                  = "Radiateur_SdB"

return {
        on =
        {
        variables = { 'ChauffageOnOff', 'Chauffage_Ch3_OnOff', 'Chauffage_SdB_OnOff', 'Chauffage_SdB_1H' }, -- Liste des variables qui déclenchent le script
        httpResponses = { 'Radiateur_*'}, -- Liste des callback (* permet de sélectionner tous les callback générés pour chaque radiateur.).
        },

        logging =
        {  
        -- La section de journalisation facultative vous permet de remplacer le paramètre de journalisation globale de dzVents 
        -- comme défini dans Configuration> Paramètres> Autre> Système d'événements> Niveau de journalisation dzVents. 
        -- Cela peut être pratique lorsque vous voulez que ce script ait une journalisation de débogage étendue pendant que le reste de votre script s'exécute en mode silencieux. 
        level = domoticz.LOG_ERROR, -- domoticz.LOG_INFO, domoticz.LOG_MODULE_EXEC_INFO, domoticz.LOG_DEBUG or domoticz.LOG_ERROR, domoticz.LOG_FORCE,
        marker  = scriptName..' v'..scriptVersion
        },
    
	    execute = function(domoticz, item)
	        
            if item.isVariable then
                varname = item.trigger -- Nom de la variable qui declenche le script.
                -- msg = 'Variable de déclenchement: ' .. varname 
                -- print(msg)
                if item.value == 1 then NewPlanning = 'enable' else NewPlanning = 'disable' end -- valeur de la variable qui declenche le script (0 ou 1).
                    
                if varname == "ChauffageOnOff" then
                    for i = 1,6 do -- Boucle pour traiter tous les radiateurs.
                        RadIdx = domoticz.devices(Rad[i]).idx -- récupération de l'IDX pour commande json
                        --msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
                        --print(msg)
                        coderetour = Rad[i]..NewPlanning -- creation d'un callback unique pour le HTTPResponse avec information si enable ou disable des plannings.
                        --msg = coderetour
                        --print(msg)
                        domoticz.openURL({
                        url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers', -- Récuperation de tous les plannings du device sélectionné.
                        callback = coderetour, -- Passage du callback unique.
                        })
                    end
                end

                if varname == "Chauffage_SdB_1H" then
                    i = 6  -- Pour traitement d'un seul device.
                    RadIdx = domoticz.devices(Rad[i]).idx 
                    --msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
                    --print(msg)
                    coderetour = Rad[i]..NewPlanning
                    --msg = coderetour
                    --print(msg)
                    domoticz.openURL({
                    url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
                    callback = coderetour, --
                    })
                end

                if varname == "Chauffage_SdB_OnOff" then
                    i = 6 
                    RadIdx = domoticz.devices(Rad[i]).idx 
                    --msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
                    --print(msg)
                    coderetour = Rad[i]..NewPlanning
                    --msg = coderetour
                    --print(msg)
                    domoticz.openURL({
                    url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
                    callback = coderetour,
                    })
                end
                if varname == "Chauffage_Ch3_OnOff" then
                    i = 5
                    RadIdx = domoticz.devices(Rad[i]).idx 
                    --msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
                    --print(msg)
                    coderetour = Rad[i]..NewPlanning
                    --msg = coderetour
                    --print(msg)
                    domoticz.openURL({
                    url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
                    callback = coderetour,
                    })
                end
                    
            end
        
            if item.isHTTPResponse and item.isJSON then
                varname = item.trigger -- Nom du callback qui declenche le script.
                --msg = 'Callback de déclenchement: ' .. varname
                --print(msg)
                if string.find(varname , "enable") ~= nil then -- Analyse si lancemenent avec mise à ON des plannings.
                    urljson = 'http://127.0.0.1/json.htm?type=command&param=enabletimer&idx=' -- Génération de l'url JSON pour l'activation de tous les plannings d'un device (ici un radiateur).
                end
                if string.find(varname , "disable") ~= nil then -- Analyse si lancemenent avec mise à OFF des plannings.
                    urljson = 'http://127.0.0.1/json.htm?type=command&param=disabletimer&idx=' --Génération de l'url JSON pour la désactivation de tous les plannings d'un device (ici un radiateur).
                end
                local json = domoticz.utils.fromJSON(item.data) -- Récupération du tableau JSON.
                -- domoticz.utils.dumpTable(item.json) -- Pour debug.
                for j = 1,10 do -- Nombre maximum d'itération pour les plannings (si plus de 10 augmenter cette valeur).
                    if json.result[j] ~= nil then -- détection de ligne vide
                        StateSched = json.result[j].Active -- Pour information pour debug.
                        IdxSched = json.result[j].idx -- Recupération de l'idx du Timer
                        --print(StateSched) -- Pour debug
                        --print(IdxSched) -- Pour debug
                        domoticz.openURL({url = urljson..IdxSched})
                    end
                end
            end
        end
}
Alain
Répondre