Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Oui bien sur. As tu lu le tutoriel que je t'ai mis dans mon post précédent.

 

Partage le code que tu utilises ce sera plus simple et d'autres membres pourront nous aider ;-)

Posté(e) (modifié)

 

----------------------------------
-- 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
Posté(e)

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

Posté(e)

salut et merci

j ai un message d erreur :

[DEBUG] 11:59:20: line 50: attempt to index global 'Net' (a nil value)

 

ligne 50 :

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

Posté(e)

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

Posté(e)

@CharlesO

 

Pour la scène d'extinction lancée par l'interactive Push tu peux ne mettre que cela en fait.

 

for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true}})) do
     fibaro:call(v, "turnOff")
end 

 

  • Upvote 1
Posté(e) (modifié)

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
Posté(e)

Hello a tous 

pascal moi je suis intéressé pour que tu partage ton travail comme ça je pourrais le mettre sur ma box et continuer 

mon éducation d'avance merci

Posté(e)

@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

 

Posté(e)

Boujour a tous bonjour Pepite

J'ai tout essaye (avec un nouveau VD, avec mon ancien VD en changent juste le code)

ca ne marche pas :-(

pls help

Posté(e)

tu as raison désolé

si rien n est allume le debug est vide 

voila le message dans le debug s il y a une lumiere allumer ou plus :

[ERROR] 10:26:29: line 334: attempt to concatenate local 'deviceID' (a nil value)

 

 

Posté(e)

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.

Posté(e)
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

 

Posté(e)

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

Posté(e) (modifié)

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
×
×
  • Créer...