Aller au contenu

Aide Code Lua Rgb


pepite

Messages recommandés

heuuu à  priori, après recherche, faute d'aurtografes ;-)

 

C'est "setTimeout", le 2eme T en majuscule lol

--[[
%% properties
208 value
%% globals
--]]
 
------ User settings -----
local id_RGBs = {239, 545}
local ProgRGB = 546
---------------
 
local currentdate = os.date("%d/%m/%Y %H:%M:%S")
fibaro:debug("Démarrage du script : " ..currentdate)

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

--------------function GetPutValueRGB----
function GetPutValueRGBs(id)
     for i = 1, #id_RGBs do
        -- Recup Couleur et programme des RGBs
        local result = split(fibaro:getValue(id_RGBs[i], "color"), ',')
        local Prog = tonumber(fibaro:getValue(id_RGBs[i], "currentProgramID"))
    
        -- Debug valeur result et prog
        fibaro:debug("RGB num : " ..id_RGBs[i].. " avec Couleur : " ..result[1]..","..result[2]..","..result[3]..","..result[4])
        fibaro:debug("RGB num " ..id_RGBs[i].. " sur le Programme " ..Prog)
            
        setTimeout(
            function()
            fibaro:debug("Remise valeur précédente des RGBs")
                if ((result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0") and (tonumber(Prog) > 0)) then
                    fibaro:call(id_RGBs[i], "startProgram", Prog)
                    fibaro:debug("Prog " ..Prog.. " sur " ..id_RGBs[i])
                else
                    fibaro:call(id_RGBs[i], "setColor", result[1], result[2], result[3], result[4])
                    fibaro:debug("Couleur sur : " ..id_RGBs[i])
                end
        end, 15000) --tempo 15 secs
     end
end
----------

function PutAlerteRGBs(id)
    for i = 1, #id_RGBs do
         -- SI activation cellule 208, demarrage des RGB sur le programme ProgRGB
        fibaro:debug("Mise des RGBs sur Programme : " ..ProgRGB)
        fibaro:call(id_RGBs[i], "startProgram", ProgRGB)
    end
end
-------------

GetPutValueRGBs()
PutAlerteRGBs()


  

Lien vers le commentaire
Partager sur d’autres sites

Rien de grave j'espère?

@pepite, toujours prêt.

Cette fois, avec un bandeau allumé et un éteint, les deux passent en prog 546 puis, après la pause, rebascule sur le prog d'origine pour l'un et s'éteint pour l'autre mais une seule petite seconde et reprennent en cœur le prog 546 et ne s'arrêtent pas.

[DEBUG] 17:31:27: Démarrage du script : 01/03/2016 17:31:27
[DEBUG] 17:31:27: RGB num : 239 avec Couleur : 0,0,0,0
[DEBUG] 17:31:27: RGB num 239 sur le Programme 6
[DEBUG] 17:31:27: RGB num : 545 avec Couleur : 0,0,0,0
[DEBUG] 17:31:27: RGB num 545 sur le Programme 0
[DEBUG] 17:31:27: Mise des RGBs sur Programme : 546
[DEBUG] 17:31:27: Mise des RGBs sur Programme : 546
[DEBUG] 17:31:28: Démarrage du script : 01/03/2016 17:31:28
[DEBUG] 17:31:28: RGB num : 239 avec Couleur : 0,0,0,0
[DEBUG] 17:31:28: RGB num 239 sur le Programme 546
[DEBUG] 17:31:28: RGB num : 545 avec Couleur : 0,0,0,0
[DEBUG] 17:31:28: RGB num 545 sur le Programme 546
[DEBUG] 17:31:28: Mise des RGBs sur Programme : 546
[DEBUG] 17:31:28: Mise des RGBs sur Programme : 546
[DEBUG] 17:31:42: Remise valeur précédente des RGBs
[DEBUG] 17:31:42: Prog 6 sur 239
[DEBUG] 17:31:42: Remise valeur précédente des RGBs
[DEBUG] 17:31:42: Couleur sur : 545
[DEBUG] 17:31:43: Remise valeur précédente des RGBs
[DEBUG] 17:31:43: Prog 546 sur 239
[DEBUG] 17:31:43: Remise valeur précédente des RGBs
[DEBUG] 17:31:43: Prog 546 sur 545
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

ah oui rien de grave @mprinfo ? courage

 

@did,

 

donc cela fonctionne avec le setTimeout pour les 15 secs, on y est presque.

 

heuuu, alors 2 bugs :

 1- ca boucle 2 fois ? hihihi, il recupere le programme précédent : ok mais recupere aussi apres etre passe en 546...heuuu

 2- il remet le 546 à  la fin comme tu m'as dit et on le voit bien sur le debug hihihi

 

Merci, des boulettes dans le code encore lol

Lien vers le commentaire
Partager sur d’autres sites

Et comme ceci :

 Modifications :

   - appel que d'1 fonction

   - limitation scene à  une seule instance

--[[
%% properties
208 value
%% globals
--]]
 
------ User settings -----
local id_RGBs = {239, 545}
local ProgRGB = 546
---------------
--------- Limitation à  1 seule instance ---------
if (fibaro:countScenes() > 1) then
fibaro:abort()
end
----------------------------------------------
 
 
local currentdate = os.date("%d/%m/%Y %H:%M:%S")
fibaro:debug("Démarrage du script : " ..currentdate)

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

--------------function GetPutValueRGB----
function GetPutValueRGBs(id)
     for i = 1, #id_RGBs do
        -- Recup Couleur et programme des RGBs
        local result = split(fibaro:getValue(id_RGBs[i], "color"), ',')
        local Prog = tonumber(fibaro:getValue(id_RGBs[i], "currentProgramID"))
    
        -- Debug valeur result et prog
        fibaro:debug("RGB num " ..id_RGBs[i].. " avait comme Couleur : " ..result[1]..","..result[2]..","..result[3]..","..result[4])
        fibaro:debug("RGB num " ..id_RGBs[i].. " était sur le Programme " ..Prog)
        
        -- SI activation cellule 208, demarrage des RGB sur le programme ProgRGB
        fibaro:debug("Mise des RGBs sur Programme : " ..ProgRGB)
        fibaro:call(id_RGBs[i], "startProgram", ProgRGB)
            
        setTimeout(
            function()
            fibaro:debug("Remise des valeurs précédentes sur les RGBs")
                if ((result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0") and (tonumber(Prog) > 0)) then
                    fibaro:call(id_RGBs[i], "startProgram", Prog)
                    fibaro:debug("Prog " ..Prog.. " sur " ..id_RGBs[i])
                else
                    fibaro:call(id_RGBs[i], "setColor", result[1], result[2], result[3], result[4])
                    fibaro:debug("Couleur sur : " ..id_RGBs[i])
                end
        end, 15000) --tempo 15 secs
     end
end
----------

GetPutValueRGBs()

 

Lien vers le commentaire
Partager sur d’autres sites

 Bonjour @pepite,

Je dirais qu'on est pas mal là ,

[DEBUG] 13:50:36: Démarrage du script : 02/03/2016 13:50:36
[DEBUG] 13:50:36: RGB num 239 avait comme Couleur : 0,0,0,0
[DEBUG] 13:50:36: RGB num 239 était sur le Programme 6
[DEBUG] 13:50:36: Mise des RGBs sur Programme : 546
[DEBUG] 13:50:36: RGB num 545 avait comme Couleur : 0,0,0,0
[DEBUG] 13:50:36: RGB num 545 était sur le Programme 0
[DEBUG] 13:50:36: Mise des RGBs sur Programme : 546
[DEBUG] 13:50:51: Remise des valeurs précédentes sur les RGBs
[DEBUG] 13:50:51: Prog 6 sur 239
[DEBUG] 13:50:51: Remise des valeurs précédentes sur les RGBs
[DEBUG] 13:50:51: Couleur sur : 545

Et où devrais-je insérer ma commande pour le TTS (avant le sleep comme il y a de la latence vers le Sonos)?

fibaro:call(535, "pressButton", 2)
Lien vers le commentaire
Partager sur d’autres sites

Cool, c'est pas mal d'après le debug ;-)

 

Et les 2 bandeaux se mettent sur le 54 en même temps ? plus de latence ?

 

Quand veux tu que le message TTS ait lieu ? avant la mise sur le 546 ou après ?

Pour éviter la latence tu peux faire un mp3 si le message est toujours identique.

Lien vers le commentaire
Partager sur d’autres sites

je suis plus que timide en code, la fonction split vient du code que tu as recupéré. j'aurais jamais pu ecrire ca, j'ai du mal a la comprendre lol

 

Le fonctionnement à  approuver par @did

 - sans variable

- on doit pouvoir mettre autant de RGBs que l'on veut.

- stocke l'etat de chaque RGB avant une "alerte", soit couleur soit programme.

- mise en alerte des RGBs sur un programme : variable ProgRGB

- pour les besoins de @Did, tempo de 15 secs sur l'alerte, modifiable facilement je pense qu'on doit pouvoir appeler une varaible dans le setTimeout

- remise des Valeurs sur le RGB avant l'alerte, eteint,couleur ou prog

Lien vers le commentaire
Partager sur d’autres sites

Test numero 956 412 ;-)

 

- Temporisation variabilisée dans les "User Settings", je ne sais pas si c'est possible, a tester

--[[
%% properties
208 value
%% globals
--]]
 
------ User settings -----
local id_RGBs = {239, 545} -- liste des IDs des RGBs concernés
local ProgRGB = 546 -- Programme "alerte" souhaité à  mettre sur les RGBs
local Tempo = 15 -- En secondes, durée de la mise sur le programme "ALERTE" des RGBs, avant remise des valeurs précédentes
--------------------

--------- Limitation à  1 seule instance ---------
if (fibaro:countScenes() > 1) then
fibaro:abort()
end
----------------------------------------------
 
 
local currentdate = os.date("%d/%m/%Y %H:%M:%S")
fibaro:debug("Démarrage du script : " ..currentdate)

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

--------------function GetPutValueRGB----
function GetPutValueRGBs(id)
     for i = 1, #id_RGBs do
        -- Recup Couleur et programme des RGBs
        local result = split(fibaro:getValue(id_RGBs[i], "color"), ',')
        local Prog = tonumber(fibaro:getValue(id_RGBs[i], "currentProgramID"))
    
        -- Debug valeur result et prog
        fibaro:debug("RGB num " ..id_RGBs[i].. " avait comme Couleur : " ..result[1]..","..result[2]..","..result[3]..","..result[4])
        fibaro:debug("RGB num " ..id_RGBs[i].. " était sur le Programme " ..Prog)
        
        -- SI activation cellule 208, demarrage des RGB sur le programme ProgRGB
        fibaro:debug("Mise des RGBs sur Programme : " ..ProgRGB)
        fibaro:call(id_RGBs[i], "startProgram", ProgRGB)
            
        setTimeout(
            function()
            fibaro:debug("Remise des valeurs précédentes sur les RGBs")
                if ((result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0") and (tonumber(Prog) > 0)) then
                    fibaro:call(id_RGBs[i], "startProgram", Prog)
                    fibaro:debug("Prog " ..Prog.. " sur " ..id_RGBs[i])
                else
                    fibaro:call(id_RGBs[i], "setColor", result[1], result[2], result[3], result[4])
                    fibaro:debug("Couleur sur : " ..id_RGBs[i])
                end
        end, Tempo*1000) --tempo
     end
end
----------

GetPutValueRGBs()

 

Lien vers le commentaire
Partager sur d’autres sites

ProgRGB est la variable contenant le numero du programme à  mettre sur tous les RGBs de la liste.

 

@Did, sur un declenchement de cellule en l'occurence voulait que ces RGBs se mettent sur le PROGRAMME 546 pendant 15 secs, un peu comme une laerte, c'est pour ca que j'ai utilisé ce terme.

 

- Les RGBs sont allumés ou eteints

- un declencheur --> alerte

- les RGBs sont tous en "alerte" sur un programme

- Duree de l'alerte = Tempo

- les RGBs se remettent sur leur état initial avant "l'ALERTE" ;-)

 

Suis pas bien clair. hihi

Lien vers le commentaire
Partager sur d’autres sites

le 208 value, c'est le declencheur pour @did,

 

pas sur que ce soit un FGMS, ce sont des cellules exterieures je pense.

 

D'ailleurs @Did, à  vérifier, mais avec le setTimeout et le countScene limités à  1, si une voiture reste devant les cellules, je pense que la scene tourne en rond :

 

Ce que je comprends :

- cellule active : 208 à  1

- lancement de la scene

- cellule reste à  1 puisque voiture arretee

- le countscene limitée à  1, donc la 1ere instance se termine.

- et rebelote : le value à  1 relance la scene

Lien vers le commentaire
Partager sur d’autres sites

 Salut @Domodial,

208, c'est l'Id du contact FGBS qui déclenche le jeu de cellules qui sert aussi pour la fermeture du portail (asservissement du FGBS).

Alors je viens de tester après avoir retiré les variables du panneau, ça fonctionne. Et en ajoutant un troisième FGRGB (Id 554)au début du code, c'est OK aussi. En effet, il faut que je teste si, comme ce week-end, une voiture reste plus de 15 secondes devant les cellules.

Pour le message TTS, il faudrait le lancer au début.

[DEBUG] 15:04:06: Démarrage du script : 02/03/2016 15:04:06
[DEBUG] 15:04:06: RGB num 239 avait comme Couleur : 0,0,0,0
[DEBUG] 15:04:06: RGB num 239 était sur le Programme 0
[DEBUG] 15:04:06: Mise des RGBs sur Programme : 546
[DEBUG] 15:04:06: RGB num 545 avait comme Couleur : 0,0,0,0
[DEBUG] 15:04:06: RGB num 545 était sur le Programme 0
[DEBUG] 15:04:06: Mise des RGBs sur Programme : 546
[DEBUG] 15:04:06: RGB num 554 avait comme Couleur : 0,0,0,0
[DEBUG] 15:04:06: RGB num 554 était sur le Programme 0
[DEBUG] 15:04:06: Mise des RGBs sur Programme : 546
[DEBUG] 15:04:21: Remise des valeurs précédentes sur les RGBs
[DEBUG] 15:04:21: Couleur sur : 239
[DEBUG] 15:04:21: Remise des valeurs précédentes sur les RGBs
[DEBUG] 15:04:21: Couleur sur : 545
[DEBUG] 15:04:21: Remise des valeurs précédentes sur les RGBs
[DEBUG] 15:04:21: Couleur sur : 554
Lien vers le commentaire
Partager sur d’autres sites

Super @Did,

 

A tester avec des programmes et couleurs differentes ;-)

 

Je t'ai mis le message TTS dans ce code, avec la latence, à  voir quand tu vas l'entendre ;-)

--[[
%% properties
208 value
%% globals
--]]
 
------ User settings -----
local id_RGBs = {239, 545} -- liste des IDs des RGBs concernés
local ProgRGB = 546 -- Programme "alerte" souhaité à  mettre sur les RGBs
local Tempo = 15 -- En secondes, durée de la mise sur le programme "ALERTE" des RGBs, avant remise des valeurs précédentes
--------------------

--------- Limitation à  1 seule instance ---------
if (fibaro:countScenes() > 1) then
fibaro:abort()
end
----------------------------------------------
 
 
local currentdate = os.date("%d/%m/%Y %H:%M:%S")
fibaro:debug("Démarrage du script : " ..currentdate)

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

--------------function GetPutValueRGB----
function GetPutValueRGBs(id)
     for i = 1, #id_RGBs do
        -- Recup Couleur et programme des RGBs
        local result = split(fibaro:getValue(id_RGBs[i], "color"), ',')
        local Prog = tonumber(fibaro:getValue(id_RGBs[i], "currentProgramID"))
    
        -- Debug valeur result et prog
        fibaro:debug("RGB num " ..id_RGBs[i].. " avait comme Couleur : " ..result[1]..","..result[2]..","..result[3]..","..result[4])
        fibaro:debug("RGB num " ..id_RGBs[i].. " était sur le Programme " ..Prog)
        
        -- SI activation cellule 208, demarrage des RGB sur le programme ProgRGB
        fibaro:debug("Mise des RGBs sur Programme : " ..ProgRGB)
        fibaro:call(id_RGBs[i], "startProgram", ProgRGB)
            
        setTimeout(
            function()
            fibaro:debug("Remise des valeurs précédentes sur les RGBs")
                if ((result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0") and (tonumber(Prog) > 0)) then
                    fibaro:call(id_RGBs[i], "startProgram", Prog)
                    fibaro:debug("Prog " ..Prog.. " sur " ..id_RGBs[i])
                else
                    fibaro:call(id_RGBs[i], "setColor", result[1], result[2], result[3], result[4])
                    fibaro:debug("Couleur sur : " ..id_RGBs[i])
                end
        end, Tempo*1000) --tempo
     end
end
----------

--- Message TTS ----
fibaro:call(535, "pressButton", 2)

-- Lancement fonction ---
GetPutValueRGBs()
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...