Page 1 sur 2

dzvents... je suis planté

Publié : 07 févr. 2022, 10:51
par PatriceN
Bonjour,

J'essaie de scripter mais ce n'est pas terrible...
Ce que je voudrais faire : Si la fenêtre est ouverte, j'arrête le chauffage (ça j'y arrive + ou moins), mais si la fenêtre est déjà ouverte et que le chauffage démarre car programmé, je voudrais l'éteindre en déclenchant la fonction toutes les 5 min (si la fenêtre est déjà ouverte, plus de changement d'état de la fenêtre donc il faut faire autrement), et là patatras, je n'arrive pas à faire...

Si je décommente dz.log..., j'obtiens l'erreur suivante :

Code : Tout sélectionner

"Error: dzVents: Error: (3.1.8) ...zVents/generated_scripts/Chambre ouverte stop aircon.lua:16: attempt to concatenate a nil value (field 'trigger')"
Si je garde le commentaire, plus d'erreur, mais ça ne fonctionne pas.

Quelqu'un peut m'aider?
Merci!

Code : Tout sélectionner

return
{
    on =
    {
        timer = {
            'every 5 minutes',
            
        },
        devices = {
            'Fenetres chambre',
        },
    },
    execute = function(dz, item)
        Window_open = dz.devices('Fenetres chambre')
        AirconChambre = dz.devices('MELCloud - Chambre - Mode')
        --dz.log('The rule that triggered the event was: ' .. item.trigger )
        if (Window_open == 1)
        then
            AirconChambre.switchSelector('Off').checkFirst()
        end
    end

}

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 11:22
par Neutrino
Tu es à jour niveau version de Domoticz ?

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 12:02
par PatriceN
Bonjour,

Oui, 2022.1

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 12:41
par Keros
Si je réécrit ton code, la condition est : if (dz.devices('Fenetres chambre') == 1), or dz.devices('Fenetres chambre') correspond au paramètre : il te manque des attributs derrière.
Si ton widget est de type on/off, il faudrait vérifier dz.devices('Fenetres chambre').state == 'On' Plus d'infos.

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 15:26
par boum
Rigolo, c'est un cas tordu du dzVents que je n'avais jamais croisé.

La doc le précise pourtant (item) :
trigger: string the timer rule, the security state, the customEvent or the http response callback string that actually triggered your script.
Et oui, dans le cas d'un dispositif, trigger n'existe pas! Il faut "ruser" :

Code : Tout sélectionner

local trigger = item.isDevice and item.name or item.trigger
dz.log('The rule that triggered the event was: ' .. trigger )
Ceci dit, l'usage de trigger est en effet plus répandu pour différencier entre plusieurs réponses HTTP ou timers une fois que le type de déclencheur a été déterminé (item.isTimer…). Pour les dispositifs, on utilise alors le nom ou l'ID.

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 16:26
par PatriceN
Keros a écrit : 07 févr. 2022, 12:41 Si je réécrit ton code, la condition est : if (dz.devices('Fenetres chambre') == 1), or dz.devices('Fenetres chambre') correspond au paramètre : il te manque des attributs derrière.
Si ton widget est de type on/off, il faudrait vérifier dz.devices('Fenetres chambre').state == 'On' Plus d'infos.
Merci, ça marche! :)

Re: dzvents... je suis planté

Publié : 07 févr. 2022, 20:29
par Keros
@PatriceN, top ;)

@boum, pour moi, c'est le item dans la fonction function(dz, item) qui est déjà le trigger donc item.trigger ne veut rien dire.

J'utilise item.name pour connaitre le nom du trigger. Je ne vois pas ce qui trigger apporte de plus où dans quel cas il est utile.

Re: dzvents... je suis planté

Publié : 12 févr. 2022, 13:19
par PatriceN
Bon, réfléchir à une automatisation c'est bien, mais ça donne envie de faire mieux!
Actuellement, et grâce aux bons conseils de @Keros, ça marche!

A présent, ce qui serait chouette :
Déclencher sur ouverture de fenêtre, ça je sais faire
Déclencher sur changement d'état de "AirconChambre.switchSelector" au lieu de toutes les 5 min (dans le cas où la PAC démarre d'après sa programmation et que la fenêtre est ouverte), ça je ne sais pas faire

Ensuite, enregistrer l'état dans lequel est "AirconChambre.switchselector" avant de faire

Code : Tout sélectionner

AirconChambre.switchSelector('Off').checkFirst()
pour pouvoir restaurer l'état initial une fois que la fenêtre est refermée.

C'est une belle idée, mais j'ai besoin d'aide, je patauge dans le code, ce n'est pas mon élément...

Re: dzvents... je suis planté

Publié : 12 févr. 2022, 13:29
par Keros
Regarde dans ma signature, il y a des liens vers ma présentation où j'ai écrit des petits guides. Il y en a un concernant le DzVents et j'y parle des déclencheurs.

Et pour "sauvegarder" une valeur, le DzVents a une fonction native : les persistent data.

Re: dzvents... je suis planté

Publié : 12 févr. 2022, 21:47
par PatriceN
Super, merci, les tutos sont au top, j'ai bien avancé mais je ne dois pas réussir à initialiser correctement la variable persistante, je me fais jeter...

J'ai cette erreur, mais je n'arrive pas à m'en sortir...
Je n'arrive pas à visualiser ma variable " dz.log(domoticz.data.Clim_avant_stop)" et apparemment il y a un "nil" qui ne lui plait pas beaucoup.
2022-02-12 21:42:00.507 Status: dzVents: Info: Chambre ouverte: ------ Start internal script: Script #1 chambre WIP:, trigger: "every 1 minutes"
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: The rule that triggered the event was: every 1 minutes
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: Valeur Window_open : Off
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: position clim chambre " Warm "
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: Clim avant stop
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: ------ Finished Script #1 chambre WIP
2022-02-12 21:42:00.508 Error: dzVents: Error: (3.1.8) Chambre ouverte: An error occurred when calling event handler Script #1 chambre WIP
2022-02-12 21:42:00.508 Error: dzVents: Error: (3.1.8) Chambre ouverte: ...ipts/dzVents/generated_scripts/Script #1 chambre WIP.lua:31: attempt to index a nil value (global 'domoticz')

Code : Tout sélectionner

return
{
    on =
    {
        timer = {
            'every 1 minutes',
            
        },
        devices = {
            'Fenetres chambre',
            --'MELCloud - Chambre - Mode',
        },
    },
    data =
    {
        Clim_avant_stop = { initial = 'Off'}
    },
    logging = 
    {
        level = domoticz.LOG_DEBUG, -- change to domoticz.LOG_ERROR when script is tested and OK
        marker = 'Chambre ouverte',
    },
    execute = function(dz, item)
        local trigger = item.isDevice and item.name or item.trigger
        Window_open = dz.devices('Fenetres chambre').state
        AirconChambre = dz.devices('MELCloud - Chambre - Mode')
        dz.log('The rule that triggered the event was: ' .. trigger )
        dz.log('Valeur Window_open : ' .. Window_open )
        dz.log('position clim chambre " '.. AirconChambre.levelName .. ' "')
        dz.log('Clim avant stop')
        dz.log(domoticz.data.Clim_avant_stop)
        --if (AirconChambre.levelName == 'Off')
        --then
         --   dz.log('Déjà arrêté')
        --else
         domoticz.data.Clim_avant_stop = AirconChambre.levelName
        --end    
        if (Window_open == 'On')
        then
            AirconChambre.switchSelector('Off').checkFirst().aftersec(5)
        --else
       --      dz.log('Fermé, on redémarre')
       --     AirconChambre.switchSelector('Warm').checkFirst()
           
        end
    end

}