[LUA] Speedup accélérer la réactivité de domoticz

Vous avez créé 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.
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

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

Message par Phebus06 »

landaisbenj a écrit :C'est avec toi qu'on avait deja discuté d'une commande pour la couleur et l'intensité en meme temps ? Car en cherchant pour ta reponse je suis tombé la dessus sur l'API JSON de domoticz:
Plutôt que de spécifier des paramètres de teinte / luminosité, vous pouvez utiliser un triplet hexadécimal RVB via '& hex =' comme suit

Code : Tout sélectionner

/json.htm?type=command¶m=setcolbrightnessvalue&idx=99&hex=RRGGBB&brightness=100&iswhite=false
dans ce cas, l'intensité est inhérente à la valeur hexadécimale (c'est-à-dire que ff0000 représente le rouge de pleine luminosité alors que par exemple 3f0000 est également rouge pur mais sera plus faible) et le paramètre & brigntness ne fait rien. Le laisser dehors cependant semble causer des problèmes avec le scintillement de Philips Hue donc mieux le laisser à 100. Un site comme colorhexa peut être utilisé pour aider à choisir des valeurs hexadécimales selon les couleurs désirées.
Sinon oui, le faire comme ca en temps que fonction dois pouvoir fonctionner. Et tu aurais même pu faire "switchColor(device,color,intensite)"...

Je ne sais pas pourquoi cela ne fonctionne pas. Par contre ici:

Code : Tout sélectionner

   switchOn('ruban led salon', '50')
   switchColor('ruban led salon', '2E64FE')
Avec ta première commande tu demande la lumière a "ON" avec intensité a 50% et avec la deuxième tu demande en couleur avec intensité a 5%:

Code : Tout sélectionner

".'&hex='..color..'&[u]brightness=5[/u]&iswhite=false'" &')".
Je ne sais pas si c'est compatible tout ca... deux brightness et une couleur hexadecimal (suivant ce que j'ai collé en haut du post)

As-tu d'abord essayé ca avec un simple bouton test ?

Code : Tout sélectionner

os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=setcolbrightnessvalue&idx='..otherdevices_idx[device]..'&hex='..color..'&brightness=5&iswhite=false'" &')
Oui c'est moi :D ... et je ne fais pas de fixette sur les rubans et ampoules RGB mais comme j'en ai autant les utiliser au mieux lol

Alors oui c'est volontaire d'avoir mis un brightness à 5% dans le modules.lua (mais comme tu l'a noté plus haut, il me semble aussi que quelque soit la valeur cela ne fonctionne pas), car au cas ou ça fonctionne, ça évitera d'avoir un flash quand ça s'allume car d'abord une commande qui allume à 100% et choisi la couleur, et ensuite mettre une intensité plus faible c'est pas très waf...
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

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

Message par Phebus06 »

hihi je viens de voir que j'avais écrit mes lignes à l'envers pour ma logique du flash que j'expliquais lol
évidement j'avais écrit ça :

Code : Tout sélectionner

 switchColor('ruban led salon', '2E64FE')      --donc au pire si l'intensité fonctionne ça s'allume à 5%
 switchOn('ruban led salon', '50')                 --puis intensité à 50%
je l'ai pensé comme ça car je pouvais sur la page de domoticz, choisir la couleur sur la palette avant d'allumer le ruban led. Mais peut être quand ligne de commande ça ne peut fonctionner.

Du coup faut que j'essaie dans l'autre sens aussi voir ce que ça fait.

Par contre tu as raison je dois pouvoir faire tout ça avec la même fonction switchOn('mondevice','couleur','intensité')

Bon j'ai encore pas mal d'essai à faire ce soir. C'est ma femme qui va être contente MDR...
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

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

Message par Nissa »

Bonjour,
Ca ne fonctionne pas chez moi erreur :
/home/pi/domoticz/scripts/lua/modules.lua:494: attempt to concatenate field '?' (a nil value)
La ligne 494

Code : Tout sélectionner

os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=On&passcode='..domoticzPASSCODE..'" &')
Je suppose qu'il s'agit d'un problème sur domoticzPSWD et du domoticzPASSCODE.
J'ai essayé renseigné ou non renseigné, toujours la même erreur.
Une idée ?
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

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

Message par landaisbenj »

Montre nous les variables et la commandes de ton script
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

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

Message par Nissa »

Le script fonctionne correctement avec les commandArray

Code : Tout sélectionner

   
 if(otherdevices[switch]=='Off') then
      -- commandArray[switch]='On'
      switchOn('switch')
 end 
 
et mes déclarations dans modules.lua :

Code : Tout sélectionner

-- domoticz
domoticzIP = '192.168.22.xx'	--'127.0.0.1'
domoticzPORT = '8080'
domoticzUSER = 'xxx'		-- nom d'utilisateur
domoticzPSWD = 'xxx'		-- mot de pass
domoticzPASSCODE = 'xxx'	-- pour interrupteur protégés
domoticzURL = 'http://xxxxx:8080'
Pour PASSCODE, je n'utilise pas d'interrupteur protégé, (je ne sais d'ailleurs pas où cela se configure !), j'ai donc mis le même mot de passe que PSWD
Merci pour ton aide
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

Remplace

Code : Tout sélectionner

switchOn('switch')
Par

Code : Tout sélectionner

switchOn(switch)
Car dans ton cas switch est une variable et non le nom de ton inter

domoticzURL n'a pas à être modifié comme tu l'as fait
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
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

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

Message par Nissa »

Ooops, oui effectivement, j'ai bêtement collé mon URL dans domoticzURL, j'avais pas vu qu'il fallait mettre les variables précédemment déclarées.
Et là ça fonctionne !!!!
Une fois de plus, mille mercis VIL1DRIVER
A+
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

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

Message par Phebus06 »

Bonjour,
Alors voici Speedup.lua avec le choix de la couleur pour les ampoules, ruban RGB qui fonctionne bien chez moi :D .

Speedup.lua

Code : Tout sélectionner

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

Dans tous mes script_device_blabla.lua dans lesquels je souhaite avoir un gain de réactivité,
je dois ajouter au tout début ces 2 lignes pour charger Speedup.lua

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

]]

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

domoticzIP = '192.168.1.92'
domoticzPORT = '8080'
domoticzUSER = 'toto' --bien sur a changer par le sien
domoticzPSWD = 'zéro' --idem mettre son code
domoticzURL = 'http://'..domoticzIP..':'..domoticzPORT


-- switch On a device and set level if dimmmable
function switchOn(device, level)
   if level ~= nil then
      os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Set%20Level&level='..level..'" &')
   else   
      os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..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..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=switchlight&idx='..otherdevices_idx[device]..'&switchcmd=Off" &')
end

-- Toggle a device
function switch(device)
   os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..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..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..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..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=switchscene&idx='..otherdevices_scenesgroups_idx[device]..'&switchcmd=Off" &')
end

-- switch Color device if RGB
function switchColor(device, color)
   os.execute(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=setcolbrightnessvalue&idx='..otherdevices_idx[device]..'&hex='..color..'&brightness=false&iswhite=false" &')
end


--[[

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)
								devient      switchColor('ma lampe RGB', 'couleur HTML')
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')

]]

Et un petit exemple qui chez moi allume un ruban led dans la chambre quand on passe dans le couloir. Ca ne sert à rien lol c'était pour faire les test...
script_device_essai.lua

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/Speedup.lua')
local debug = true  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

commandArray = {}

-- si le capteur de mouvement de l'entrée = On alors allume le ruban de led de la chambre pendant 60 secondes, avec la couleur rose, à l'intensité de 3%
if (devicechanged['Xiaomi Détecteur de Mouvement Entrée'] == 'On' ) then

switchOnFor('Ruban Led de la Chambre', '60')
switchColor('Ruban Led de la Chambre', '000501')
switchOn('Ruban Led de la Chambre', '3')

   
end
return commandArray
ATTENTION, les actions se font de haut en bas donc il faut bien respecter l'ordre pour que cela fonctionne.
Et maintenant amusez-vous bien :D
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

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

Message par landaisbenj »

Bien joué !
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
plouf34
Messages : 111
Inscription : 04 déc. 2016, 18:33

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

Message par plouf34 »

Bonjour à tous
Je tourne maintenant sur Windows, cette ligne pour l’appel du modules.lua bien entendu ne fonctionne plus

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

Que dois je mettre sachant que le fichier est dans c:\program files (x86)\domoticz\......

Merci d’avance.
Répondre