Aller au contenu

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


neliger

Messages recommandés

 

----------------------------------
-- User Settings
----------------------------------
IconeAllume = 166
IconeEteint = 165
 
-- 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}
 
----------------------------------
-- 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

 

Modifié par CharlesO
Lien vers le commentaire
Partager sur d’autres sites

Ah zut, j'avais pas vu que tu avais posté ton code..

En attendant, j'ai mixé les 2 codes, @jojo et @Steven, enfin essayé. A toi de compléter avec le code du post précédent

 

Crée une scene d'extinction :
 

--Scène d'extinction

 ----------------------------------

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

 ----------------------------------

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


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

Le code avec l'interactive Push


 

-----------------------------------

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

-- Smartphone devant recevoir Push
local Smartphone = XX

-- Scene d'extinction
local id_de_la_scene_qui_eteint = YY

----------------------------------

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


local message = ""
-- 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")
                            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
                            
end

Après comme d'ahb, attention suis un boulet, il y a peut-etre des erreurs partout ;-)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour, tu parles de la scene d extinction ou le bouton du VD ??
Exact pas de net.fhttp ds une scene :-)
Faut utiliser httpclient ou un api.get ou getdevicefilter sur la lumiere :-)
Je peux pas te le faire maintenant

Envoyé de mon Nexus 5X en utilisant Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

tu utilises le Vd de @jojo ou non ? si c'est dans un VD, tu ne devrais pas avoir de probleme? lenet.fhttp est ok dans les VDs.

 

C'etait juste pour la scene d'extinction le souci à mon avis.

 

Rectification tu as raison, je ne sais a quoi je pensais..mais le code de l'interctive push est fait pour les scenes

Modifié par pepite
Lien vers le commentaire
Partager sur d’autres sites

@CharlesO

 

Essaie cela,ca doit fonctionner dans un VD

 

Remplace ton code dans ton bouton d'analyse

-----------------------------------

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

-- Smartphone devant recevoir Push
local Smartphone = XX

-- Scene d'extinction
local id_de_la_scene_qui_eteint = YY

----------------------------------

-- 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"}

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

local message = ""

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")
                            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
                            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
           
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              

 

Puis crée la scène d’extinction

 

Lien vers le commentaire
Partager sur d’autres sites

Quelle est ta ligne 334 ? J'ai peut-être sûrement fait une boulette de code.

Est-ce que le code fonctionnait avant les modfis ?

on va tester au fur et à mesure.

reteste ton code sans modif stp et dis moi ce qu'il en est.

Lien vers le commentaire
Partager sur d’autres sites

il y a 41 minutes, CharlesO a dit :

la ligne 334 n existe pas

heuuu, on a un souci la deja ;-)

 

Tu utilises bien le même code sans modifications que je t'ai proposées hier soir ? Que je parte sur le bon code

https://www.domotique-fibaro.fr/topic/4251-voir-si-une-lumiã¨re-est-allumã©e-et-tout-ã‰teindre/?do=findComment&comment=162267

 

Lien vers le commentaire
Partager sur d’autres sites

ca vient de moi, j'ai remis dans un malencontreux copier-coller le code es interactives push dans le VD alors que c'est dans une scene.

 

On va essayer de faire :

 --> VD

--> scene push

--> scene extinction

 

On verra l'optimisation ensuite ;-)

Lien vers le commentaire
Partager sur d’autres sites

Dans les codes, pense à modifier les endroits ou j'ai declaré une variable avec XX ;-)

Le code du VD que tu avais partagé,

----------------------------------
-- User Settings
----------------------------------
IconeAllume = 166
IconeEteint = 165

local id_scene_interactive_push = 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}
 
----------------------------------
-- 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)
    fibaro:startScene(id_scene_interactive_push)
else
    fibaro:call(selfID, "setProperty", "currentIcon", IconeEteint)
end


-----

 

Juste rajouté dans le code de mise a jour des icônes, l'appel à la scène d'envoi des push interactifs

 

-- Crée la scène d'envoi des pushs interactifs


 

--- Scene Interactive push ----------
local Smartphone = XX
local id_de_la_scene_qui_eteint = XX
local message = "Lampes allumées, voulez-vous les éteindre ?"

 api.post('/mobile/push', {
            ["mobileDevices"]={Smartphone},
            ["message"]=message,
            ["title"]='Question:',
            ["category"]='YES_NO',
            ["data"]={["sceneId"]=id_de_la_scene_qui_eteint}
            }
        )
       

 

Crée une scene d'extinction qui sera appelee par les push interactifs si tu réponds OUI
 

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

 

Modifié par pepite
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...