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

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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:
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message 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.
Dernière modification par vil1driver le 09 oct. 2016, 12:09, 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
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

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

Message 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)
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message 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
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 : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message 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:
Dernière modification par vil1driver le 16 oct. 2016, 11:04, modifié 6 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
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

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

Message par deennoo »

Nickel !

Du coup on peut aussi ce servir de la fonction set on/off for x minutes.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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 ;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

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

Message 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.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

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

Message 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...
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

:( je ne sais pas le wiki n'en parle pas.. ça sent une futur demande chez les anglais ça :)
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