Les scripts avec dzVents : entrons dans les détails

Toujours à la découverte des scripts dzVents (premier article ici https://easydomoticz.com/scripts-plus-faciles-domoticz-dzvents/) entrons un peu plus dans leur intimité . 😳

Le fonctionnement des scripts dzVents.

Encore une fois , il ne s’agit que d’une traduction du readme situé ici https://github.com/dannybloe/dzVents, les lecteurs anglophones trouveront leur bonheur la-bas, pour les frenchies c’est ici.

Revoyons un script dzVents

return {
    active = true,
    on = {
        'My switch'
    },

    execute = function(domoticz, device)
        -- your script logic goes here, something like this:

        if (device.state == 'On') then
            domoticz.notify('I am on!', '', domoticz.PRIORITY_LOW)
        end

    end
}

il y a 3 parties importantes: active, on et execute.

 

  • active: peut contenir soit :
    • une valeur booléenne (true or false, cela doit rester true ou false en anglais, sans guillemets). Si vous placez cela à false, le script ne sera pas appelé. Pratique pour inactiver l’exécution d’un script.
    • une fonction Lua qui renverra true ou false. Cette fonction (que vous devrez gérer vous même) recevra un objet domoticz avec toutes les informations issues de votre instance Domoticz active = function(domoticz) …. end.

Donc par exemple ici vous pouvez ajouter une fonction qui renverra true ou false si une variable à été modifiée, le script ne se déclenchera que lors de la reception du true.Exemple :

        active = function(domoticz)
                return (domoticz.devices['script_blabla'].state == 'On')
            end,

Toutefois  ce script s’exécutera pour décider si il doit s’exécuter vraiment, il est donc plus efficace de mettre ces tests dans la partie « execute » du script (c.f readme du github).

 

  • on: Aucun rapport avec un ON/OFF d’un swich, comprenez le comme un déclencheur, comme un événement : Si il se passe ceci  alors execute … On peut y placer plusieurs vérification d’état de matériel
    • Placez y le vrai nom de votre device entre simple quotes (‘). Vous pouvez y utiliser étoile (*)  comme joker Exemple : PIR_* ou *_PIR . Dans ce cas tous les devices concernés seront mis à jour,
    • L’idx de votre matériel (Vous avez toujours le droit de changer de nom alors que l’idx ne changera jamais),
    • Le mot clé ‘timer’ qui permettra de lancer ce script toutes les minutes (voir plus bas).
    • Ou un mélange de tout cela tel que :
      on = {
      		'Lumiere',                   -- nom du device
      		'Temperature',               -- si la Température change (c'est bourrin)
      		'Présence',                  -- nom du matériel
      		258,                         -- index du device
      		['timer'] = 'every minute',  -- toutes les minutes
      		'PIR_*',                     -- tout ce qui commence par PIR_ (PIR_1,PIR_Salon, PIR_SBD...)
      	},

      On peut en placer autant que nécessaire et si n’importe lequel change de valeur, alors le script est exécuté.

    Remarquez les {} pour englober tous les matériels mentionnés dans le on= et les virgules en bout de ligne.

  • execute: C’est ici qu’est le coeur du script, c’est ici que vous déclencherez vos actions telles que changement d’états , envoi de notification, affectation de variables … Plus besoin de commandArray anymore.

Voyons maintenant une fonctionnalité puissance de dzVents le mot clé timer :

Le mot clé timer

Nous avons vu plus que que dans un on = { } on peut placer le mot timer pour gérer du temps.

Il faut savoir que Domoticz ne sait pas gérer du temps en dessous de la minute, aucun script Lua ne peut être lancé en dessous de cette limite, ceci dit dzVents apporte de la souplesse pour pouvoir faire de vrais plannings.

Voyons les nombreuses fonctions liées à cela.

Attention aux crochets [], ils sont indispensables (c’est du Lua):

on = {
    'timer'                            -- la forme basique ce script est lancé tt les minutes
    ['timer'] = 'every minute',        -- pareil qu'au dessus mais c'est plus clair non ?
    ['timer'] = 'every other minute',  -- minutes: qui semble t'il sont paires xx:00, xx:02, xx:04, ..., xx:58
    ['timer'] = 'every <xx> minutes',  -- toutes les xx minutes à partir de xx:00 (0 à 60)
    ['timer'] = 'every hour',          -- toutes les heures 00:00, 01:00, ..., 23:00  (24x par 24hrs)
    ['timer'] = 'every other hour',    -- toutes les heures paires 00:00, 02:00, ..., 22:00  (12x par 24hrs)
    ['timer'] = 'every <xx> hours',    -- toutes les xx heures à partir de 00:00, (0 à 24) 
    ['timer'] = 'at 13:45',            -- c'est vous qui précisez l'heure HH:MM
    ['timer'] = 'at *:45',             -- toutes les 45eme minute de chaque heure
    ['timer'] = 'at 15:*',             -- toutes les minutes entre 15:00 et 16:00
    ['timer'] = 'at 13:45 on mon,tue', -- a 13:45 seulement lundi,mardi (c'est en english pour les jours, souvenez vous)
    ['timer'] = 'every hour on sat',   -- chaque heure que le samedi
    ['timer'] = 'at sunset',           -- au coucher/lever du soleil (utilise les infos deDomoticz)
    ['timer'] = 'at sunrise',
    ['timer'] = 'at sunset on sat,sun' -- au coucher les samedi et dimanche

    -- et cerise sur le gâteau on peut en placer plusieurs à la queue leu-leu, à la queue leu-leu
    -- et on s'éclate à la queue leu-leu: 
    
    ['timer'] = {'at 13:45', 'at 18:37', 'every 3 minutes'}, },

Voyez la puissance de la dernière syntaxe quand à la création de plannings simples et clairs à lire.

Dans la vraie vie cela fait qq chose comme cela :

return {
    active = true,
    on = {
        ['timer'] = {
            'at sunset',
            'at 01:00',
            'at 18:37'}
 },

Remarquez les {} pour englober tous les horaires mentionnés dans [‘timer’] et la virgule au bout de ligne (sauf la dernière)

j’ai bien cherché quelques images/vidéo pour égayer mais à part à la queue leu-leu je n’ai rien trouvé alors il n’y aura pas d’illustration dans cet article.

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz.

2 Comments

  1. Merci Patrice pour la présentation de dzVents !
    J’avais vu ça passé sur le forum officiel et tu m’as donner l’envie d’y passer.
    Pour l’instant, je l’utilise avec succès pour créer des interactions simples très facilement. (ajout d’un mode vacances, alerte capteur mort, manipulation de données venant de différents capteurs…)
    Je convertirais certains scripts au besoin au fur et à mesure.
    Le gros avantage est que ça soulage les appels à la BDD.
    Un seul appel par minute pour tout les script Timer au lieu d’un appel par script_time.

  2. Pour des actions nécessitant des plages horaires, dates, heures ou des interactions multiples entres periphériques dzVents est vraiment pratique et en effet cela soulage notablement les processeurs
    Enchanté d’avoir pu faire découvrir cet outil

Comments are closed.