Aller au contenu

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


neliger

Messages recommandés

Re, ca faisait longtemps ;-) 

 

Pour les noms normal, la variable message est simple pour le moment, sans les noms. C'était juste pour tester le fonctionnement. 

 

local message = "Lampes allumées, voulez-vous les éteindre ?"
["message"]=message
Il y a 1 heure, CharlesO a dit :

il les off toutes sans attendre ma réponse 

Alors la, c'est encore moi, un vite rapide copier coller du boulot... ;-)

Donc efface ceci dans la scène des push interactifs (c'est pour cela que cela a éteint sans attendre ta réponse)

 

-- Scène d'extinction ----
for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true}})) do
     fibaro:call(v, "turnOff")
end

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re, 

 

Tu peux tester la scène de push Interactive

----------------------------------
-- User Settings
----------------------------------
--- Scene Interactive push -------
local Smartphone = XX
local id_de_la_scene_qui_eteint = XX
-- 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 = {92}
--================================
--======== FONCTIONS =============
--================================
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
----------------------------------

local message = ""
-- Récupération de la liste des modules
local jsonTable = api.get("/devices")
-- 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")
                            local DeviceName = fibaro:getName(jsonTable[device])
                            DeviceName = string.gsub(DeviceName," ","_")
                            if (message ~= "") then
                                message = message .. ", "
                            end
                            message = message .. DeviceName
                        end
                end
            end
        end
    end
if (message ~= "") then
        if (message:find(",")) then
            message = message .. " sont allumés, voulez-vous les éteindre ?"
        else
            message = message .. " est allumé, voulez-vous l'éteindre ?"
        end
        api.post('/mobile/push', {
            ["mobileDevices"]={Smartphone},
            ["message"]=message,
            ["title"]='Question:',
            ["category"]='YES_NO',
            ["data"]={["sceneId"]=id_de_la_scene_qui_eteint}
            }
        )
end

 

Lien vers le commentaire
Partager sur d’autres sites

Le 22/5/2017 à 20:46, pepite a dit :

local Smartphone = XX local id_de_la_scene_qui_eteint = XX

Bonjour,

 

Du nouveau ? Je ne peux pas tester à ta place ? 

Dans la dernière scène as tu bien modifié les IDS au niveau des variables ?

 

Je vais rajouter des debug pour voir où cela coince.

Lien vers le commentaire
Partager sur d’autres sites

Re,

avec les debugs, on en saura un peu plus de ce qui ne fonctionne pas.  ;-)


 

----------------------------------
-- User Settings
----------------------------------
--- Scene Interactive push -------
local Smartphone = XX
local id_de_la_scene_qui_eteint = XX
fibaro:debug("Smartphone : " ..Smartphone.. " - ID Scène extinction : " ..id_de_la_scene_qui_eteint)

-- 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 = {92}

--================================
--======== FONCTIONS =============
--================================
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
----------------------------------

local message = ""
-- Récupération de la liste des modules
local jsonTable = api.get("/devices")
-- Boucle sur les modules
    for device = 1, #jsonTable do
        fibaro:debug("entree dans la boucle jsonTable")
    -- 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")
                            local DeviceName = jsonTable[device].name
                            fibaro:debug("Devices allumés : " ..DeviceName)
                            DeviceName = string.gsub(DeviceName," ","_")
                            fibaro:debug("Devices allumés underscore: " ..DeviceName)
                            if (message ~= "") then
                                message = message .. ", "
                                fibaro:debug("Message virgule : " ..message)
                            end
                            message = message .. DeviceName
                            fibaro:debug("Message avec noms : " ..message)
                        end
                end
            end
        end
    end
if (message ~= "") then
        if (message:find(",")) then
            message = message .. " sont allumés, voulez-vous les éteindre ?"
            fibaro:debug("Message SONT ALLUMES : " ..message)
        else
            message = message .. " est allumé, voulez-vous l'éteindre ?"
            fibaro:debug("Message EST ALLUME : " ..message)
        end
        api.post('/mobile/push', {
            ["mobileDevices"]={Smartphone},
            ["message"]=message,
            ["title"]='Question:',
            ["category"]='YES_NO',
            ["data"]={["sceneId"]=id_de_la_scene_qui_eteint}
            }
        )
end

 

Lien vers le commentaire
Partager sur d’autres sites

Voila le resulta du debug :

 

DEBUG] 14:39:26: Smartphone : 397 - ID Scène extinction : 223
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable
[DEBUG] 14:39:27: entree dans la boucle jsonTable

 

Lien vers le commentaire
Partager sur d’autres sites

Question bete : tu avais des lampes allumées ;-) ?

 

Bon changement de fusil d'épaules car je comprends pas ou je me plante avec ce code.

Suis parti sur la même base que la scène d'extinction en filtrant sur les lumières ;-) et en modifiant le code du master
@Steven

----------------------------------
-- User Settings
----------------------------------
--- Scene Interactive push -------
local Smartphone = XX
local id_de_la_scene_qui_eteint = XX
fibaro:debug("Smartphone : " ..Smartphone.. " - ID Scène extinction : " ..id_de_la_scene_qui_eteint)
----------------------------------------------------------------------

local message = ""

for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true}})) do
    fibaro:debug("entree dans la boucle filtrée LUMIERE")
    local DeviceName = fibaro:getName(v)
    local DeviceValue = tonumber(fibaro:getValue(v, "value"))
        if DeviceValue > 0 then
            DeviceName = string.gsub(DeviceName," ","_")
            fibaro:debug("Lampes Allumées : " ..DeviceName)
            if (message ~= "") then
                message = message .. ", "
            end
        message = message .. DeviceName
        fibaro:debug("Message : " ..message)
        end
end

if (message ~= "") then
  if (message:find(","))then
    message = message .. " sont allumés, voulez-vous les éteindre ?"
  else
    message = message .. " est allumé, voulez-vous l'éteindre ?"
  end
 
   api.post('/mobile/push', {
            ["mobileDevices"]={Smartphone},
            ["message"]=message,
            ["title"]='Question:',
            ["category"]='YES_NO',
            ["data"]={["sceneId"]=id_de_la_scene_qui_eteint}
            }
        )
end

 

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, CharlesO a dit :

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

L' entête de la scène te permet de déclencher une scène sur un évènement, ce qui évite de faire boucler une scène. Le déclenchement sur "evenment" est à préféré dès que c'est possible en fonction du besoin, c'est plus optimisé en terme de charge.

Lien vers le commentaire
Partager sur d’autres sites

la voila le debug :

DEBUG] 15:53:56: Smartphone : 397 - ID Scène extinction : 223
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: Lampes Allumées : lumiere_Parentale
[DEBUG] 15:53:56: Message : lumiere_Parentale
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:57: entree dans la boucle filtrée LUMIERE

ex.....

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, pepite a dit :

L' entête de la scène te permet de déclencher une scène sur un évènement, ce qui évite de faire boucler une scène. Le déclenchement sur "evenment" est à préféré dès que c'est possible en fonction du besoin, c'est plus optimisé en terme de charge.

et alors dans notre cas ? besoin ou pas ?

Lien vers le commentaire
Partager sur d’autres sites

à l’instant, CharlesO a dit :

la voila le debug :

DEBUG] 15:53:56: Smartphone : 397 - ID Scène extinction : 223
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: Lampes Allumées : lumiere_Parentale
[DEBUG] 15:53:56: Message : lumiere_Parentale
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:56: entree dans la boucle filtrée LUMIERE
[DEBUG] 15:53:57: entree dans la boucle filtrée LUMIERE

ex.....

ps : ca a envoyer le push

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

  • 5 ans après...

Voici une fonction que j'utilise dans l'un de mes QuickApp pour éteindre toutes les lumières de la maison :

-- LightOff
-- 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
local lightsToExclude = {12, 345, 678}


--
-- Bouton : Éteint les lumières
--
function QuickApp:LightOff(event)
	local function shouldExclude(device)
		for _, v in pairs(lightsToExclude) do
			if device.id == v or string.find(device.name, v) ~= nil then
				return true
			end
		end
		return false
	end
	local devices = api.get("/devices?property=isLight")
	if type(devices) == "table" then
		for i = 1, #devices do
			local device = devices[i]
			if not shouldExclude(device) then
				local value = tonumber(device.properties.value)
				if type(value) == "boolean" and value or type(value) == "number" and value > 0 then
					local roomName = fibaro.getRoomNameByDeviceID(device.id)
					self:trace("Found device", device.id, ":", device.name, roomName, "(value", tostring(value)..") => call turnOff")
					fibaro.call(device.id, "turnOff")
				end
			end
		end
	else
		self:error("Impossible de lister les modules")
	end
end

Il te suffit d'appeler la fonction LightOff() depuis un bouton de ton QuickApp.

Et personnaliser les éventuelles lumières à exclure dans la table lightsToExclude

 

  • Like 2
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...