Dzvent: conditions sur multiple device.id et boucles

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
Loky31200
Messages : 78
Enregistré le : 05 mars 2019, 10:13

Dzvent: conditions sur multiple device.id et boucles

Message par Loky31200 » 13 sept. 2019, 17:55

Bonjour a tous,

Faisant quelque scripts en Dzvent j'ai constaté que certaine typologie ne marchaient pas alors que pourtant cela me paraissait assez logique...

Par exemple :
"if (device.id == (1 or 2 or 3 or 4)) then"
Ou encore
"if (device.id ~= (1 and 2 and 3 and 4)) then"
Est ce normal? ou alors je m'y prends à contre sens?

De même je n'arrive pas a faire fonctionner les boucles for du type:
for i= {1, 5 ,8 , 14, 19} do
block de code
end

Là aussi, je dois écrire un truc indigeste mais sans le savoir :)
Merci de votre aide.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


hestia
Messages : 36
Enregistré le : 12 sept. 2018, 22:36

Re: Dzvent: conditions sur multiple device.id et boucles

Message par hestia » 13 sept. 2019, 19:26

bonjour

un exemple

Code : Tout sélectionner

local LIGHTS= { 112 , 713}

return {
    on = { timer   = { "every minute" },
           devices =  LIGHTS
         },

      logging =   {   level   =   domoticz.LOG_DEBUG,
                      marker  =   "ZwaveTestSilent" },    

    execute = function(dz, item)
        local zwaveDevice
        if item.isTimer then
            for i1, l1 in ipairs(LIGHTS) do
                zwaveDevice = dz.devices(l1)
                dz.log('Device '.. zwaveDevice.name .. " (" .. zwaveDevice.id .. ")" , dz.LOG_DEBUG)
                zwaveDevice.toggleSwitch().silent()
                dz.log('State of Device '.. zwaveDevice.name .. " (" .. zwaveDevice.id .. ") will be changed. Now: " ..  zwaveDevice.state, dz.LOG_DEBUG)
            end
        else
            dz.log(".............. This should not happen !! " .. item.id .. " " .. item.name .. " " .. item.state, dz.LOG_ERROR)
        end
    end
} 
Pour le test de l'égalité multiple, le faire dans la boucle

Loky31200
Messages : 78
Enregistré le : 05 mars 2019, 10:13

Re: Dzvent: conditions sur multiple device.id et boucles

Message par Loky31200 » 15 sept. 2019, 00:00

Merci beaucoup pour l'exemple

Avant d'appliquer, j'aimerai comprendre la ligne :
for i1, l1 in ipairs(LIGHTS) do

C'est les l1 égaux aux id des devices dans "Lights" qui vont être utilisés, c'est bien ca?
Un petite traduction de cette ligne m'aiderai :)

Désolé pour les questions de noob :s

hestia
Messages : 36
Enregistré le : 12 sept. 2018, 22:36

Re: Dzvent: conditions sur multiple device.id et boucles

Message par hestia » 15 sept. 2019, 12:07

je dirai le contraire, il n'y a pas de risque à essayer pour comprendre ;-)

dzVent est basé sur LUA que je ne connais pas et je ne suis pas un codeur...

"C'est les l1 égaux aux id des devices dans "Lights" qui vont être utilisés, c'est bien ca?" => oui

Voici un autre script à lancer avec tes idx en regardant le résultat des print on comprend ... j'espère sinon on en reparle

Code : Tout sélectionner

local LIGHTS= {112, 453, 142, 569, 645, 631, 478, 170, 662}



return {
    on = { timer   = { "every minute" }
         },

      logging =   {level = domoticz.LOG_DEBUG},    

    execute = function(dz, item)
        local dzDevice
        for i, idx in ipairs(LIGHTS) do
            dzDevice = dz.devices(idx)
            print('i= ' .. i .. ' idx= ' .. idx .. ' device= '.. dzDevice.name .. " (" .. dzDevice.id .. ")")
        end
    end
}

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Loky31200
Messages : 78
Enregistré le : 05 mars 2019, 10:13

Re: Dzvent: conditions sur multiple device.id et boucles

Message par Loky31200 » 15 sept. 2019, 12:29

Merci pour les explications :)

C'est bon j'ai capté la mécanique, très pratique !!
Jusque là je ne m'étais pas posé la question car j'avais au maxi deux à trois capteurs a vérifier, donc je faisais cela à l'ancienne :)

Merci encore !

hestia
Messages : 36
Enregistré le : 12 sept. 2018, 22:36

Re: Dzvent: conditions sur multiple device.id et boucles

Message par hestia » 15 sept. 2019, 15:26

:D

Loky31200
Messages : 78
Enregistré le : 05 mars 2019, 10:13

Re: Dzvent: conditions sur multiple device.id et boucles

Message par Loky31200 » 16 sept. 2019, 10:57

Tiens quitte à rentrer dans le sujet, autant aller jusqu'au bout :)

Comment cela marche si je veux utiliser des "doublettes" ou "triplets" ?
Typiquement lier la proba de pluie à 1h avec la température et le vent qu'il y 'aura à 1H et enchainer avec les combinaisons suivantes à 2H, 4H etc

Est ce que je peux déclarer quelque chose du genre:
local previsions = {{1,5,6},{2,4,8}}

ou alors je suis complètement à coté de la plaque?
Du coup la ligne "for i1, l1 in ipairs(LIGHTS) do" ressemblerait à quoi ?
J'imagine l1,l2,l3 à la place de l1? Ou du l1[1]?

Je pose la question plutôt que de tattoner des heures avant que "ça tombe en marche" :)

boum
Messages : 37
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: Dzvent: conditions sur multiple device.id et boucles

Message par boum » 16 sept. 2019, 12:19

Si tu sais que les valeurs de ton tableau sont des tableaux à 3 éléments, tu peux accéder directement aux valeurs :

Code : Tout sélectionner

local previsions = {{1,5,6},{2,4,8}}
for i1,triplet in ipairs(previsions) do
  locat value1 = triplet[1]
  locat value2 = triplet[2]
  locat value3 = triplet[3]
  -- ...
end
Sinon, il faut itérer de façon générique :

Code : Tout sélectionner

local previsions = {{1,5,6},{2,4,8}}
for i1,value1 in ipairs(previsions) do
  for i2,value2 in ipairs(value1) do
    -- ici on aura 1, 5 puis 6 à la première itération
  end
end
Note que dans le premier cas, tu peux rendre la lecture du script plus lisible qu'avec des index entiers :

Code : Tout sélectionner

local previsions = {
  {heure=1, temperature=5, vent =6},
  {heure=2, temperature = 4, vent=8},
}
for i1,prevision in ipairs(previsions) do
  locat timer = prevision.heure
  locat temp = prevision.temperature
  locat vent = prevision.vent
  -- on peut aussi accéder avec prevision['vent']
  -- ou faire une boucle avec for cle,valeur in pairs(prevision) do end
  -- ...
end
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

Loky31200
Messages : 78
Enregistré le : 05 mars 2019, 10:13

Re: Dzvent: conditions sur multiple device.id et boucles

Message par Loky31200 » 16 sept. 2019, 19:35

Alors pour moi qui ne suis pas codeur à l'origine, comment te dire que tes explications et exemples sont justes magiques :)

Au dela d'avoir compris comment faire mon petit bout de code, je viens de comprendre comment font les mecs dans leurs codes savants où j'étais totalement perdu ;)

Muchas gracias !!!!

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre