Aller au contenu

Recommended Posts

Voici un petit tuto pour les fonctionnalité possible avec la minimote.

 Avant touche chose la scène de base pour faire fonctionner la minimote.

Remplacez l'id des lignes 3 et 7 par celui de votre télécommande.

--[[
%% properties
156 sceneActivation
%% globals
--]]
 
local Minimotesalon = fibaro:getValue(156, "sceneActivation");
 
if (tonumber(Minimotesalon) == 1) then

elseif (tonumber(Minimotesalon) == 2) then

elseif (tonumber(Minimotesalon) == 3) then

elseif (tonumber(Minimotesalon) == 4) then

elseif (tonumber(Minimotesalon) == 5) then

elseif (tonumber(Minimotesalon) == 6) then

elseif (tonumber(Minimotesalon) == 7) then

elseif (tonumber(Minimotesalon) == 8) then

end

Maintenant entrons dans le vif du sujet.

 

Gestion d'une alarme:

Il est tout à  fait possible d'armer des modules spécifiques pour votre alarme mais le problème si un module est "breached" votre alarme va s'activer.

Grâce au code suivant vos modules ne s'armeront pas et vous recevrez une notification push sur les modules breached.

 

Le code a mettre avant celui de la minimote.

Remplacez les id des sensors et le nom des pièces ou ils se trouvent et ligne 27 mettez l'id de votre téléphone ou autre.

local windowSensor = {14, 47, 32, 124, 111, 114, 115, 116};
local placeSensor = {"salon","Chambre Bleu","Entrée","Chambre de Marion","bureau","Salon","Salon","Garage"};
local startSource = fibaro:getSourceTrigger();
 
function statutWindows ()
  local statut = "close";
    for i=1, #windowSensor do
      if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then
        statut = "open";
      end
    end
  return statut;
end
     
function alertWindows ()
  local place = nil;
  for i=1, #windowSensor do
    if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then
      if (place == nil) then
        place = placeSensor[i];
      elseif (place ~= nil) then
        place = place .. ", " .. placeSensor[i];
      end
    end
  end
  fibaro:debug("Fenetre(s) ouverte(s): " .. place);
  fibaro:call(53, "sendPush", "Fenetre(s) ouverte(s): " .. place);
end
     
function armedSensor (value)
  for i=1, #windowSensor do
    fibaro:call(windowSensor[i], "setArmed", value);
  end
end

Pour la partie minimote remplacez ligne 12 pas l'id de voter téléphone

if ( tonumber(ButtonPressed) == 1) then
  statut = statutWindows();
  if (statut == "close") then
    armedSensor(1);
    fibaro:debug("button 1 pressed Alarme Activé");
  elseif (statut == "open") then
    alertWindows();
  end
 
elseif ( tonumber(ButtonPressed) == 2) then
  armedSensor(0);
  fibaro:call(53, "sendPush", "Alarme désactivé));
  fibaro:debug("button 2 Pressed Alarme Désactivé");

Gestion des ambiances:

Pour commencé voici des exemples possibles. Créez une variable globale prédéfinie avec les valeurs (vous pouvez en ajoutez autant que vous voulez:

- Normal

- Cinema

- Musique

- Romantique

 

Vous devez créez deux scènes.

Dans la scène de la minimote collez avant le code des boutons:

Vous devez réécrire les ambiances avec de la même façon que dans la globale et dans cette exemple je pars sur le principe qu'il s'agit du salon sinon éditez ligne 6.

local AmbianceSalon = {"Normal", "Cinema", "Musique", "Romantique"};

function Ambiance (place,global,value)
  local Global = tostring(fibaro:getGlobalValue(global));
  local item = 0;
  if (place == "Salon" ) then
    repeat
      item = item + 1;
      if (item == 20) then
        fibaro:killScenes(31);
      end
    until Global == AmbianceSalon[item];
    finalItem = nextItem(value, item, table.getn(AmbianceSalon));
    fibaro:setGlobal(global, AmbianceSalon[finalItem]);
  end
end

function nextItem (value, item, size)
  if (value == "nextone") then
    item = item + 1;
    if ( size < item ) then
        item = 1;
    end
  elseif (value == "previous") then
    item = item - 1;
    if ( 0 >= item ) then
        item = size;
    end
  end
  return item;
end

Pour la partie miimote:

pour la fonction Ambiance ligne 2 et 5, la première fonction Salon est la pièce, ensuie SalonAmbiance est la variable global et nextone ou previous est dans le sens ou vous naviguez dans le "menu".

Il faut également éditer le numéro de la scène.

if (tonumber(Minimotesalon) == 1) then
  Ambiance("Salon","SalonAmbiance","nextone");
  fibaro:startScene(25);
elseif (tonumber(Minimotesalon) == 2) then
  Ambiance("Salon","SalonAmbiance","previous");
  fibaro:startScene(25);

Ensuite il faut une scène d'ambiance pour le salon.

Voici un exemple de ma scène:

--[[
%% properties
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
local ambiance = fibaro:getGlobalValue("SalonAmbiance");
local night = fibaro:getGlobalValue("Nightime");

if (startSource["type"] == "other") then
  if (ambiance == "Normal") then
    if (fibaro:getValue(64, "value") == 0) then
      fibaro:call(64, "turnOn");
      fibaro:sleep(2000);
    end
    if (fibaro:getValue(89, "value") == 1) then
      fibaro:call(89, "turnOff")
    end
    if (night == "Off") then
      fibaro:call(4, "setValue", "99");
    end
    fibaro:call(83, "pressButton", "2")
    fibaro:call(7, "setValue", "99");
    fibaro:call(7, "setValue", "99");
    fibaro:call(11, "setValue", "99");
    fibaro:call(12, "setValue", "99");
    fibaro:call(91, "setColor", "243", "68", "0", "0");
  elseif (ambiance == "Cinema") then
    if (fibaro:getValue(64, "value") == 0) then
      fibaro:call(64, "turnOn");
      fibaro:sleep(2000);
    end
    if (fibaro:getValue(89, "value") == 0) then
      fibaro:call(89, "turnOn")
    end
    fibaro:call(4, "setValue", "0");
    fibaro:call(83, "pressButton", "1")
    fibaro:call(7, "setValue", "0");
    fibaro:call(7, "setValue", "0");
    fibaro:call(11, "setValue", "0");
    fibaro:call(12, "setValue", "0");
    fibaro:call(91, "setColor", "10", "8", "33", "0");
  elseif (ambiance == "Musique") then
    if (fibaro:getValue(64, "value") == 0) then
      fibaro:call(64, "turnOn");
      fibaro:sleep(2000);
    end
    if (fibaro:getValue(89, "value") == 0) then
      fibaro:call(89, "turnOn")
    end
    fibaro:call(83, "pressButton", "3")
    fibaro:call(7, "setValue", "30");
    fibaro:call(7, "setValue", "30");
    fibaro:call(11, "setValue", "30");
    fibaro:call(12, "setValue", "30");
    fibaro:call(91, "setColor", "50", "0", "175", "0");
  elseif (ambiance == "Romantique") then
    if (fibaro:getValue(64, "value") == 0) then
      fibaro:call(64, "turnOn");
      fibaro:sleep(2000);
    end
    if (fibaro:getValue(89, "value") == 0) then
      fibaro:call(89, "turnOn")
    end
    fibaro:call(83, "pressButton", "7")
    fibaro:call(7, "setValue", "0");
    fibaro:call(7, "setValue", "0");
    fibaro:call(11, "setValue", "0");
    fibaro:call(12, "setValue", "0");
    fibaro:call(91, "setColor", "255", "0", "108", "0");
  end
end

Gestion des volets, virtuals device (chaîne de radion pour sonos..)

Avec ce code vous pouvez mettre vos volets dans 4 position (ouvert,fermé, 50% et 75%).

Donc le code toujours à  insérez entre le début et le code de la minimote.

local idBlind = 4;
function Blind (value)
  if (value == 1) then
      if (tonumber(fibaro:getValue(idBlind, "value")) == 75) then
        fibaro:call(idBlind, "setValue", "50");
          fibaro:debug("Volet réglé à  50%");
      elseif (tonumber(fibaro:getValue(idBlind, "value")) ~= 75) then
          fibaro:call(idBlind, "setValue", "75");
          fibaro:debug("Volet réglé à  75%");
      end
    
  elseif (value == 2) then
    if (tonumber(fibaro:getValue(idBlind, "value")) ~= 99) then
      fibaro:call(idBlind, "open");
      fibaro:debug("Volet Ouvert");
    elseif (tonumber(fibaro:getValue(idBlind, "value")) == 99) then
      fibaro:call(idBlind, "close");
      fibaro:debug("Volet Close");
    end
  end
end

 

Placez ensuite ce code dans votre minimote:

elseif (tonumber(Minimotesalon) == 3) then
  Blind(1)
elseif (tonumber(Minimotesalon) == 4) then
  Blind(2)

 

Désolé si c'est pas très clair mais je suis crevé ce soir.

J'éditerais le code lorsque je l'aurais améliorer voir mis sous plugin si la v4 arrive :D

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Derient je vais éditez car j'ai oubliez les volets :D

 

Edit: Je pense que quand la v4 sortira, je regarderais pour un faire un script qui gère les scènes d'xbmc avec les ambiances pour bien tout intégré ensemble.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

J'aimerais savoir si il est possible de passer 2 ID de minimotes dans une scène normalement prévue pour une minimote ?

 

Ex :

 

166 et 167 sont les minimotes.

--[[
%% properties
166 sceneActivation
167 sceneActivation
%% globals
--]]

local ButtonPressed = fibaro:getValue(166, 167, "sceneActivation")

La scène de base est prévue pour une seul minimote comme ceci :

--[[
%% properties
166 sceneActivation
%% globals
--]]

local ButtonPressed = fibaro:getValue(166, "sceneActivation")

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment sa, tu veux dire inclure deux minimotes pour gérer une scène ???

 

Je pense pas que sa va être possible, Il va falloir creer une autre local, et dans la 'id que tu veux créer une condition or

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai déjà  essayé avec une condition "or" et ça marche pas avec une seule scène (du moins j'ai pas trouvé comment faire)...pour le moment autant de scènes que de minimotes...

 

Pour l'instant, j'ai ca

--[[
%% properties
94 sceneActivation
%% globals
--]]
-----------------------------------------
----gestion des boutons des minimotes----
-----------------------------------------

local Minimotesalon = fibaro:getValue(94, "sceneActivation");
 
if (tonumber(Minimotesalon) == 1)
   then
 fibaro:call(7, "pressButton", "2")--Alarme nuit ON
end 
 
if (tonumber(Minimotesalon) == 3)
   then
 fibaro:call(7, "pressButton", "4")--Alarme nuit OFF
end
 
if (tonumber(Minimotesalon) == 5)
   then
 fibaro:call(174, "pressButton", "7");--virage radio sdb on
end

if (tonumber(Minimotesalon) == 7)
   then
 fibaro:call(174, "pressButton", "9");--virage radio sdb off
end
 

Mais si je fait ca, ca ne fonctionne pas :

--[[
%% properties
94 sceneActivation
62 sceneActivation
%% globals
--]]
-----------------------------------------
----gestion des boutons des minimotes----
-----------------------------------------

local Minimotesalon = fibaro:getValue(94, "sceneActivation");
local Minimotechambre = fibaro:getValue(62, "sceneActivation");
 
if (tonumber(Minimotesalon) == 1)
or (tonumber(Minimotechambre) == 1)
   then
 fibaro:call(7, "pressButton", "2")--Alarme nuit ON
end 
 
if (tonumber(Minimotesalon) == 3)
or (tonumber(Minimotechambre) == 3)
   then
 fibaro:call(7, "pressButton", "4")--Alarme nuit OFF
end
 
if (tonumber(Minimotesalon) == 5)
or (tonumber(Minimotechambre) == 5)
   then
 fibaro:call(174, "pressButton", "7");--virage radio sdb on
end

if (tonumber(Minimotesalon) == 7)
or (tonumber(Minimotechambre) == 7)
   then
 fibaro:call(174, "pressButton", "9");--virage radio sdb off
end

:

Partager ce message


Lien à poster
Partager sur d’autres sites

Essaye avec sa:

 

if ( (tonumber(Minimotesalon) == 1) or (tonumber(Minimotechambre) == 1) ) then

Partager ce message


Lien à poster
Partager sur d’autres sites

Phil tu peux faire un debug sur tes variables histoire de ...

local Minimotesalon = fibaro:getValue(94, "sceneActivation");
local Minimotechambre = fibaro:getValue(62, "sceneActivation");

parce-qu’il est bien possible que l'utilisation de plusieurs sceneActivation dans la même scène ne soit pas faisable !

Partager ce message


Lien à poster
Partager sur d’autres sites

bon,

En fait j'ai une scène comme tous le monde, dans laquelle une minimote est en ID.

Sur la scène plusieurs action correspondant aux boutons.

 

Ma question était : Dans le cas ou j'ai deux télécommande qui nécessite les memes scènes, est-il possible de déclarer 2 minimotes dans le script comme j'avais mis plus haut.

 

Le but était de ne pas faire un copier / coller de la meme scène juste en changeant l'ID.

Ca fait 2 scènes identique.

Mais bon, si ce n'est pas possible ce n'est pas bien grave.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est étrange que sa ne fonctionne pas.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Domodial...J'ai bien compris, c'est pour ça que j'ai posté "derrière toi" car je veux faire la même chose que toi.

Une scène pour les 2 telco.

 

J'ai pas encore mis de "debug" mais ce que je vois c'est que les numéros de scènes ne sont plus associées ( un appui sur num 5 active la 1 )

Partager ce message


Lien à poster
Partager sur d’autres sites

La franchement je ne sais, je regarderais pour la deuxième télécommande des que j'aurais finie de me créer une scène pour gérer toute les ambiances de la maison (marre d'en avoir 36 entre les xmbc etc ...).

Partager ce message


Lien à poster
Partager sur d’autres sites

Voila, j'ai mis un debug :


--[[
%% properties
94 sceneActivation
62 sceneActivation
%% globals
--]]
-----------------------------------------
----gestion des boutons des minimotes----
-----------------------------------------

local NumScenesalon = fibaro:getValue(94, "sceneActivation") 
local NumScenechambre = fibaro:getValue(62, "sceneActivation") 
fibaro:debug("Numéro telco salon: " ..NumScenesalon)
fibaro:debug("Numéro telco chambre: " ..NumScenechambre)
 
local Minimotesalon = fibaro:getValue(94, "sceneActivation");
local Minimotechambre = fibaro:getValue(62, "sceneActivation");
 
if (tonumber(Minimotesalon) == 1)
or (tonumber(Minimotechambre) == 1)
   then
-- fibaro:call(7, "pressButton", "2")--Alarme nuit ON
end 
 
if (tonumber(Minimotesalon) == 3)
or (tonumber(Minimotechambre) == 3)
   then
-- fibaro:call(7, "pressButton", "4")--Alarme nuit OFF
end
 
if (tonumber(Minimotesalon) == 5)
or (tonumber(Minimotechambre) == 5)
   then
-- fibaro:call(174, "pressButton", "7");--virage radio sdb on
end
 
if (tonumber(Minimotesalon) == 7)
or (tonumber(Minimotechambre) == 7)
   then
-- fibaro:call(174, "pressButton", "9");--virage radio sdb off
end

Et chose bizare, a savoir que je n'utilise pour ce test QUE la telco salon...en appuyant successivement sur les 4 boutons, voila que ça active automatiquement la 7 sur l'autre telco !...

[DEBUG] 22:13:45: Numéro telco salon: 1
[DEBUG] 22:13:45: Numéro telco chambre: 7
[DEBUG] 22:13:51: Numéro telco salon: 3
[DEBUG] 22:13:51: Numéro telco chambre: 7
[DEBUG] 22:13:53: Numéro telco salon: 5
[DEBUG] 22:13:53: Numéro telco chambre: 7
[DEBUG] 22:13:55: Numéro telco salon: 7
[DEBUG] 22:13:55: Numéro telco chambre: 7

Partager ce message


Lien à poster
Partager sur d’autres sites

Réessaye en mettant devant tout le code:

local NumScenesalon = nil;
local NumScenechambre = nil;
local Minimotesalon  = nil;
local Minimotechambre  = nil;

Partager ce message


Lien à poster
Partager sur d’autres sites

Pareil Shad...

 

J'ai essayé avec la telco chambre, et là , j'ai l'inverse:

[DEBUG] 22:26:39: Numéro telco salon: 7
[DEBUG] 22:26:39: Numéro telco chambre: 1
[DEBUG] 22:26:42: Numéro telco salon: 7
[DEBUG] 22:26:42: Numéro telco chambre: 3
[DEBUG] 22:26:44: Numéro telco salon: 7
[DEBUG] 22:26:44: Numéro telco chambre: 5
[DEBUG] 22:26:46: Numéro telco salon: 7
[DEBUG] 22:26:46: Numéro telco chambre: 7

Partager ce message


Lien à poster
Partager sur d’autres sites

Il garde dans le cache le dernier bouton appuyé de chaque télécommande.

A mon avis la seule solution est de mettre des trigger je pense.

 

Essaye ce code (je l'ai pas testé):

local startSource = fibaro:getSourceTrigger();

local salon = 94;
local chambre = 62;
local NumScenesalon = fibaro:getValue(94, "sceneActivation")
local NumScenechambre = fibaro:getValue(62, "sceneActivation")

if (startSource['type']=='property') then
  if (startSource['deviceID']==tostring(salon)) then
    fibaro:debug("Numéro telco salon: " ..NumScenesalon)
  elseif (startSource['deviceID']==tostring(chambre)) then
    fibaro:debug("Numéro telco salon: " ..NumScenechambre)
  end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, là  c'est bon ! :D

 

Et hop! une scène en moins grâce à  toi Shad ! merci

--[[
%% properties
94 sceneActivation
62 sceneActivation
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
 
local salon = 94;
local chambre = 62;
local NumScenesalon = fibaro:getValue(94, "sceneActivation")
local NumScenechambre = fibaro:getValue(62, "sceneActivation")
 
if (startSource['type']=='property') then
  if (startSource['deviceID']==tostring(salon)) then
    fibaro:debug("Numéro telco salon: " ..NumScenesalon)
  elseif (startSource['deviceID']==tostring(chambre)) then
    fibaro:debug("Numéro telco chambre: " ..NumScenechambre)
  end
end
 
if (tonumber(NumScenesalon) == 1)
or (tonumber(NumScenechambre) == 1)
   then
-- fibaro:call(7, "pressButton", "2")--Alarme nuit ON
end 
 
if (tonumber(NumScenesalon) == 3)
or (tonumber(NumScenechambre) == 3)
   then
-- fibaro:call(7, "pressButton", "4")--Alarme nuit OFF
end
 
if (tonumber(NumScenesalon) == 5)
or (tonumber(NumScenechambre) == 5)
   then
-- fibaro:call(174, "pressButton", "7");--virage radio sdb on
end
 
if (tonumber(NumScenesalon) == 7)
or (tonumber(NumScenechambre) == 7)
   then
-- fibaro:call(174, "pressButton", "9");--virage radio sdb off
end

Partager ce message


Lien à poster
Partager sur d’autres sites

En faite je crois que le mieux pour gérer sa va être de présenter sa de cette façon:

Et pour les commandes que tu veux utiliser sur les deux minimotes tu créer une fonction que tu appelles depuis chaque minimote, au moins tu ne gères qu'un seul code.

--[[
%% properties
62 sceneActivation
94 sceneActivation
%% globals
--]]
 
local salon = 94;
local chambre = 62;
local Minimotesalon  = fibaro:getValue(94, "sceneActivation")
local Minimotechambre  = fibaro:getValue(62, "sceneActivation")
local startSource = fibaro:getSourceTrigger();

if (startSource['type']=='property') then
  if (startSource['deviceID']==tostring(salon)) then
    if (tonumber(Minimotesalon) == 1) then
 
    elseif (tonumber(Minimotesalon) == 2) then
 
    elseif (tonumber(Minimotesalon) == 3) then
 
    elseif (tonumber(Minimotesalon) == 4) then
 
    elseif (tonumber(Minimotesalon) == 5) then
 
    elseif (tonumber(Minimotesalon) == 6) then
 
    elseif (tonumber(Minimotesalon) == 7) then
 
    elseif (tonumber(Minimotesalon) == 8) then
 
    end
 
  elseif (startSource['deviceID']==tostring(chambre)) then
    if (tonumber(Minimotechambre ) == 1) then
 
    elseif (tonumber(Minimotechambre ) == 2) then
 
    elseif (tonumber(Minimotechambre ) == 3) then
 
    elseif (tonumber(Minimotechambre ) == 4) then
 
    elseif (tonumber(Minimotechambre ) == 5) then
 
    elseif (tonumber(Minimotechambre ) == 6) then
 
    elseif (tonumber(Minimotechambre ) == 7) then
 
    elseif (tonumber(Minimotechambre ) == 8) then
 
    end
  end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

@Shad: très instructif tout cela, merci :)

Partager ce message


Lien à poster
Partager sur d’autres sites

pas de problème:

D'ailleurs il manque encore une local ^^.

Mais je fais comme sa pour gérer toutes mes associations de la maison en une seule scène.

Pas besoins de chercher partout.

Partager ce message


Lien à poster
Partager sur d’autres sites

Shad, je croyais que dans les codes, il fallait éviter au maximum les "elsif" non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Perso je te dirais qu'il faut évité dans avoir trop pour pas s'embrouiller.

Mais après si ton code est bien fais je ne vois pas trop le soucis.

Partager ce message


Lien à poster
Partager sur d’autres sites

×