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¶m=applyzwavenodeconfig&idx=".Module_Rgbw."&valuelist=10_MTA%3D'&"
else
-- Vitesse de transition à 0
oss = "curl '".Json."?type=command¶m=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¶m=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é

).
Donc il peut y avoir des bugs alors n'hésite pas à revenir si tu as des problèmes d'intégration.
Fabrice