Page 1 sur 1

Désactiver l'attente de la confirmation d'action

Publié : 09 avr. 2016, 16:34
par faber8
Bonjour,

J'ai un Raspberry Pi 2 avec une clé USB Z-Wave, Domoticz installé et un module Fibaro RGBW (Plus d'autres modules sans intérêt pour ce sujet).
Tout cela fonctionne bien mais voila mon souci :

Je cherche à créer une ambiance lumineuse avec mon bandeau lumineux commandé par le module RGBW.
J'ai donc créé un variateur virtuel qui est scruté par un script Lua qui fait varier les couleurs plus ou moins vite selon la valeur du variateur.
Toujours jusque là : Tout va bien ... Sauf ...
Si je cherche à aller trop vite, à un moment, dans le log de Domoticz, j’aperçois des Timeout venant de commandes envoyées qui n'ont pas reçu de réponse. Du coup le changement de couleur s'arrête jusqu'à ce que le timeout arrive et passe à la suite.

Je me demande donc si, pour le module RGBW, le temps de ce programme d’ambiance, je ne peux pas désactiver l'attente de confirmation de commande.
Ce n'est pas grave si une couleur n'est pas reçu par le module, vu que j'en envoi une toutes les secondes.

Voila, je n'ai pas trouvé en cherchant sur les forums alors je me permet de poser la question ici.
Merci d'avance pour votre aide

Fabrice

Re: Désactiver l'attente de la confirmation d'action

Publié : 12 avr. 2016, 17:55
par LiPeR
Hello,

Si j'ai bien compris, tu veux pas avoir un retour de ton device ? Si tel est le cas, je ne crois pas que cela soit possible :| Par contre, je suis intéressé par ton script LUA pour la gestion de l'ambiance lumineuse 8-)

Re: Désactiver l'attente de la confirmation d'action

Publié : 21 avr. 2016, 21:42
par faber8
Salut LiPeR,

T'avais bien compris la question. Donc tant pis, je ralentirais la vitesse minimale.
Pour te récompenser d'avoir répondu à ma question, voici mon script :

Le principe :
Faire changer de couleur le bandeau lumineux à intervalle régulier selon la valeur du variateur virtuel.
On ne change qu'une couleur à la fois pour ne pas avoir trop de trafic sur le réseau zwave.
La couleur changée n'est jamais la même que précédemment.
Si la vitesse de défilement est rapide, on désactive l'effet de transition des couleurs du bandeau.

Le code :

Code : Tout sélectionner

 -- Gère la lumière d'ambiance

-- Nom des variables utilisateur :
local Ambiance_last = 'Ambiance_Last'       -- Dernière couleur changée : 0 = R / 1 = V / 2 = B
local Ambiance_speed = 'Ambiance_Speed'     -- Dernière vitesse de défilement demandée
local Ambiance_color_r = 'Ambiance_Color_R' -- Dernière couleur rouge définie
local Ambiance_color_v= 'Ambiance_Color_V'  -- Dernière couleur verte définie
local Ambiance_color_b = 'Ambiance_Color_B' -- Dernière couleur bleue définie

-- Nom des appareils :
local Variateur = 'RPI - Ambiance'           -- Nom du variateur virtuel
local Rouge = '$RGB1 - Rouge'         -- Nom du variateur de rouge du module RGBW
local Vert = '$RGB1 - Vert'           -- Nom du variateur de vert du module RGBW
local Bleu = '$RGB1 - Bleu'           -- Nom du variateur de bleu du module RGBW
local Module_Rgbw = '12'              -- Node ID du module RGBW (+1) : Aller dans le "OpenZWave Control Panel" (Réglages / Matériel / Réglages / Gestion de noeud / Panneau de commade) et ajouter 1 au "Node Id" du "FIBARO System FGRGBWM441 RGBW Controller"

-- Nom du fichier de Log :
local LogFile = 'Log_ambiance.txt'

-- Adresse du fichier json :
local Json = 'http://10.0.0.10:8080/json.htm'

-- *** Fin des variables *** --

-- Fonctions :
math.randomseed(os.time())
math.random(); math.random(); math.random()

function trace(str)
	-- Dé-commenter les lignes ci-dessous pour activer le retour dans le Log Domoticz
	-- print("Ambiance : "..str)
	-- TextToLogFile = TextToLogFile..str..'\r\n'
end

-- Gestion des évènements :
commandArray = {}
year = string.sub(last_move_off, 1, 4)
month = string.sub(last_move_off, 6, 7)
day = string.sub(last_move_off, 9, 10)
hour = string.sub(last_move_off, 12, 13)
minutes = string.sub(last_move_off, 15, 16)
seconds = string.sub(last_move_off, 18, 19)
avant = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
maintenant = os.time()
TextToLogFile = ''

if (otherdevices[Variateur] ~= 'Off') then
	local speed = tonumber(otherdevices_svalues[Variateur])
	local speed_old =  tonumber(uservariables[Ambiance_speed])
	local last_value =  tonumber(uservariables[Ambiance_last])
	local last_change = uservariables_lastupdate[Ambiance_last]
	if (speed == 0) then
		-- Allumage du mode ambiance
		speed = 1
		commandArray[Variateur]=tostring('Set Level ' .. 7)
	end
	if (speed > 2) then 
		speed = speed ^ 2
	end
	if (speed_old ~= speed) then
		if (speed > 2) then
			-- Vitesse de transition à 10
			oss = "curl '".Json."?type=command&param=applyzwavenodeconfig&idx=".Module_Rgbw."&valuelist=10_MTA%3D'&"
		else
			-- Vitesse de transition à 0
			oss = "curl '".Json."?type=command&param=applyzwavenodeconfig&idx=".Module_Rgbw."&valuelist=10_MA%3D%3D'&"
		end
		os.execute(oss)
		commandArray['Variable:'..Ambiance_speed] = tostring(speed)
	end
	year = string.sub(last_change, 1, 4)
	month = string.sub(last_change, 6, 7)
	day = string.sub(last_change, 9, 10)
	hour = string.sub(last_change, 12, 13)
	minutes = string.sub(last_change, 15, 16)
	seconds = string.sub(last_change, 18, 19)
	avant = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
	-- Nombre de secondes depuis le dernier changement de couleur :
	diff = os.difftime (maintenant, avant)
	if (diff >= speed) then
		-- On va changer une couleur
		trace('musique a vitesse ' .. speed)
		if (last_value == 0) then
			last_value = math.random(1, 2)
		elseif (last_value == 1) then
			last_value = math.random(0, 1)*2
		else
			last_value = math.random(0, 1)
		end
		commandArray['Variable:'..Ambiance_last] = tostring(last_value)
		
		-- On recherche une nouvelle valeur pour la couleur
		local actu_color = 0
		if (last_value == 0) then
			actu_color = tonumber(uservariables[Ambiance_color_r])
		elseif (last_value == 1) then
			actu_color = tonumber(uservariables[Ambiance_color_v])
		else
			actu_color = tonumber(uservariables[Ambiance_color_b])
		end
		local next_color = math.random(0, 100)
		while (math.abs(next_color-actu_color)<25) do
			next_color = math.random(0, 100)
		end
		if (last_value == 0) then
			commandArray[Rouge]=tostring('Set Level ' .. next_color)
			commandArray['Variable:'..Ambiance_color_r] = tostring(next_color)
		elseif (last_value == 1) then
			commandArray[Vert]=tostring('Set Level ' .. next_color)
			commandArray['Variable:'..Ambiance_color_v] = tostring(next_color)
		else
			commandArray[Bleu]=tostring('Set Level ' .. next_color)
			commandArray['Variable:'..Ambiance_color_b] = tostring(next_color)
		end
	end
elseif (devicechanged[Variateur] == 'Off') then
	commandArray['Variable:'..Ambiance_speed] = '0'
	-- Vitesse de transition remise à 10 si jamais on était passé en dessous
	oss = "curl '".Json."?type=command&param=applyzwavenodeconfig&idx=".Module_Rgbw."&valuelist=10_MTA%3D'&"
	os.execute(oss)
	commandArray[Rouge]=tostring('Set Level ' .. 0)
	commandArray[Vert]=tostring('Set Level ' .. 0)
	commandArray[Bleu]=tostring('Set Level ' .. 0)
end
-- Fin de la gestion de l'ambiance

if (TextToLogFile ~= '') then
	fichier = io.open(LogFile, "a")
	TextToLogFile = os.date('%x %X')..' : '..TextToLogFile
	fichier:write(TextToLogFile)
	fichier:close()
	os.execute("chmod 777 "..TextToLogFile)
end
return commandArray

... enfin c'est se qu'il en reste après suppression de plein d'autres évènements (selon la luminosité de la pièce, des mouvements ou encore l'allumage de la télé 8-) ).
Donc il peut y avoir des bugs alors n'hésite pas à revenir si tu as des problèmes d'intégration.

Fabrice