Vous êtes sans doute nombreux à avoir vu passer l’info: depuis quelques semaines il existe un nouveau type de langage de scripts que l’on peut intégrer à Domoticz, les dzEvents de dannybloe.
Langage de script qui se veut plus simple et plus lisible que Lua et qui est une surcouche du Lua Domoticz. Ainsi le dzEvent sera « retraduit » en « vrai » Lua. L’idée est de faciliter la lecture/ecriture de scripts.
Vous trouverez donc ici la traduction à ma sauce et des débuts d’explications de ces ressources anglophones : http://www.domoticz.com/forum/viewtopic.php?f=23&t=10834&sid=b844044efb6fbeb0841881a164361a0c
et https://github.com/dannybloe/dzVents
Voici donc le pitch de dzEvents
Présentation
dzVents (|diː ziː vɛnts| raccourci pour Domoticz Easy Events) apporte un nouveau type de scripting dans Domoticz.
Vous pouvez gérer vos switches facilement,vous aurez un contrôle sur les scripts basés sur le temps avec un vrai planning, dzEvent vous apporte une API qui utilise toutes les informations de Domoticz issues de toutes les différentes tables de Domoticz.Plus de commandArrays complexes car dzEvent les encapsule tous y compris les écritures et lecture de vos périphériques.
Et cerise sur le gâteau la performance des scripts à été améliorée : si vous avez beaucoup de scripts Domoticz ne cherchera qu’une seule fois l’information pour vos script device et time au lieu de parcourir tous les scripts un par un.
Un exemple :
Imaginez que nous ayons un switch, qui à son changement d’état doit activer un autre switch si et seulement si la température d’une pièce est supérieure à une valeur niveau puis nous envoyer une notification
En dzEvent cela donne :
return { active = true, on = { 'Premier switch' }, execute = function(domoticz, roomSwitch) if (roomSwitch.state == 'On' and domoticz.devices['Salon'].temperature > 18) then domoticz.devices['Autre switch'].switchOn() domoticz.notify('Ca marche!', 'J'ai eteint car il faisait trop chaud', domoticz.PRIORITY_LOW) end end }
Pas mal !
Remarquez la syntaxe du haut on = , c’est le déclencheur sur l’état de quelque chose.
Un autre exemple avec des dates/heures/jours, le on = est ici un timer
return { active = true, on = { ['timer'] = {'Every 10 minutes on mon,tue,wed,thu,fri'} }, execute = function(domoticz) -- check time of the day if (domoticz.time.isDayTime and domoticz.variables['myVar'].nValue == 10) then domoticz.variables['anotherVar'].set(15) --activate my scene domoticz.setScene('Evening lights', 'On') if (domoticz.devices['My PIR'].lastUpdate.minutesAgo > 5) then domoticz.devices['Bathroom lights'].switchOff() end end end }
Voyez qu’ici toutes les 10 minutes les lundi,mardi,mercredi,jeudi,vendredi on va lire une variable MyVar et si elle est égale a 10 on met une autre variable nommée ‘AnotherVar’ à 15 et on active une scène ‘Evening lights’ et si le périphérique nommé PIR n’a rien vu bouger depuis 5 minutes on met Bathroom lights à off par un switchOff.
Simple et concis.
Voyons la mise en place.
Installation.
Note: Ceci n’est pas testé pour des machines non-linux (Windows). Je suis certain que vous aurez des problèmes (dixit dannybloe concepteur du script).
Récupérez la dernière version depuis GitHub, décompressez la dans le dossier de vos scripts Lua (/domoticz/scripts/lua
)
cd domoticz/scripts/ https://github.com/dannybloe/dzVents/archive/master.zip unzip master.zip
Vous obtenez un dossier dzEvent-master, entrez à l’intérieur prenez en le contenu (copier) et recopiez le directement dans le dossier Lua (coller) pour obtenir cela :
Supprimez dzEvent-master une fois que tout est fonctionnel.
En résumé, un dossier dzVents,
puis les fichiers dzVents contenant :
domoticz/
scripts/
lua/
dzVents/
... <dzVents files> ...
examples/
tests/
scripts/
script_time_main.lua
script_device_main.lua
dzVents_settings.lua
... <other stuff that was already there> ...
Ouvrez le fichier dzVents_settings.lua
et placez vos ip et numéro de port Domoticz. Merci de vérifier que vous n’utilisez pas de user/password pour le réseaux locaux (127.0.0.1) dans la config de Domotic sinon dzVents ne pourra lire les valeurs de vos équipements !
Dans ces settings on peut régler le niveau de log souhaité, plus ou moins bavard, 3 étant le plus loquace et utile au tout départ afin de savoir si tout marche. Repassez le à 2 ensuite.
Le [‘Enable http fetch’] à placer à True ou False permet à dzVents d’interroger régilièrement Domoticz et de mettre à disposition des scripts dzVents toutes les valeurs de Domoticz d’un seul coup.
[‘Domoticz ip’] = ‘192.168.1.81’,
[‘Domoticz port’] = ‘8080’,
[‘Fetch interval’] = ‘every 30 minutes’, — see readme for timer settings
[‘Enable http fetch’] = true, — only works on linux systems
[‘Log level’] = 3
}
Le dossier nommé scripts devra contenir nos scripts dzVents, il suffit juste de les nommer en .lua, plus besoin de script_device, ou script_time…
Et tout de suite les logs Domoticz doivent vous donner trace de l’activité de dzEvents (ici avec niveau de log = 3)
LUA: Found otherdevices_utility adding this as a possible attribute LUA: Found otherdevices_svalues adding this as a possible attribute LUA: Found otherdevices_humidity adding this as a possible attribute LUA: Found otherdevices_idx adding this as a possible attribute LUA: Found otherdevices_dewpoint adding this as a possible attribute LUA: Found otherdevices_temperature adding this as a possible attribute LUA: Found otherdevices_lastupdate adding this as a possible attribute LUA: Event in devicechanged: Memory Usage_Utility value: 7.7199997901917 LUA: Searching for scripts for changed device: Memory Usage LUA: Event in devicechanged: Memory Usage value: LUA: Searching for scripts for changed device: Memory Usage LUA: Found otherdevices_utility adding this as a possible attribute LUA: Found otherdevices_svalues adding this as a possible attribute LUA: Found otherdevices_humidity adding this as a possible attribute LUA: Found otherdevices_idx adding this as a possible attribute LUA: Found otherdevices_dewpoint adding this as a possible attribute LUA: Found otherdevices_temperature adding this as a possible attribute LUA: Found otherdevices_lastupdate adding this as a possible attribute LUA: Event in devicechanged: CPU_Usage value: LUA: Searching for scripts for changed device: CPU_Usage LUA: Event in devicechanged: CPU_Usage_Utility value: 1.4700000286102 LUA: Searching for scripts for changed device: CPU_Usage LUA: Found otherdevices_utility adding this as a possible attribute LUA: Found otherdevices_svalues adding this as a possible attribute
Bien maintenant que ça marche , continuons.
Si cela ne fonctionne pas vérifiez bien votre arborescence /domoticz/scripts/lua/dzevent avec le fichier de settings dans /lua
Mon premier script dzVents
Créons notre premier script :
Récupérez le nom exact d’un de vos switchs ici un capteur PIR nommé ‘Présence’ puis copiez ce script dans le dossier scripts (/domoticz/scripts/lua/scripts). Nommez le comme bon vous semble ici test.lua
Le script envoie une notification et affiche un message dans le log Domoticz lors de son passage à ON et envoie une notification lors du passage à OFF.
return { active = true, on = { 'Présence' }, execute = function(domoticz, switch) if (switch.state == 'On') then domoticz.notify('Alerte!', 'Capteur Presence à ON!', domoticz.PRIORITY_NORMAL) domoticz.log ('il y qq ds le salon') else domoticz.notify('Fin d'alerte', 'Plus rien à signaler', domoticz.PRIORITY_NORMAL) end end }
le log affiche alors (en mode 3)
LUA: Found otherdevices_temperature adding this as a possible attribute LUA: Found module in /home/pi/domoticz/scripts/lua/scripts folder: test LUA: Event in devicechanged: Présence value: On LUA: Searching for scripts for changed device: Présence LUA: Handling events for: "Présence", value: "On" LUA: ===================================================== LUA: >>> Handler: test LUA: >>> Device: "Présence" Index: 157 LUA: ..................................................... LUA: il y a qq ds le salon LUA: ..................................................... LUA: <<< Done LUA: ----------------------------------------------------- LUA: [1] = SendNotification: Alerte!#Capteur Presence à ON!#0#pushove LUA: ===================================================== Notification sent (email) => Success Notification sent (http) => Success EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_main.lua 2016-03-28 14:42:45.330 (Z-Stickusb11) Light/Switch (Présence)
Voila, après cette première étape nous découvrirons d’autres fonctionnalités dans de prochains articles.
P.S : il y a un dossier examples dans le dossier dzVents contenant quelques fichiers exemple, n’hésitez pas à les ouvrir pour vous en inspirer.
Bonjour et merci pour ce tutoriel clair et concis
une légère faute de frappe à signaler ligne 12 du script test.lua
Bonjour
En effet c’est corrigé (j’ai supprimé le d apostrophe) 🙂
Bonjour,
Avec Domoticz 3.8394, après plusieurs heures de recherche, votre exemple n’est pas ok :
###NOK###
domoticz.devices[‘Autre switch’].switchOn()
Il faut :
###OK###
domoticz.devices(‘Autre switch’).switchOn()