voici donc le code et le VD suite aux optimisations de lazer concernant l'interruption de la boucle for et la prise en compte des modules à exclure.
bouton Tout 2teindre
----------------------------------
-- User Settings
----------------------------------
-- Modules à exclure et fonction de traitement (pas raccordés à des lumières)
-- Peut contenir un id ou un mot clés à chercher dans le nom du module
toExclude = {}
----------------------------------
-- DO not change bellow this line
----------------------------------
-- Modules à exclure ou inclure et fonction de traitement (pas raccordés à des lumières)
-- Peut contenir un id ou un mot clés à chercher dans le nom du module
-- toExclude = {72, "Dispo", "Volet", "Bubendorff"}
function shouldExclude(module)
for _, v in pairs(toExclude) do
if string.find(module.name, v) ~= nil or module.id == v then return true end
end
return false
end
----------------------------------
-- double click pour confirmer
----------------------------------
-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
if (current == msg) then
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ")
return true
else
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg)
fibaro:sleep(secondes*1000)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","")
return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " "
end
end
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local label_id = "lblMessage" -- l'ID du label qui recevra le message
local duree = 4 -- la durée max entre 2 clique (en seconde)
local message = "Ré-appuyer dans les "..duree.." secondes pour confirmer" -- le message de confirmation
if ( confirm(message, label_id, duree) ) then
fibaro:log("Confirmé")
-- votre code ici en cas de confirmation
-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local payload = "/api/devices"
local response, status, errorCode = HC2:GET(payload)
if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
local jsonTable = json.decode(response)
-- Boucle sur les modules
for device = 1, #jsonTable do
-- look for lighting devices
if jsonTable[device].interfaces and not shouldExclude(jsonTable[device]) then
for interface = 1, #jsonTable[device].interfaces do
if jsonTable[device].interfaces[interface] == "light" then
local DeviceValue = tonumber(jsonTable[device].properties.value)
if (DeviceValue and DeviceValue > 0) or (jsonTable[device].properties.value == "true") then
--fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface])
--fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off")
fibaro:call(jsonTable[device].id, "turnOff")
end
break
end
end
end
end
else
fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>')
end
else
fibaro:log("Annulé")
-- votre code ici en cas d'annulation
end
Bouton analyse
----------------------------------
-- User Settings
----------------------------------
IconeAllume = 47
IconeEteint = 48
-- Modules à exclure ou inclure et fonction de traitement (pas raccordés à des lumières)
-- Peut contenir un id ou un mot clés à chercher dans le nom du module
-- toExclude = {72, "Dispo", "Volet", "Bubendorff"}
toExclude = {}
----------------------------------
-- DO not change bellow this line
----------------------------------
local selfID = fibaro:getSelfId()
local HC2 = Net.FHttp("127.0.0.1", 11111)
-- Variable du compteur
compteurLumieres = 0
-- clear labels
for i = 1, 10 do
fibaro:call(selfID, "setProperty", "ui.Lum" ..i.. ".value", "")
end
-- FUNCTIONS
function debug(text, color)
color = color or "white"
fibaro:debug("<font color='"..color.."'>"..text.."</font>")
end
function shouldExclude(module)
for _, v in pairs(toExclude) do
if string.find(module.name, v) ~= nil or module.id == v then return true end
end
return false
end
-- END OF FUNCTIONS
-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local payload = "/api/devices"
local response, status, errorCode = HC2:GET(payload)
if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
local jsonTable = json.decode(response)
-- Boucle sur les modules
for device = 1, #jsonTable do
-- look for lighting devices
if jsonTable[device].interfaces and not shouldExclude(jsonTable[device]) then
for interface = 1, #jsonTable[device].interfaces do
if jsonTable[device].interfaces[interface] == "light" then
local DeviceValue = tonumber(jsonTable[device].properties.value)
if (DeviceValue and DeviceValue > 0) or (jsonTable[device].properties.value == "true") then
--fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface])
--fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off")
compteurLumieres = compteurLumieres + 1
debug("lumière : " .. jsonTable[device].name .. " ("..jsonTable[device].id..")" ,"red")
if compteurLumieres <= 10 then
fibaro:call(selfID, "setProperty", "ui.Lum"..compteurLumieres..".value", jsonTable[device].name .. " ("..jsonTable[device].id..")")
end
end
break
end
end
end
end
else
fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>')
end
fibaro:call(selfID, "setProperty", "ui.lumieres.value", compteurLumieres)
-- Mise à jour de l'icône
debug(compteurLumieres.." lumière(s) allumée(s)", "green")
if (compteurLumieres > 0)then
fibaro:call(selfID, "setProperty", "currentIcon", IconeAllume)
else
fibaro:call(selfID, "setProperty", "currentIcon", IconeEteint)
end
main loop :
-----------------------------------------------------------
-- Toutes lumières v2.0
-- http://www.domotique-fibaro.fr/index.php/topic/4251-voir-si-une-lumi%C3%A8re-est-allum%C3%A9e-et-tout-%C3%A9tindre/
-----------------------------------------------------------
-- Extinction de l'ensemble des lumières de la maison
-----------------------------------------------------------
-- Changelog
-- 4.3 (09/11/2015 - lazer/jojo) : breack dans loop for et check des toexclude()
-- 4.2 (08/11/2015 - sebcbien/lazer/jojo) : inclus le test pour les dimers
-- 4.0 (07/11/2015 - jojo) : test s'il s'agit d'une lumière via .interfaces
-- 3.0 (04/09/2015 - jojo) : fin compatibilité 3.x
-- affichage liste lumières allumées
-- 2.0 : compatibilité v3.x - v 4.x
-- + correction bug exclusion
-- + affichage
-- + double clik pour confirmer extinction globale
-- 1.3 : Liste d'exclusion pouvant contenir des id de modules ou des mots clés dans les noms
-- 1.2 : Correction du test d'état prenant en charge les
-- modules variateurs et rétablissement de la
-- condition pour l'exctinction
-- 1.1 : Extinction inconditionnelle et prise en charge des
-- modules variateurs
-----------------------------------------------------------
----------------------------------
-- User Settings
----------------------------------
----------------------------------
-- DO not change bellow this line
----------------------------------
fibaro:debug("VD Toutes lumières")
fibaro:call(fibaro:getSelfId(), "pressButton", "14")
Toutes_Lumieres_v4.3.vfib