Aller au contenu
SimonT

Associer Synchroniser 2 Modules Fibaro Rgbw?

Recommended Posts

désolé Shad mais ca marche pas chez moi voici l'erreur

 

[ERROR] 17:05:37: line 37: attempt to get length of local 'RGBW_slaves' (a number value)

      --[[
    %% properties
    34 color
    %% globals
    --]]
     
    local RGBW_master = 34;
    local RGBW_slaves = 49;
     
    function split(s, pattern, maxsplit)
      local pattern = pattern or ' '
      local maxsplit = maxsplit or -1
      local s = s
      local t = {}
      local patsz = #pattern
      while maxsplit ~= 0 do
        local curpos = 1
        local found = string.find(s, pattern)
        if found ~= nil then
          table.insert(t, string.sub(s, curpos, found - 1))
          curpos = found + patsz
          s = string.sub(s, curpos)
        else
          table.insert(t, string.sub(s, curpos))
          break
        end
        maxsplit = maxsplit - 1
        if maxsplit == 0 then
          table.insert(t, string.sub(s, curpos - patsz - 1))
        end
      end
      return t
    end
     
     
    local result = split(fibaro:getValue(RGBW_master, "color"), ',')
    for i = 1, #RGBW_slaves do
      if (result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0" and (tonumber(fibaro:getValue(RGBW_master, "currentProgramID")) > 0)) then
        fibaro:call(RGBW_slaves[i], "startProgram", fibaro:getValue(RGBW_master, "currentProgramID"));
      else
        fibaro:call(RGBW_slaves[i], "setColor", result[1], result[2], result[3], result[4])
      end
    end

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est bon ca marche fallait juste laissé les acolades

local RGBW_slaves = {49};

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool, du coup il n'y a pas besoin de la ligne

local startSource = fibaro:getSourceTrigger();

                                              ....pour que cela fonctionne!

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut à  tous,

 

Je remonte le sujet, j'ai un souci avec le script de shad il ne fonctionne pas chez moi (malheureusement).

 

Celui ci fonctionne MAIS ! il change la couleur de tous les bandeaux :(

Donc impossible d'avoir des ambiances différentes ET de passer de Master/Slave a un moment donné.

 

En tous les cas en 4x je n'arrive pas a faire fonctionner ton script Shad, pas d'erreur, rien... mais pas de changement.

 

Voici le script qui change en tout mais a chaque fois que tu change l'un ça change l'autre... :(


 

--[[
%% properties
405 currentProgramID
405 color
%% globals
--]]
 
local fromID = 405
local toID = 415
 
-- Allows us to set the colour from a string like 'r,g,b,w'
function setTheColour (deviceID, colourString)
  local RGBWTable= {}
  local i = 1
 
  for value in string.gmatch(colourString,"(%d+)") do
    RGBWTable[i] = value
    i = i + 1
  end
 
  fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
end
 
local trigger = fibaro:getSourceTrigger()
if (trigger['type'] == 'property') then
  if (trigger['propertyName'] == 'currentProgramID') then
    fibaro:call(toID, 'startProgram', fibaro:getValue(fromID, 'currentProgramID'))
    if (fibaro:getValue(fromID, 'currentProgramID') == '0') then
      setTheColour(toID, fibaro:getValue(fromID, 'color'))
    end
  elseif (trigger['propertyName'] == 'color') then
    if (fibaro:getValue(fromID, 'currentProgramID') == '0') then
      setTheColour(toID, fibaro:getValue(fromID, 'color'))
    end
  end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de démerder le script qui était bugué.

Ce script permet de : D'avoir des ambiances différentes avec xxx bandeaux, ET de passer le Master vers les Slaves et donc d'associer la couleur du Master à  tous les Slaves !

 

--[[
%% properties
405 color
%% globals
--]]

local id_master = 405; -- ID des Master (ID Master)
local id_slaves = {415}; -- ID des Slaves {1}, {1,2,3}
local debug = true; -- Debug

if debug then fibaro:debug("Syncing RGB"); end

function split(s, pattern, maxsplit)
  local pattern = pattern or ' '
  local maxsplit = maxsplit or -1
  local s = s
  local t = {}
  local patsz = #pattern
  while maxsplit ~= 0 do
    local curpos = 1
    local found = string.find(s, pattern)
    if found ~= nil then
      table.insert(t, string.sub(s, curpos, found - 1))
      curpos = found + patsz
      s = string.sub(s, curpos)
    else
      table.insert(t, string.sub(s, curpos))
      break
    end
    maxsplit = maxsplit - 1
    if maxsplit == 0 then
      table.insert(t, string.sub(s, curpos - patsz - 1))
    end
  end
  return t
end

local result = split(fibaro:getValue(id_master, "color"), ',')

if debug then fibaro:debug(result[1]..","..result[2]..","..result[3]..","..result[4]); end

for i = 1, #id_slaves do
  if (result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0" and (tonumber(fibaro:getValue(id_master, "currentProgramID")) > 0)) then
    if debug then fibaro:debug(fibaro:getValue(id_master, "currentProgramID")); end
    fibaro:call(id_slaves[i], "startProgram", fibaro:getValue(id_master, "currentProgramID"));
  else
    fibaro:call(id_slaves[i], "setColor", result[1], result[2], result[3], result[4])
  end
end
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Domodial, 

 

Je pense que le lien de SimonT ne pointait pas le script de Shad, le sien est un peu plus haut dans le fil du post et commence aussi par définir une Id master et les slaves juste en dessous...

En utilisation on manipule le master...les slaves suivent, ET, si on veux changer la couleur d'un des slaves on peut le manipuler sans modifier le master ni les autres slaves.

Partager ce message


Lien à poster
Partager sur d’autres sites

Par contre si je te relis correctement, tu veux dire que dans le script UK tout les modules sont liés les uns aux autres c'est ça!

Si on touche àn'importe lequel des modules, tous les autres suivent?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui dans le premier script que j'ai posté tous les bandeaux sont liés, la couleur est la meme pour tous du moment ou tu en touche un.

Le deuxieme script est mieux, tu as par exemple le Maitre en rouge, et l'esclave en bleu. Tant que tu touche a l'esclave le Maitre n'est pas affecté, tu conserves deux couleurs distinctes.

Dès lors que tu changes la couleur du Maitre, ça change aussi celle de l'esclave, l'esclave se retrouve avec la couleur du Maitre.

 

Par contre je ne vois pas de quel script tu me parles, celui de Shad ou de SimonT ?

J'ai essayé celui de Shad posté sur la première page mais il ne fonctionne pas chez moi :(

Mais à  te lire il réagirait comme le deuxieme script que j'ai posté, donc comme l'explication çi dessus (si tu me comprends car moi meme j'ai du mal mdrrr).

Partager ce message


Lien à poster
Partager sur d’autres sites

mdrrr,

 

Ouai ça deviens compliquer il y a du code partout ds le sujet, le premier que tu as poster page précédente démarre comme dans le lien de simonT juste au dessus, avec un from ID, to ID, ce lien pointe un script sur le site fibaro.uk  ... Bref, d'où ma question à  laquelle tu as parfaitement répondu ;-) :

leur script rend tout les modules liés sans possibilité de les dissocier.  

Et bonne fête de fin d'année :-D

Partager ce message


Lien à poster
Partager sur d’autres sites

 Je viens d'ajouter un deuxième module FGRGB dans la même pièce puis j'ai utilisé ton second script (j'ai dà» ajouter "405 currentProgramID" dans l'entête en plus de "405 color") et c'est nickel.

Merci @Domodial.  :13:  :60::13:

Partager ce message


Lien à poster
Partager sur d’autres sites

×