Aller au contenu

Messages recommandés

Posté(e)

Gé-nial !

Est-ce que tu peux poster le code du bouton analyse stp.

Ca m'évite de devoir changer mes id ou importer un module pour rien (suis déjàa des id 1980 :-/ )

Posté(e)

bouton Tout Eteindre

----------------------------------
-- 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 = {} 
toInclude = {}
 
----------------------------------
-- 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
 
function shouldInclude(module)
	for _, v in pairs(toInclude) 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 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
				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 = {}
toInclude = {}
 
----------------------------------
-- 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
 
function shouldInclude(module)
	for _, v in pairs(toInclude) 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 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
			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.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")

  • Upvote 1
Posté(e)

Suggestion d'optimisation :

 

A la fin de la condition suivante :

if jsonTable[device].interfaces[interface] == "light" then

je propose d'ajouter un :

break

afin de sortir de la boucle englobante :

for interface = 1, #jsonTable[device].interfaces do

Et donc gagner des cycles d'horloge

 

Ce qui donne :

...
	if jsonTable[device].interfaces 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
...
  • Upvote 1
Posté(e)

Avec les modifs de lazer et jojo testées:

Et ajout du lancement de l'analyse a la fin de tout éteindre (ligne 94), ainsi on a une confirmation instantanée à  la fin de l'extinction totale (moi je ne fait une analyse que toutes les 120s)

 

Bouton tout éteindre avec le break:

@lazer, sauf votre respect, Monsieur, le break doit être placé 1 étage plus haut sinon il n'éteint qu'une lampe.  :P

----------------------------------
-- 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 = {} 
toInclude = {}
 
----------------------------------
-- 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
 
function shouldInclude(module)
	for _, v in pairs(toInclude) 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 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
-- Refresh Status
fibaro:call(fibaro:getSelfId(), "pressButton", "14")

Bouton analyse avec le break:

----------------------------------
-- User Settings
----------------------------------
-- Identiants des icônes
IconeAllume = 1917
IconeEteint = 1918
 
-- 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 = {}
toInclude = {}
 
----------------------------------
-- 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
 
function shouldInclude(module)
	for _, v in pairs(toInclude) 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 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
						break
					end
				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

Et MA version du main loop (ajout d'une pause de 120s... la box lante déjà  assez comme ça, je n'aime pas la charger inutilement..)

-----------------------------------------------------------
-- 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
-- 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")
fibaro:sleep(120*1000)
Posté(e)

donc si je comprends bien, le break fait sortir de la boucle for en cours ?

Très bonne inée, je crois en effet qu'il faut "attendre" d'avoir trouvé une interace "light" pour faire le break => ok avec Moniseur sebcbien

Posté(e)

oui j'ai appris quelque chose avec ce break

 

ok le break ! (petit rappel pour ceux qui on connu la CB :)  )

Posté(e)

Note pour plus tard:

A la réflexion, le break là  ou je l'ai mis n'a pas beaucoup de sens et à  mon avis ne sert pas à  grand chose.

Là  ou Lazer l'a mis c'est plus logique, ... mais ça ne fonctionne pas... (chez moi en tt cas)

Moi j'ai fini pour aujourd'hui avec la domotique, demain c la rentrée  <_<

A creuser donc...

Posté(e)

Sebcbien j'ai testé ton 1er code du post #254 (celui qui éteint les lumières, car la section analyse ne m'intéresse pas)

 

 => ça fonctionne, avec le break là  où il est placé, il éteint bien toutes les lumières. En revanche, il manque les shouldInclude() et shouldExclude()

 

Le shouldInclude n'est peut être plus utile depuis qu'on détecte proprement l'interface "light" des devices, en revanche le shouldExclude() est bien pratique.

 

On peut ajouter le test shouldExclude() à  la condition suivante :

		if jsonTable[device].interfaces and not shouldExclude(jsonTable[device]) then

Posté(e)

oups Lazer, tu viens d'apporter la preuve qu'on avait travaillé trop tard.J

Je regarde pour les reprendre en compte (comme avant).

As-tu regardé pour la position du break ?

Posté(e)

Comme dis j'ai testé que la première partie du code du post 254, et le break est bien placé.

J'ai donc pas testé le bouton d'analyse.

Juste une généralité sur le "break", ça existe dans tous les langages, depuis le C jusqu'au LUA passant par le PHP et même le Visual Basic (renommé en "exit for"). Le pendant du break c'est "continue" qui permet de forcer le passage àla boucle suivante.
Rarement utilisé, mais pratique quand l'occasion se présente.

  • Upvote 1
Posté(e)

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

 

Posté(e)

J ai pas lu tous vos échanges de ces derniers jours mais vous avez bosser sur quels sujets ?

Le module fonctionne bien chez moi. Il y avait un bug ? ( àpart le coup du reboot pour avoir le nouveau device.)

Posté(e)

@sebcbien,

sorry, je ne sais plus le break de qui, mais ça fonctionne !

 

@Sakkhho,

En fait on a fait des modif pour le test de savoir si c'est une lampe ou pas, car la méthode actuelle ne sera plus supportée longtemps par Fibaro (dixit sebcbien), et pour que le VD précédent (v3.0) fonctionne, il faut faire un restart de la box après l'inclusion d'une lampe

Posté(e)

J ai pas lu tous vos échanges de ces derniers jours mais vous avez bosser sur quels sujets ?

 

J'ai l'impression que tu constates ce que j'ai constaté dans plusieurs entreprises dans lesquelles j'ai travaillé : beaucoup d'agitation, tout le monde est débordé, pour au final produire.... rien !!

Non mais là  on a quand même un nouveau module virtuel "update-to-date" qui devrait fonctionner quelques soit les conditions.

 

@jojo , tu as laissé le break exactement au même endroit que moi, il y a juste des tabs en moins ;-)

Oui en fait je crois que c'est toutes ces tabulations mal placées qui ont causés les incompréhensions autour du break.

Posté(e)

il est bien placé là  pour toi lazer ?

pcq jojo l'aplacé à  deux endroits différents dans "analyse" et "tout éteindre"

 

moi si je le met là :

il ne m'éteint que les wall plug et fgs (or jojo n'a que ça et ne sais pas tester les dimmer...)

                    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
            	   end
                   break
		end
	end
...

si je le met là , tout s'éteint, même les dimmer, mais l'utilité me semble très réduite


            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
Posté(e)

edit: OK my bad, il y a une boucle if then de plus  -_- 

 

heuu le lua se fout royalement des tabulations...

dans lepremier script le break est juste après


					fibaro:call(jsonTable[device].id, "turnOff")
					end
                                     break

mais dans le 2e il est un end plus loin...


					fibaro:call(selfID, "setProperty", "ui.Lum"..compteurLumieres..".value", jsonTable[device].name .. " ("..jsonTable[device].id..")")
					end
                                   end
                                break
Posté(e)

voilà  :) => "il y a une boucle if then de plus"

 

Mais ce sont bien les tabulations foireuses qui rendent le code difficile à  lire, et masquent la boucle if then de plus.

  • Upvote 1
Posté(e)

la tabulation dans notepad++ est bonne, c'est dans le forum qu'il y a un stà»à»à»à»à»t avec les ctrlC/V.

Je n'oserais pas présenter un code mal tabulé, sinon je sais que Lazer ne voudra plus me parler   :D

×
×
  • Créer...