sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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 :-/ )
jojo Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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") 1
Lazer Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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 ... 1
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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. ---------------------------------- -- 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)
jojo Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 oui j'ai appris quelque chose avec ce break ok le break ! (petit rappel pour ceux qui on connu la CB )
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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...
Lazer Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 J'essaye de regarder ça ce soir.
Lazer Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 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
jojo Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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 ?
Lazer Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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. 1
jojo Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 le bouton analyse est le même que le bouton tout éteindre, sauf qu'il n'éteint pas, mais affiche ...
Lazer Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 donc y'a pas de raison qu'il ne fonctionne pas
jojo Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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
Sakkhho Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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.)
sebcbien Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 @jojo , tu as laissé le break exactement au même endroit que moi, il y a juste des tabs en moins ;-)
sebcbien Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 @Sakkhho, pour comprendre ce qu'il y a de nouveau, c'est ici: http://www.domotique-fibaro.fr/index.php/topic/4251-voir-si-une-lumi%C3%A8re-est-allum%C3%A9e-et-tout-%C3%A9tindre/page-10#entry95115
jojo Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 @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
Sakkhho Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 C est clair merci je mettrai àjour.
Lazer Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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.
sebcbien Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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
Lazer Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 Il est au bon et au même endroit dans les 2 scripts de Jojo. Ce sont les tabulations foireuses qui t'enduisent d'erreur
sebcbien Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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
Lazer Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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. 1
jojo Posté(e) le 9 novembre 2015 Signaler Posté(e) le 9 novembre 2015 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
Messages recommandés