Page 3 sur 4

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 11:43
par Neutrino
Je viens de tester sur une VM ubuntu 16.4 et la dernière beta de Domoticz et c'est vraiment rapide :o
Par contre sur mon Pi 2, le pass2php.php bloque au curl.
D'ailleurs, quel est l'intérêt du PHP (à part le langage de programmation)?
Un curl dans un lua lancé par un os.execute() n'aurait-il pas le même résultat ? :roll:

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 11:47
par vil1driver
Essai la modification que je citais plus haut..

Très bonne question ça, tu testes et nous redis ;) ?
Moi j'aurais bien aimé pouvoir désactiver la fonction anticolision RF du rfxcom.

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 12:08
par deennoo
Je pense que auteur utilise le PHP car il a des facilités avec ce language.

Je vais l'utiliser pour les actions qui ont besoin de temps de reaction "immediat" comme l'allumage de luminaire.

Pour d'autre cas de figure "la lantence" de domoticz pose moins de soucis (gestion de vmc, ou chauffage, arrosage etc)

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 12:44
par vil1driver
je viens de faire l'essai dans un script device d'utiliser un os.execute(curl blabla..
et c'est aussi réactif qu'avec la variante php :D et même plus encore car je passe à 50ms max
certainement due au fait que l'on ne charge pas JSON.lua ni ee5_base64.lua et n'effectuons pas les traitements associés

donc si on évite d'utiliser dans nos script device les traditionnels commandArray[device] au profit de curl on est bon ;)

je vais tenter de vous proposer un truc sympa pour simplifier cet usage dans nos script

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 13:09
par vil1driver
alors voila :


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

Code : Tout sélectionner

curl = '/usr/bin/curl ' -- ne pas oublier l'espace à la fin
json = assert(loadfile '/home/pi/domoticz/scripts/lua/JSON.lua')() -- for linux http://regex.info/blog/lua/json

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

-- get group/scene idx
function groupIdx(device)
	local getallgroups = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=scenes"'))
	local readallgroups = getallgroups:read('*all')
	getallgroups:close()
	alldecoded = json:decode(readallgroups)
	allgroups = alldecoded.result
	for n, group in pairs(allgroups) do
		if (group.Name == device) then
			return group.idx
		end	
	end
end

-- 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 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='..groupIdx(device)..'&switchcmd=On" &')
end

-- switch Off a group
function groupOff(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchscene&idx='..groupIdx(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
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "modules"
puis dans vos scripts

Code : Tout sélectionner

commandArray['ma lampe']='On'	 			devient		switchOn('ma lampe')
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 (au moins 10 fois)

exemple:
un script qui va allumer la lumière dans la pièce dès que j'ouvre la porte
avant nous aurions ceci
script_device_porte.lua

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 
maintenant nous avons

Code : Tout sélectionner

-- chargement des modules
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "modules"

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 
plus sympa que le php non ? :mrgreen:

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 13:50
par deennoo
Nickel !

Du coup on peut aussi ce servir de la fonction set on/off for x minutes.

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 13:58
par Neutrino
Rah ! merci !
Je me prends la tête depuis mon dernier poste pour faire marcher le curl dans os.execute sans succès.
Et ton script marche sans problème avec la même syntaxe sauf le port.
Je bosse sur le 80 donc ça devrait marcher sans mais non...
Je cherche plus et te dis merci ;)

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 18:49
par deennoo
je viens egalment de faire un test : c'est pal mal non plus :

Code : Tout sélectionner

2016-10-09 18:44:24.703 User: Admin initiated a switch command (13/Plafonnier Loisir/Toggle)
2016-10-09 18:44:24.703 RFLink Sending: 10;TriState;080002;2;OFF
2016-10-09 18:44:24.548 (RFLink Ser2net) Light/Switch (Inter loisir)
2016-10-09 18:44:25.587 Hardware Monitor: Fetching data (System sensors)
2016-10-09 18:44:25.731 LUA: TWICE : Plafonnier Loisir -> Off
2016-10-09 18:44:25.732 EventSystem: Script event triggered: Device Twice
2016-10-09 18:44:25.548 (RFLink Ser2net) Light/Switch (Plafonnier Loisir)
2016-10-09 18:44:26.305 (RFXTRXE) Lighting 2 (Inter Loisir 2)
2016-10-09 18:44:26.926 RFLink Sending: 10;TriState;080002;2;OFF
Debut de l'action a 18.44.24.548 reception de la commande de l'interupteur
Envoie de la trame vers l'eclairage : 18:44:24.703

Soit 155ms dans le logiciel, a cela s'ajoute le transport de l'information rflink ser2net vers domoticz et un retour domoticz ser2net.

Hier c'etait la journée test Pass2pho, aujourd sera celle de modules.

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 19:17
par deennoo
vil1driver a écrit ::

Code : Tout sélectionner

-- switch On a device
function switchOn(device)
	os.execute(curl..'"'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=On" &')
end
Merci pour le script, Pour le toggle, ok fastoche

Mais pour activer une scene ou un groupe ? (alors oui je peux toujours le faire un/un mais comme j'ai passer du temps a les faires mes scenes et groupe bah je veux les garder).

J'ai a peu prés compris que tu recuperais l'idx du device a changer avec

Code : Tout sélectionner

'..otherdevices_idx[device]..'
idée pour les scenes/groupes ?

Code : Tout sélectionner

'..otherscenes_idx[device]..'
Ne donne rien s'aurait été trop simple...

Re: Domoticz met plus d'une seconde à exécuter mes actions

Publié : 09 oct. 2016, 19:42
par vil1driver
:( je ne sais pas le wiki n'en parle pas.. ça sent une futur demande chez les anglais ça :)