lamouette a écrit :Afin d'améliorer le WAF, je voulais que le bouton rond Xiaomi puisse allumer et éteindre des lampes (en 433) avec un simple click sur celui-ci.
Rien de bien compliqué, mais dans mon cas, l'objet était de piloter un "groupe" de lampes définit dans domoticz.
Stupeur

LUA ne permet pas de faire cela nativement
Après quelques recherches sur le forum domoticz.com, voici ce qu'il en ressort :
Code : Tout sélectionner
-- Allumage et extinction des lampes du salon avec 1 click sur bouton rond Xiaomi
-- script_device_xiaomi1click
commandArray = {}
function GroupState(sArray)
-- https://www.domoticz.com/forum/viewtopic.php?p=102783#p102783
-- v1.0. 2016-01-18
-- Checks the state of a group of swithces.
-- USAGE : GroupState({'Switch1','Switch2','Switch3','Switch4','Switch5',more switches})
-- RETURNS : 'On' if all switches are on.
-- : 'Off' if all switches are off.
-- : 'Mixed" if one or more, but not all switches are on.
--
local iState = 0
local iCount = 0
local sState = ''
for i,light in pairs(sArray) do
if (otherdevices[light] == 'On') then
iState = iState + 1
end
iCount = iCount + 1
end
if(iState == 0) then sState = "Off" end
if(iState > 0) then sState = 'Mixed' end
if(iState == iCount) then sState = 'On' end
-- print("iCount : " .. iCount)
-- print("iState : " .. iState)
-- print("sState : " .. sState)
return sState
end
salon = {'TV','Canapé','Buffet','Fauteuil'}
if (devicechanged['Xiaomi Wireless Switch'] == 'Click') then
if (GroupState(salon) == 'Off') then
commandArray['Group:salon_all_light']='On'
end
if (GroupState(salon) == 'On') then
commandArray['Group:salon_all_light']='Off'
end
if (GroupState(salon) == 'Mixed') then
commandArray['Group:salon_all_light']='Off'
end
end
On crée dans un premier temps une fonction, qui ensuite prend en paramètre les switchs (ici des lampes) définis dans votre groupe.
Ici :
- si lampes toutes éteintes (ie group = Off), un click sur le bouton les allume toutes;
- si lampes toutes allumées (ie group = On), un click sur le bouton les éteint toutes;
- si certaines lampes sont allumées (ie group = Mixed), un click sur le bouton les éteint toutes.
Attention, si vous utilisez l’interpréteur de commandes LUA natif à Domoticz, veillez à bien le positionner sur LUA / Device.
Salut,
J'ai repris ton code... mais à mon avis, j'ai tout faux.
Déjà, moi, j'aimerai gérer idéalement l'appui long et l'appui court. Comment on gère la différence ? (le double clic est géré pour mettre l'alarme sur MiHome).
Ensuite, je n'ai pas un groupe de lumière, mais simplement un contacteur 433 Z1KPA que j'enclenche et qui est défini sur impulsion et comme cela dans Domoticz, en PushOnButton.
Du coup, j'ai modifié ton code... et j'ai nommé le code script_device_BoutonGarage.lua
Là, je ne trouve pas dans /domoticz/scripts/lua ce code déjà... alors qu'il est bien enregistré.
J'ai voulu commencer simple, en simplement générer une impulsion sur la porteGarage sur un clic.
Idéalement j'aimerai sur un appui long : faire Porte Garage et Portail Maison.
Ton code est pour un interrupteur, façon ON, qui passe OFF.
Moi j'aimerai simplement faire une impulsion, à mon avis, ça ne marchera pas...
Et ça marche pas ! Of course.
Du coup, déjà je retrouve pas mon script LUA.
Des idées ?
Code : Tout sélectionner
commandArray = {}
function GroupState(sArray)
-- https://www.domoticz.com/forum/viewtopic.php?p=102783#p102783
-- v1.0. 2016-01-18
-- Checks the state of a group of swithces.
-- USAGE : GroupState({'Switch1','Switch2','Switch3','Switch4','Switch5',more switches})
-- RETURNS : 'On' if all switches are on.
-- : 'Off' if all switches are off.
-- : 'Mixed" if one or more, but not all switches are on.
--
local iState = 0
local iCount = 0
local sState = ''
for i,portail in pairs(sArray) do
if (otherdevices[portail] == 'On') then
iState = iState + 1
end
iCount = iCount + 1
end
if(iState == 0) then sState = "Off" end
if(iState > 0) then sState = 'Mixed' end
if(iState == iCount) then sState = 'On' end
-- print("iCount : " .. iCount)
-- print("iState : " .. iState)
-- print("sState : " .. sState)
return sState
end
--PortesVoiture = {'Porte Garage (voiture)','Portail Maison (voiture)'}
PortesVoiture = {'Porte Garage (voiture)'}
if (devicechanged['Interrupteur Alarme Garage'] == 'Click') then
if (GroupState(PortesVoiture) == 'Off') then
commandArray['Group:Porte_Garage_all_portail']='On'
end
if (GroupState(PortesVoiture) == 'On') then
commandArray['Group:Porte_Garage_all_portail']='Off'
end
if (GroupState(PortesVoiture) == 'Mixed') then
commandArray['Group:Porte_Garage_all_portail']='Off'
end
end
Dommage que dans Scenes, on ne puisse pas avoir un bouton comme déclencheur ...
