Aller au contenu

Messages recommandés

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

la solution du post 181 ? c'est celle que j'utilisais jusqu'il y a quelques jours.

Mais elle sera obsolète bientôt, quand on ajoute un device, islight n'est pas mis à  jour etc.

isLight est abondonné par fibaro

 

ici on travaille pour être futur proof :-)

Posté(e)

ah, donc si tu as un Wall Plug, qui pilote un Dimmer, le tonumber() ne fonctionne pas, c'est ça ?

tu es sur que tu commente dans le bon fil ?  :2:

 

le script de jojo modifié avec "interfaces" fonctionne pour les fgs et wallplugs déclarés commes contrôlant des lampes

mais plante avec les fgd qui donnent une valeur a la place de true/false pour leur état (value)

Posté(e)

Non mais là  je parlais juste des 2 lignes que j'ai proposé, pour détecter si la lumière est allumée, avec le "value". Mais si j'ai bien suivi, c'est le WP qui pose problème.

 

J'ai bien compris que le islight est déprécié.

 

(pas facile ces discussions croisées..... bon je vous laisse travailler alors )

Posté(e)

le script de jojo modifié avec "interfaces" fonctionne pour les fgs et wallplugs déclarés commes contrôlant des lampes

mais plante avec les fgd qui donnent une valeur a la place de true/false pour leur état (value)

voilàjustement, d'où les 2 lignes de code que j'ai proposé, provenant du module que j'avais proposé il y a quelques semaines.

Posté(e)

oki compris, testé, mais ça donne 

[ERROR] 00:29:25: line :getValue (arg 2), expected 'unsigned int' got 'string'
le problème n'est que avec les RGBW et les dimmer qui ont une value numérique "cachée" dans un string qui peut être soit nil, soit true, soit false soit ""
Si on évalue avec tonumber ça pète.
Si on n'évalue pas, on ne sais pas quoi chercher (peut être 51 par exemple) si le dimmer est à  51%
 
Entre nous, je dois dire que ceci: 
if DeviceValue and DeviceValue > 0
 me laisse assez perplexe ...  :huh:
 
	    if jsonTable[device].interfaces then
			for interface = 1, #jsonTable[device].interfaces do
			fibaro:debug(type(jsonTable[device].properties.value))
			local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value"))
				if DeviceValue and DeviceValue > 0 then
				fibaro:call(jsonTable[device].id, "turnOff")
				end
			end
		end
Posté(e)

en fait on est des chipoteurs, si on envoie un turnoff à  tout les device interface=light ça fonctionne très bien, on flood un peu le réseau (2X par jour) ...

ce code ci aussi fontionne très bien, mais il n'est pas très beau..

http://www.domotique-fibaro.fr/index.php/topic/4251-voir-si-une-lumi%C3%A8re-est-allum%C3%A9e-et-tout-%C3%A9tindre/page-11#entry95306

 

bref, on aime perdre son temps  :P

Posté(e)

sebcbien, je suis arrivé àla même conclusion que toi en essayant le code de Lazer, qui teste seulement si le device est allumé => utilise déjàla "nouvelle" façon de faire de Fibaro

Posté(e)

pas si chipoteur que cela, car je voudrais que mon VD m'affiche les devices allumés (voir mon screenshot), donc il doit faire ce test de manière fiable

Posté(e)

Hum, c'est le local DeviceValue ...... getValue(....) qui est faux (c'est ma faute, le copIer/coller bourin c'est pas toujours la solution)

essaye comme ça :

local DeviceValue = tonumber(jsonTable[device].properties.value)

Et je l'aime bien mon :

if DeviceValue and DeviceValue > 0 then

Si on peut faire du simple et efficace, je prends  :D

Posté(e)

ben toi aussi tu utilise la nouvelle façon de fibaro avec ce code ?

if jsonTable[device].interfaces then
for interface = 1, #jsonTable[device].interfaces do
if jsonTable[device].interfaces[interface] == "light" then
Posté(e)

jôli lazer.

ceci fontionne:

----------------------------------
-- 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
				local DeviceValue = tonumber(jsonTable[device].properties.value)
				if DeviceValue and DeviceValue > 0 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
Posté(e)

Et je l'aime bien mon :

if DeviceValue and DeviceValue > 0 then

Si on peut faire du simple et efficace, je prends  :D

 

Oui mais heu je vois pas à  quoi ça sert.de faire un and sur deux valeurs identiques...

Posté(e)

Oui mais heu je vois pas à  quoi ça sert.de faire un and sur deux valeurs identiques...

là  il est tard et je ne sais plus pourquoi j'avais fait ça, mais à  l'époque ça m'avait semblé être la bonne solution.

 

En tout cas c'est chouette si ça fonctionne. On évite les "if" compliqués avec des "types()"

Posté(e)

pas si chipoteur que cela, car je voudrais que mon VD m'affiche les devices allumés (voir mon screenshot), donc il doit faire ce test de manière fiable

ah oui ok c'est juste...

La methode de lazer ne vérifie rien et éteint tout... même ce qui est éteint

même les compteursd d'énergie aeon labs  ;)

[DEBUG] 00:51:27: id: 74 is Salon Température Fl type: zwave
[DEBUG] 00:51:27: value: 21.53. Turning Off
[DEBUG] 00:51:27: id: 88 is SDB Température Floo type: zwave
[DEBUG] 00:51:27: value: 21.67. Turning Off
[DEBUG] 00:51:27: id: 1288 is GARAGE Température type: battery
[DEBUG] 00:51:27: value: 14.60. Turning Off
[DEBUG] 00:51:27: id: 1288 is GARAGE Température type: zwave
[DEBUG] 00:51:27: value: 14.60. Turning Off
[DEBUG] 00:51:27: id: 1288 is GARAGE Température type: zwaveWakeup
[DEBUG] 00:51:27: value: 14.60. Turning Off
[DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: battery
[DEBUG] 00:51:27: value: 7.00. Turning Off
[DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: zwave
[DEBUG] 00:51:27: value: 7.00. Turning Off
[DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: zwaveWakeup
[DEBUG] 00:51:27: value: 7.00. Turning Off
[DEBUG] 00:51:27: id: 1314 is SDB Temperature type: zwave
[DEBUG] 00:51:27: value: 21.50. Turning Off
[DEBUG] 00:51:27: id: 1315 is SDB Luminosité type: zwave
[DEBUG] 00:51:27: value: 15.00. Turning Off
[DEBUG] 00:51:27: id: 1359 is Grenier Température type: zwave
[DEBUG] 00:51:27: value: 20.37. Turning Off
[DEBUG] 00:51:27: id: 1361 is Temp eau 1er type: zwave
[DEBUG] 00:51:27: value: 20.50. Turning Off
[DEBUG] 00:51:27: id: 1362 is Temp eau Boiler type: zwave
[DEBUG] 00:51:27: value: 40.31. Turning Off
[DEBUG] 00:51:27: id: 1775 is Cpt Elec V General type: zwave
[DEBUG] 00:51:27: value: 235.67. Turning Off
[DEBUG] 00:51:27: id: 1778 is Cpt Elec V Phase 1 type: zwave
[DEBUG] 00:51:27: value: 234.17. Turning Off
[DEBUG] 00:51:27: id: 1781 is Cpt Elec V Phase 2 type: zwave
[DEBUG] 00:51:27: value: 235.17. Turning Off
[DEBUG] 00:51:27: id: 1784 is Cpt Elec V Phase 3 type: zwave
[DEBUG] 00:51:27: value: 237.67. Turning Off
[DEBUG] 00:51:27: id: 1914 is Cpt Elec A Général type: zwave
[DEBUG] 00:51:27: value: 2.39. Turning Off
[DEBUG] 00:51:27: id: 1915 is Cpt Elec A Phase 1 type: zwave
[DEBUG] 00:51:27: value: 1.07. Turning Off
[DEBUG] 00:51:27: id: 1916 is Cpt Elec A Phase 1 type: zwave
[DEBUG] 00:51:27: value: 0.86. Turning Off
[DEBUG] 00:51:27: id: 1917 is Cpt Elec A Phase 3 type: zwave
[DEBUG] 00:51:27: value: 0.46. Turning Off
[DEBUG] 00:51:27: id: 1969 is Qubino V1 type: energy
[DEBUG] 00:51:27: value: 46. Turning Off
[DEBUG] 00:51:27: id: 1969 is Qubino V1 type: light
[DEBUG] 00:51:27: value: 46. Turning Off
[DEBUG] 00:51:27: id: 1969 is Qubino V1 type: power
[DEBUG] 00:51:27: value: 46. Turning Off
[DEBUG] 00:51:27: id: 1969 is Qubino V1 type: zwave
[DEBUG] 00:51:27: value: 46. Turning Off
Posté(e)

La methode de lazer ne vérifie rien et éteint tout... même ce qui est éteint

euh... quoi ?

Mon test qui te semble étrange sert justement àéviter de tout éteindre

Posté(e)

j'y comprends plus rien, il n'y a plus rien qui fonctionne, je redémarre ma box.

Donc Sebcbien, tu dis finalement que le code de Lazer ne fonctionne pas ?

Posté(e)

ok, j'ai rien dit, je suis un ane ;-)

celui ci filtre les light et fonctionne sur les dimmer et rgbw

plus qu'a ajouter les wallplug et fgs

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

 
Posté(e)

ok, ça ça fontionne pour tout:

mais je sais pas ce test va être bon pour afficher la liste avec le bouton analyse...

[DEBUG] 01:06:25: id: 23 is Lampadaires Salon (WPlug) type: light
[DEBUG] 01:06:25: value: true. Turning Off
[DEBUG] 01:06:25: id: 49 is Bureau type: light
[DEBUG] 01:06:25: value: 99. Turning Off
[DEBUG] 01:06:25: id: 1312 is Led Bureau (WPlug) type: light
[DEBUG] 01:06:25: value: true. Turning Off
[DEBUG] 01:06:25: id: 1934 is RGBW Dressing SDB type: light
[DEBUG] 01:06:25: value: 12. Turning Off
[DEBUG] 01:06:25: id: 1948 is Salon type: light
[DEBUG] 01:06:25: value: 99. Turning Off
[DEBUG] 01:06:25: id: 1965 is Salle a Manger type: light
[DEBUG] 01:06:25: 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
					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
Posté(e)

euh... quoi ?

Mon test qui te semble étrange sert justement àéviter de tout éteindre

oui mais comme j'avais enlevé le test "light" bah il m'éteignait tout mes device qui avaient une value

my bad ;-)

Posté(e)

Bon bah voilà  c'est cool tout ça :)

 

tu es sur que tu commente dans le bon fil ?  :2:

Et oui, tu vois finalement je n'étais pas le seul à  être largué :P

 

C'est chaud de bosser à  3 en même temps avec tous les messages croisés.

Enfin on y est arrivé c'est l'essentiel. Je suis fatigué, au dodo :o

Posté(e)

je ne comprends pas pourquoi ça ne fonctionnerait pas pour mon test d'analyse.

Mais en effet, ça ne fonctionne pas (il me dit 0 devices alors que mon WP est on)

Posté(e)

je ne comprends pas pourquoi le test fonctionne pour étteindre les lumières, et pas pour faire autre chose ...

àdemain àtête reposée.

  • Upvote 1
Posté(e)

ok ça fonctionne.

En fait je partais sur le bout de code de Lazer, mais sebcbien, tu as rajouté un or ( petit filou !!)

et évidemment tout fonctionne

if (DeviceValue and DeviceValue > 0) or (jsonTable[device].properties.value == "true") then

comme de toute façon je n'aurais pas réussi à  dormir avec cette questions dans la tête, j'ai continué.

 

Voici donc la v4.2 de sebcbien, lazer et moi

Toutes_Lumieres_v4.2.vfib

 

  • Upvote 2
×
×
  • Créer...