Aller au contenu

Voir Si Une Lumière Est Allumée Et Tout Éteindre


neliger

Messages recommandés

  • 3 mois après...

Adopté, merci jojo. Super taf.

J'avais trouvé mon probleme sur ce VD, c'était à  cause d'un FGMS que j'avais inseré mais pas encore renommé (il était dans en ID_x) et le VD les voyait comme des lampes ...

 

N'empêche que la c'est pas sympa de savoir.

Une remarque, si je veux supprimer le double click pour éteindre je mets en commentaires quelles lignes ? Car par sur de l'utilité du dble click

Lien vers le commentaire
Partager sur d’autres sites

voici le code du bouton "Tout éteindre, sans le double click:

----------------------------------
-- 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 k, 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 k, v in pairs(toInclude) do
    	if string.find(module.name, v) ~= nil or module.id == v then return true end
    end
	return false
end

HC2 = Net.FHttp("127.0.0.1",11111)

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
 
    -- Récupération de la liste des modules
    response = HC2:GET("/api/devices")
    json = json.decode(response)
    -- Boucle sur les modules
    for k, v in ipairs(json) do
	  if ((type(v.properties.isLight) == "string" and type(v.properties.value) == "string") or shouldInclude(v)) and not shouldExclude(v) then
		if v.properties.value == "true" 
          then
		    fibaro:call(v.id, "turnOff")
		  elseif v.properties.value ~= nil and v.properties.value ~="false" then
			if tonumber(v.properties.value) > 0 then
				fibaro:call(v.id, "turnOff")
			end
  		end
	  end
    end -- for
Lien vers le commentaire
Partager sur d’autres sites

au top !

J'ai rajouté dans le bouton du switch off un 

fibaro:sleep(500) 
fibaro:call(fibaro:getSelfId(), "pressButton", "14")

comme c'est des que je switch off, il remet à  0 le compteur

car j'ai sortit le code du main loop pour le mettre dans GEA

Lien vers le commentaire
Partager sur d’autres sites

salut messieurs,

 

@jojo super boulot encore..

 

Un inconvenient pour moi, ca clignote avec le code dans le main loop ;-) mais moi je m'en sers uniquement en fonction du mode de la maison, donc pas de clignotement, j'appuie sur les boutons avec GEA ;-)

 

Merciiiiii

Lien vers le commentaire
Partager sur d’autres sites

@sakkhho,

Je comprends maintenant pourquoi tu ne voulais pas du double click.

Je me demandais justement dans GEA comment il réagirait.

Idée, dans GEA on pourrait mettre 2 fois de suite l'appel à  ce bouton de la VD dans les options, ce qui correspond à  un double click ?

 

@pepite,

Oui ça clignote (uniquement si toutes les lumières sont éteintes) car la main loop appelle un bouton. Je devrais regarder pour tout mettre dans la main loop. => à  ajouter à  la todo

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'ai tout lu et il y a une chose que je ne comprends pas bien...

Steven(je crois) avait posté ce petit bout de code que j'ai un peu modifié et qui fonctionne très bien pour éteindre les lampes.

Il y a peut être une subtilité que je n'ai pas compris, mais V3 ou V4, toutes mes lumières s'éteignent (dimmer, wallplug, fgs...) et rien d'autre.

voici le code:

--[[ 
%% properties 
%% globals 
--]]

function turnIt(mode)
  -- On parcours les 350 premiers modules
  for i = 1, 2000 do
    -- Si un module est de type Eclairage
    local ret = fibaro:get(i, 'isLight')
    if ((type(ret) == "string" and string.find(ret, "1" )) or "rgb_driver" == fibaro:getType(i) or "com.fibaro.FGRGBW441M" == fibaro:getType(i)) then
	    local DeviceName = fibaro:getName(i); 
        local RoomName = fibaro:getRoomNameByDeviceID(i);
        -- On l'allume ou l'éteint
        fibaro:call(i, mode);
		fibaro:debug(mode.." device "..i.." "..DeviceName.." "..RoomName); 
    end
  end
end
 
--turnIt("turnOn")
turnIt("turnOff")
fibaro:debug("All lights are off");


pourquoi je suis arrivé ici ?

Ce script n'a qu'un défaut, il est un peu lent et il ne s'adapte pas automatiquement au nombre de modules (j'ai 1890 ID...)

Je cherchais un moyen de le limiter aux devices de l'api et ne pas devoir scanner tout.

 

J'ai donc téléchargé la dernière version de jojo et j'ai modifié la partie turn off.

voici le résultat et chez moi ça marche très bien.

Je n'ai peut être pas tout pigé, mais dans le doute, ça pourrait faire avancer le schmilblick...

----------------------------------
-- 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 = {"Pisc"}
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 k, 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 k, v in pairs(toInclude) do
    	if string.find(module.name, v) ~= nil or module.id == v then return true end
    end
	return false
end

HC2 = Net.FHttp("127.0.0.1",11111)

----------------------------------
-- 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 = 2                             -- 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
	
    response = HC2:GET("/api/devices")
    json = json.decode(response)
    -- Boucle sur les modules
    for k, v in ipairs(json) do
	local ret = fibaro:get(v.id, 'isLight')
    if ((type(ret) == "string" and string.find(ret, "1" )) or "rgb_driver" == fibaro:getType(v.id) or "com.fibaro.FGRGBW441M" == fibaro:getType(v.id)) then
	    local DeviceName = fibaro:getName(v.id); 
        local RoomName = fibaro:getRoomNameByDeviceID(v.id);
        -- On l'allume ou l'éteint
        fibaro:call(v.id, "turnOff");
		fibaro:debug("turnOff".." device "..v.id.." "..DeviceName.." "..RoomName); 
    end
	
    end -- for
  
else 
      fibaro:log("Annulé")  
      -- votre code ici en cas d'annulation
end
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

en permettant l'utilisation des toExclude et toInclude, cela permet d'inclure ou d'exclure des devices qui doivent être considérés (ou non) dans le turn off général. 

Dans mon exemple, j'ai exclu "Pisc", qui est un WP qui n'est PAS de type light, mais était reconnu comme tel.

J'ai tout essayé, puis je l'ai mis en les exclusions en désespoir de cause.

Ce n'est pas bien, mais cela fonctionne

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...