Aller au contenu

Messages recommandés

Posté(e)

Merci pour cette info, 

En effet lors de la réinstall de ma box, ma lampe de bureau n'était plus listée, et elle l'est à  nouveau. Je n'avais pas fait le rapprochement avec un reboot..

J'ai envie de reprendre le dernier code et de modifier le test

Posté(e)

Vous precisez l'appareil que vous commandez avec les WallPlug ?

Sur un de mes WP, j'ai bien IsLight mais pas light dans interfaces, ca vient du fait que je ne precise pas ce que je commande ?

Posté(e)

voici donc le code avec double click pour tout eteindre sur base des infos rapportées par sebcbien

----------------------------------
-- 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" and jsonTable[device].properties.value == "true" then
						fibaro:call(jsonTable[device].id, "turnOff")
					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
 

Je vous joins également une version 4.0 qui permet de voir quelles lumières sont allumées avant de les éteindre

post-1320-0-35693700-1446900394_thumb.png

 

Toutes_Lumieres_v4.0.vfib

 

 

  • Upvote 2
Posté(e)

Vous precisez l'appareil que vous commandez avec les WallPlug ?

Sur un de mes WP, j'ai bien IsLight mais pas light dans interfaces, ca vient du fait que je ne precise pas ce que je commande ?

Oui sur un wallplug je dis aussi que c'est une lampe. Comme ça ça apparaît dans lightning dans l'interface mobile.

Sent from my Note4

Posté(e)

Chez moi ça ne fonctionne que si j'enlève ceci ligne 73:

and jsonTable[device].properties.value == "true"

j'ai analysé jsonTable[device].properties.value et il n'est pas toujours à  true ou false, mais renvoie aussi le pourcentage des dimmers et des rgbw... 43, 99, 12 etc..

Docn a priori ce script ne fonctionne que pour les wallplug et les FGS.

 

Pourquoi as-tu mis cette ligne ? pour ne pas envoyer d'ordre inutiles ?

 

Perso, jen e vois pas comment faire un test, pcq si je fait un tonumber() pour vérifier si > 0 j'ai une erreur quand la valeur n'est pas numérique...

Posté(e)

@jojo, tu n'a pas partagé le bon vfib, c'est le top 10 power celui là ... tsss tu n'est pas "à  ton affaire" comme on dit par ici  :D

ceci dit, si tu peux mettre le code du bouton analyse, je préfère.

Merci

Posté(e)

voici le script adapté:

il n'est pas très beau mais il fonctionne, c'est le seul moyen que j'ai trouvé pour garder la logique de jojo (n'envoyer des ordres zwave que si la lampe est allumée)

J'ai rajouté deux debugs (lignes 74 et 82) qui m'on permis de comprendre ou ça plantait.

Je les ai laissés pour le moment, si on rencontre lors des test que un device ne fonctionne pas, ce sera plus facile àlocaliser.

A enlever par la suite.

le debug donne ceci:

[DEBUG] 23:15:48: id: 16 is Salle De Bain type: light
[DEBUG] 23:15:48: id: 23 is Lampadaires Salon type: light
[DEBUG] 23:15:48: value: true. Turning Off
[DEBUG] 23:15:48: id: 24 is Chambre Amis type: light
[DEBUG] 23:15:48: id: 41 is Chambre Thomas type: light
[DEBUG] 23:15:48: id: 42 is Dressing type: light
[DEBUG] 23:15:48: id: 43 is Ch Amis Cramé ? type: light
[DEBUG] 23:15:48: id: 47 is Chambre Parents type: light
[DEBUG] 23:15:48: id: 49 is Bureau type: light
[DEBUG] 23:15:48: value: 99. Turning Off
[DEBUG] 23:15:48: id: 50 is WC type: light
[DEBUG] 23:15:48: id: 51 is Garage type: light
[DEBUG] 23:15:48: id: 52 is Hall type: light
[DEBUG] 23:15:48: value: 99. Turning Off
[DEBUG] 23:15:48: id: 56 is Cellier type: light
[DEBUG] 23:15:48: id: 58 is Chambre Emilien type: light
[DEBUG] 23:15:48: id: 63 is Terrasse type: light
[DEBUG] 23:15:48: id: 1312 is Led Bureau type: light
[DEBUG] 23:15:49: value: true. Turning Off
[DEBUG] 23:15:49: id: 1893 is Poussoirs Haut type: light
[DEBUG] 23:15:49: id: 1934 is RGBW Dressing SDB type: light
[DEBUG] 23:15:49: id: 1944 is Corniche Rez type: light
[DEBUG] 23:15:49: value: 8. Turning Off
[DEBUG] 23:15:49: id: 1948 is Salon type: light
[DEBUG] 23:15:49: value: 99. Turning Off
[DEBUG] 23:15:49: id: 1952 is Cuisine type: light
[DEBUG] 23:15:49: value: 99. Turning Off
[DEBUG] 23:15:49: id: 1965 is Salle a Manger type: light
[DEBUG] 23:15:49: value: 95. Turning Off
----------------------------------
-- 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
            			        fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface])
            			        local isnumber = true
						if jsonTable[device].properties.value == "true" then
                                                        fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off")
							fibaro:call(jsonTable[device].id, "turnOff")
							isnumber = false
              			                elseif jsonTable[device].properties.value == "false" or jsonTable[device].properties.value == "" or jsonTable[device].properties.value == nil then
							isnumber = false
						elseif tonumber(jsonTable[device].properties.value) > 0 and isnumber == true then
							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
Posté(e)

je regarde ton code adapté en détail.

En effet, je fais le test pour ne pas envoyer l'ordre d'estinction pour rien, et c'est le même test qui est utilisé pour afficher les lampes allumées dans le bouton analyse.

je corrige le tout et reposte le bon VD

Posté(e)

je viens de modifier le code légèrement au niveau des debugs pour une meilleure lisibilité

Pour mon code, il y a certainement moyen de faire mieux, plus joli, plus court... :-/

Posté(e)

sebcbien,

je ne comprends pas pourquoi tu passe par une variable locale isnumber.

Ceci devrait suffire :

for interface = 1, #jsonTable[device].interfaces do
	if jsonTable[device].interfaces[interface] == "light" then
		fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface])
		if jsonTable[device].properties.value == "true" then
			fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off")
			fibaro:call(jsonTable[device].id, "turnOff")
		elseif tonumber(jsonTable[device].properties.value) > 0 then
			fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off")
			fibaro:call(jsonTable[device].id, "turnOff")
		end
	end
end

n'ayant pas de FGD, je ne sais pas tester.

Peux-tu valider SVP ?

Posté(e)

j'ai essayé ton script, ça donne ça:

[ERROR] 23:38:55: line 77: attempt to compare number with nil 

parceque 

tonumber(jsonTable[device].properties.value) > 0

plante le script si la valeur n'est pas numérique

 

si value = false par exemple, tonumber de nil crée une erreur

 

Donc je m'assurait avant de lancer tonumber que value n'est pas nil, false, true, ""

 

C'est ça qui m'a pris une heure ;-)

Posté(e)

ok, j'ai compris, je vais quand même voir s'il n'ya pas un autre moyen plus compréhensible de le programmer

Posté(e) (modifié)

Sebcbien, tu peux essayer avec ça, c'est ce que j'avais mis dans mon précédent code, et ça avait l'air de fonctionner avec tes RGB :

	local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value"))
	if DeviceValue and DeviceValue > 0 then

Modifié par Lazer
Posté(e)

voilà, la variable intermédiaire me chagrinait ...

donc voici un nouveau code qui ne fait pas d'erreur chez moi.

Fonctionne-t-il également correctement avec tes FGD ?

	    -- look for lighting devices
	    if jsonTable[device].interfaces then
			for interface = 1, #jsonTable[device].interfaces do
				if jsonTable[device].interfaces[interface] == "light" 
				and (jsonTable[device].properties.value == "true" 
				or (type(jsonTable[device].properties.value) == "number" and tonumber(jsonTable[device].properties.value) > 0)) then
					fibaro:call(jsonTable[device].id, "turnOff")
				end
			end
		end

Posté(e)

 

Sebcbien, tu peux essayer avec ça, c'est ce que j'avais mis dans mon précédent code, et ça avait l'air de fonctionner avec tes RGB :

	local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value"))
	if DeviceValue and DeviceValue > 0 then

c'est une erreur de ma part, ça fonctionne très bie comme ça avec les rgbw, j'aurais du éditer mon post, désolé...  :mellow:

Posté(e)

 

voilà , la variable intermédiaire me chagrinait ...

donc voici un nouveau code qui ne fait pas d'erreur chez moi.

Fonctionne-t-il également correctement avec tes FGD ?

	    -- look for lighting devices
	    if jsonTable[device].interfaces then
			for interface = 1, #jsonTable[device].interfaces do
				if jsonTable[device].interfaces[interface] == "light" 
				and (jsonTable[device].properties.value == "true" 
				or (type(jsonTable[device].properties.value) == "number" and tonumber(jsonTable[device].properties.value) > 0)) then
					fibaro:call(jsonTable[device].id, "turnOff")
				end
			end
		end

@jojo, joli le code, mais ça n'a éteint que les WP, je cherche un peu

Posté(e)

Sebcbien, alors du coup ma solution utilise un code plus léger que la solution de Jojo. Mais je ne comprends pas pourquoi tu cherches toujours, j'ai du couper un épisode -_-

×
×
  • Créer...