Aller au contenu

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


neliger

Messages recommandés

Si vous remplacez la ligne 18 du code du bouton original par la ligne ci-dessous, ça éteint la lumière dimmable lors de l'appuis sur le bouton ?

    if(v.properties.value == "true") then fibaro:call(v.id, "turnOff"); fibaro:call(v.id, "setValue", 0); end
Lien vers le commentaire
Partager sur d’autres sites

@mprinfo : un rapide test sur ta box m'a permis de comprendre ce qu'il se passe.

 

En fait, c'est la valeur du dimmer qui peut prendre différentes valeurs, je propose donc de ne plus tester l'état des lumières, et d'envoyer l'ordre d'extinction systématiquement en remplaçant la ligne 18 du bouton par ceci :

fibaro:call(v.id, "turnOff");
Lien vers le commentaire
Partager sur d’autres sites

@Neliger: sa fonctionne pour éteindre les dimmers....

 

on ne vois juste pas si les dimmers sont allumés par contre.... je vais regarder aussi pour voir si on peut pas changer qqc...

 

merci du bon travail...

 

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Erreur de débutant que de juste retirer la condition dans le bouton.

 

Il faut que j'étudie les valeurs pour adapter les deux conditions.

 

Je demande à  mprinfo s'il peut me redonner l'accès à  sa box.

Lien vers le commentaire
Partager sur d’autres sites

Grâce à  un petit test fait chez mprinfo, j'ai pu corriger le test d'allumage et le rétablir aussi avant de demander une extinction.

 

Le code n'est pas très élégant mais avec les problèmes de typage que m'impose le lua, je suis allé au plus simple.

 

J'ai modifié le sujet pour remplacer par la version 1.2 dont voici la source.

 

Code du bouton

------------------------------
-- Ne pas modifier ci-dessous
------------------------------

-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local json = json.decode(reponse)
  
-- Boucle sur les modules
for k, v in ipairs(json) do
    
  -- Il s'agit d'un module lumière
  if(type(v.properties.isLight) == "string") then


    -- Etat de la lumière
    local EtatLumiere = "eteinte"
    if(type(v.properties.value) == "string") then
      if(v.properties.value == "true") then EtatLumiere = "allumee" end
    else
      if(v.properties.value > 0) then EtatLumiere = "allumee" end
    end

    -- La lumière est allumée, extinction
    if(EtatLumiere == "allumee") then fibaro:call(v.id, "turnOff") end

  end
end

Boucle principale

-----------------------------------------------------------
-- Toutes lumières v1.2
-----------------------------------------------------------
-- Extinction de l'ensemble des lumières de la maison
-----------------------------------------------------------
-- Changelog
-- 1.2 : Correction du test d'état prenant en charge les
--       modules variateurs et rétablissement de la
--       condition pour l'extinction
-- 1.1 : Extinction inconditionnelle et prise en charge des
--       modules variateurs
-----------------------------------------------------------

------------------------------
-- Variables à  renseigner
------------------------------

-- Identiants des icônes
local IconeAllume = 107
local IconeEteint = 108

-- Intervalle de mise à  jour automatique (en secondes)
local IntervalleMAJ = 10

------------------------------
-- Ne pas modifier ci-dessous
------------------------------

while true do

  -- Variable du compteur
  local compteurLumieres = 0

  -- Récupération de la liste des modules
  local HC2 = Net.FHttp("127.0.0.1", 11111)
  local reponse = HC2:GET("/api/devices")
  local json = json.decode(reponse)
  
  -- Boucle sur les modules
  for k, v in ipairs(json) do
    
    -- Il s'agit d'un module lumière
    if(type(v.properties.isLight) == "string") then

      -- Etat de la lumière
      local EtatLumiere = "eteinte"
      if(type(v.properties.value) == "string") then
        if(v.properties.value == "true") then EtatLumiere = "allumee" end
      else
        if(v.properties.value > 0) then EtatLumiere = "allumee" end
      end

      -- La lumière est allumée, incrémentation
      if(EtatLumiere == "allumee") then compteurLumieres = compteurLumieres + 1 end

    end
  end

  -- Mise à  jour de l'icône
  if(compteurLumieres > 0) then
    fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeAllume)
  else
    fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeEteint)
  end

  -- Attente de la prochaine mise à  jour automatique
  fibaro:sleep(IntervalleMAJ*1000)

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

Mes 2 dimmers sont pourtant bien reconnu est pas en problème...

 

je vais faire un reboot de box pour voir...et je vous re...

 

Après un reboot, pareil, dans la version 1.1 je pouvais les éteindre pourtant...

 

merci de votre support,

 

patrick

Lien vers le commentaire
Partager sur d’autres sites

@Trainkill666:

 

Sa fonctionne pour éteindre les lumières, y compris les dimmers, cependant le statut pour les icon ne fonctionne pas.

 

dans le début j'ai une erreur, la même pour le bouton et le main loop:

 

[ERROR] 06:15:44: line 12: attempt to compare number with nil et la ligne 41du main loop

 

12. if(type(v.properties.isLight) == "string") and (type(v.properties.value) == "string") and ((v.properties.value == "true") or (tonumber(v.properties.value) > 0)) then

 

41. if(type(v.properties.isLight) == "string") and (type(v.properties.value) == "string") and ((v.properties.value == "true") or (tonumber(v.properties.value) > 0)) then

 

nous sommes pas loin du but...

 

merci,

 

Patrick

Lien vers le commentaire
Partager sur d’autres sites

A tester, je ne peux pas car suite à  la maj 4.040 la box plante, ce code est fait à  "l'aveugle", il doit donc y avoir des "coquilles". :P

 

Bouton :

-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local json = json.decode(reponse)
 
-- Boucle sur les modules
for k, v in ipairs(json) do
	if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" 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

Main Loop

-- Identiants des icônes
local IconeAllume = 107
local IconeEteint = 108
 
-- Intervalle de mise à  jour automatique (en secondes)
local IntervalleMAJ = 10
 
while true do
 
-- Variable du compteur
local compteurLumieres = 0
 
-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local json = json.decode(reponse)
 
-- Boucle sur les modules
for k, v in ipairs(json) do
	if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" then
		if v.properties.value == "true" then
			compteurLumieres = compteurLumieres + 1
		elseif v.properties.value ~= nil and v.properties.value ~="false" then
			if tonumber(v.properties.value) > 0 then
				compteurLumieres = compteurLumieres + 1
			end
		end
	end
end
 
-- Mise à  jour de l'icône
if(compteurLumieres > 0) then
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeAllume)
else
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeEteint)
end
 
-- Attente de la prochaine mise à  jour automatique
fibaro:sleep(IntervalleMAJ*1000)
 
end
  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

@Trainkill666: Sa fonctionne! super,

 

vous pouvez faire la mise a jour et votre rituel device en 1.3...

 

mes switch on/off et mes dimmers son maintenant fonctionnels avec la vision de l'état des 2

 

vous êtes les meilleurs!

 

Patrick

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...