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

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 ?

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

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¶m=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Set%20Level&level='..level..'" &')
else
os.execute(curl..'"'..domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=On" &')
end
end
-- switch Off a device
function switchOff(device)
os.execute(curl..'"'..domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Off" &')
end
-- Toggle a device
function switch(device)
os.execute(curl..'"'..domoticzURL..'/json.htm?type=command¶m=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¶m=switchscene&idx='..groupIdx(device)..'&switchcmd=On" &')
end
-- switch Off a group
function groupOff(device)
os.execute(curl..'"'..domoticzURL..'/json.htm?type=command¶m=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é

(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 ?

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¶m=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
idée pour les scenes/groupes ?
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
