Speedup accélérer la réactivité de domoticz

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
vil1driver
Messages : 5338
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Speedup accélérer la réactivité de domoticz

Message par vil1driver »

Salut,

pour faire suite à ce sujet viewtopic.php?f=8&t=1898
je vous fais part ici de la solution collégialement trouvée (merci à Deennoo et Neutrino)

alors voila :

créer un fichier dans le dossier lua nommé modules.lua dont voici le contenu :

Code : Tout sélectionner


-- /!\ require Domoticz v3.5776 and after /!\

curl = '/usr/bin/curl ' -- don't forgot the final space

domoticzIP = '127.0.0.1'
domoticzPORT = '8080'
domoticzURL = 'http://'..domoticzIP..':'..domoticzPORT

-- switch On a device and set level if dimmmable
function switchOn(device, level)
	if level ~= nil then
		os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Set%20Level&level='..level..'" &')
	else	
		os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=On" &')
	end	
end

-- switch On a devive for x seconds
-- non compatible avec le script sendTwice
function switchOnFor(device, secs)
   switchOn(device)
   commandArray[device] = "Off AFTER "..secs
end

-- switch Off a device
function switchOff(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Off" &')
end

-- Toggle a device
function switch(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Toggle" &')
end

-- switch On a group or scene
function groupOn(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchscene&idx='..otherdevices_scenesgroups_idx[device]..'&switchcmd=On" &')
end

-- switch Off a group
function groupOff(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchscene&idx='..otherdevices_scenesgroups_idx[device]..'&switchcmd=Off" &')
end


en suite dans tous vos script_device_blabla.lua dans lesquels vous souhaitez avoir un gain de réactivité,
ajoutez au tout début ces 2 lignes pour charger modules.lua (en adaptant le chemin vers votre dossier lua au besoin)

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
puis dans vos scripts

Code : Tout sélectionner

commandArray['ma lampe']='On'	           devient		switchOn('ma lampe')
commandArray['ma lampe']='On FOR 30'      devient    switchOnFor('ma lampe', '30')
commandArray['ma lampe']='Off'				devient		switchOff('ma lampe')
commandArray['ma lampe']='Toggle'		   devient		switch('ma lampe')
commandArray['ma lampe']='Set Level 50'	devient		switchOn('ma lampe',50)
commandArray['Group:mon groupe']='On'	  devient		groupOn('mon groupe')
commandArray['Group:mon groupe']='Off'	 devient		groupOff('mon groupe')
commandArray['Scene:ma scène']='On'		 devient		groupOn('ma scène')
le temps de réponse en sera grandement amélioré :D

exemple avec un script qui va allumer la lumière dans la pièce dès que j'ouvre la porte ( script_device_porte.lua )

avant :

Code : Tout sélectionner

commandArray = {}

-- si la porte s'ouvre la nuit, on allume la lampe
if ( devicechanged['la porte'] == 'Open' and timeofday['Nighttime'] ) then

   commandArray['le salon']='On'
   
end
return commandArray 
temps de réponse:

Code : Tout sélectionner

2016-10-16 15:40:38.829 (rfx_net) Lighting 2 (la porte)
2016-10-16 15:40:38.846 LUA: > commandArray["le salon"]='On'
2016-10-16 15:40:39.647 (rfx_net) Lighting 1 (le salon)
soit 818ms :|

après :

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

commandArray = {}

-- si la porte s'ouvre la nuit, on allume la lampe
if ( devicechanged['la porte'] == 'Open' and timeofday['Nighttime'] ) then

   switchOn('le salon')
   
end
return commandArray 
temps de réponse:

Code : Tout sélectionner

2016-10-16 15:40:32.159 (rfx_net) Lighting 2 (la porte)
2016-10-16 15:40:32.179 LUA:  > switchOn("le salon")
2016-10-16 15:40:32.201 (rfx_net) Lighting 1 (le salon)
soit 42ms RADICAL :mrgreen:
Modifié en dernier par vil1driver le 08 avr. 2017, 10:16, modifié 29 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

vil1driver
Messages : 5338
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Speedup accélérer la réactivité de domoticz

Message par vil1driver »

MAJ du code pour utiliser la table ajoutée ce jour qui permet de récupérer l'idx d'un groupe par son nom.
Modifié en dernier par vil1driver le 17 oct. 2016, 00:24, modifié 1 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

frenchyyii
Messages : 301
Enregistré le : 16 oct. 2015, 06:29

Re: Speedup accélérer la réactivité de domoticz

Message par frenchyyii »

Il faut avoir compilé domoticz pour que ça fonctionne car je ne trouve même pas le dossier de modules ?
Merci

vil1driver
Messages : 5338
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Speedup accélérer la réactivité de domoticz

Message par vil1driver »

heu quel dossier modules :D
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

frenchyyii
Messages : 301
Enregistré le : 16 oct. 2015, 06:29

Re: Speedup accélérer la réactivité de domoticz

Message par frenchyyii »

Ok donc le dossier s'appelle Lua et c'est dedans que l'on met crée un fichier modules.lua

Sorry j'avais mal interprété la phrase ;)

Pas besoin de compiler du coup donc je présume.


Edit: les rares scripts lua que j'ai sont intégrés à la base ...vous pensez qu'il est intéressant de les refaire ?

Merci

vil1driver
Messages : 5338
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Speedup accélérer la réactivité de domoticz

Message par vil1driver »

;)

pas besoin de compiler non mais il faut au moins être en v3.5776 pour utiliser groupOn() groupOff()
pour le reste la v3.4834 suffit

je pense que tes scripts peuvent rester dans la base
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

frenchyyii
Messages : 301
Enregistré le : 16 oct. 2015, 06:29

Re: Speedup accélérer la réactivité de domoticz

Message par frenchyyii »

En effet ça fonctionne impec avec les scripts de la base.
Il y a un sacré gain !!! Merci beaucoup de nous faire bénéficier de telles améliorations !!

Cissou
Messages : 97
Enregistré le : 25 févr. 2015, 13:10

Re: Speedup accélérer la réactivité de domoticz

Message par Cissou »

Est-ce que ca fonctionne quand on utilise les capteurs d'un domoticz esclave dans les scripts d'un domoticz maitre ?

Grincheux

Re: Speedup accélérer la réactivité de domoticz

Message par Grincheux »

Nickel , merci les gars pour le boulot. :)

Pour ma part, les seuls scripts devices utilisent beaucoup de virtuel... mais bon le principe est là pour le futur.
2 remarques quand même :
Est ce normal que j'ai du remplacer l'ip 127.0.0.1 par mon ip de domoticz 192.168.1.xx, sinon marche pas, encore de la bidouille de host que je ne maîtrise pas...
Vous me confirmez, adios les fameux commandArray[1]={['xx']='Off'}, commandArray[2]={['xx']='On'} puisque j'ai testé et on en parle plus.
Sans avantage de réactivité, on peut étendre au script time pour la simplicité ?

vil1driver
Messages : 5338
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Speedup accélérer la réactivité de domoticz

Message par vil1driver »

étrange pour l'ip mais bon, tant que ça fonctionne ;)

commandArray est un tableau
:!: on ne peut pas avoir 2 lignes avec le même contenu pour la première colonne (l'id du tableau)
alors on triche en ajoutant une 3ème colonne.

en clair ceci est interdit
[ 'ma lampe' | 'On' ]
[ 'ma lampe' | 'Off' ]
alors on fait
[ '1' | 'ma lampe' | 'On' ]
[ '2' | 'ma lampe' | 'Off' ]
la méthode cité ici n'utilise pas du tout commandArray, on fait directement appel à la commande système curl
pour piloter domoticz via son api json, donc oui tu peux les chaîner

ceci est authorisé

Code : Tout sélectionner

switchOn('ma lampe')
switchOff('ma lampe')
effectivement dans un script_time le gain est négligeable mais oui tu peux l’utiliser si tu trouves ça plus pratique
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

Répondre