dzvents... je suis planté

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
PatriceN
Messages : 65
Inscription : 26 nov. 2017, 18:53

dzvents... je suis planté

Message 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

}
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: dzvents... je suis planté

Message par Neutrino »

Tu es à jour niveau version de Domoticz ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
PatriceN
Messages : 65
Inscription : 26 nov. 2017, 18:53

Re: dzvents... je suis planté

Message par PatriceN »

Bonjour,

Oui, 2022.1
Dernière modification par Keros le 07 févr. 2022, 12:32, modifié 1 fois.
Raison : Merci de ne pas citer le message précédent lors d'une réponse directe
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: dzvents... je suis planté

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: dzvents... je suis planté

Message 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.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
PatriceN
Messages : 65
Inscription : 26 nov. 2017, 18:53

Re: dzvents... je suis planté

Message 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! :)
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: dzvents... je suis planté

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
PatriceN
Messages : 65
Inscription : 26 nov. 2017, 18:53

Re: dzvents... je suis planté

Message 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...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: dzvents... je suis planté

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
PatriceN
Messages : 65
Inscription : 26 nov. 2017, 18:53

Re: dzvents... je suis planté

Message 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

}
Dernière modification par Keros le 12 févr. 2022, 21:55, modifié 2 fois.
Raison : Changement des balises pour les logs
Répondre