Aller au contenu

De L'utilisation Des Triggers


Berale64

Messages recommandés

Bien vu jojo !

 

Bon, après quelque réflexion, il s'avère qu'on ne peut pas tester différentes variables globales dans une même boucle if (ou alors j'ai pas trouvé comment!)

 

Edit : le tonumber est obligatoire dans le test... sinon erreur

 

Voici donc ce qui me fonctionne :

--[[
%% properties
%% globals
PRESENCE
GLOBALE_FERMETURE
--]]

local jour = os.date("%Y:%M:%D");
local heure = os.date("%H:%M");
local status;
local status_volets;

local startSource = fibaro:getSourceTrigger();
if (tonumber(fibaro:getGlobalValue("PRESENCE")) == tonumber("1"))
or
startSource["type"] == "other"
then
    status="Présent";
end
if (tonumber(fibaro:getGlobalValue("PRESENCE")) == tonumber("2"))
or
startSource["type"] == "other"
then
    status="Absent";
end
if (tonumber(fibaro:getGlobalValue("PRESENCE")) == tonumber("3"))
or
startSource["type"] == "other"
then
    status="Repos";
end

if ( tostring(fibaro:getGlobalValue("GLOBALE_FERMETURE")) == tostring("ouverts"))
or
startSource["type"] == "other"
then
    status_volets="Ouverts";
end
if ( tostring(fibaro:getGlobalValue("GLOBALE_FERMETURE")) == tostring("fermes"))
or
startSource["type"] == "other"
then
    status_volets="Fermés";
end

fibaro:debug("------------------------------------------------------");
fibaro:debug(jour.." / "..heure.." ->Changement de Statut de présence : "..status);
fibaro:debug(jour.." / "..heure.." ->Changement de Statut des volets : "..status_volets);

Lien vers le commentaire
Partager sur d’autres sites

--[[
%% properties
%% globals
PRESENCE
GLOBALE_FERMETURE
--]]
 
local jour = os.date("%Y:%M:%D");
local heure = os.date("%H:%M");
local status;
local status_volets;
 
local startSource = fibaro:getSourceTrigger();
if (fibaro:getGlobalValue("PRESENCE") == "1")

then
    status="Présent";
end
if (fibaro:getGlobalValue("PRESENCE") == "2")

then
    status="Absent";
end
if (fibaro:getGlobalValue("PRESENCE") == "3")

then
    status="Repos";
end
 
if (fibaro:getGlobalValue("GLOBALE_FERMETURE") == "ouverts")

then
    status_volets="Ouverts";
end
if (fibaro:getGlobalValue("GLOBALE_FERMETURE") == "fermes")

then
    status_volets="Fermés";
end
 
fibaro:debug("------------------------------------------------------");
fibaro:debug(jour.." / "..heure.." ->Changement de Statut de présence : "..status);
fibaro:debug(jour.." / "..heure.." ->Changement de Statut des volets : "..status_volets);

J'ai mis ça dans ma moulinette et je n'ai aucun message d'erreur.

Lien vers le commentaire
Partager sur d’autres sites

@sebcbien : il me semblait aussi :(

 

@jojo : oui essayé, mais toujours en erreur :

 

line 15: unexpected symbol near 'if'

 

@Berale24 : je croyais qu'il fallait mettre le :

or
startSource["type"] == "other"

Ca marche très bien avec ta proposition, et ça allège le code...

 

Merci pour vos bons et très rapides conseils ! Ca simplifie grandement les triggers... car jusqu'à  maintenant, j'utilisais une boucle While... et c'est lourd à  gérer !!!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je cherche a faire une scene et je pense que l'utilisation des triggers peut faire cela mais je sais comment faire.

Pouvez-vous me dire comment faire ceci, s'il vous plait ?

 

- SI heure entre 17h00 et 19h00

- ET Detecteur = En Alerte

- ET SI television + ampli + sub + Playstation = pas allumer

- ALORS allumer television + ampli + sub + Playstation 

 

Je ne sais vraiment pas si cela est faisable mais je pense qu'en trigger avec le détecteur en déclencheur et juste vérifier les 2 autres conditions cela doit pouvoir ce faire non ?

Lien vers le commentaire
Partager sur d’autres sites

  • --[[
  • %% properties
  • xx value -- l'ID de ton détecteur de mouvement
  • %% globals
  • --]]

 

Dès que ton détecteur est actionné ta scène démarre.

Tu fais alors tes trois tests.

- L'état du détecteur de mouvement

- La prise de la TV (et autre) est elle sur off

- Avec os.date tu testes l'heure

 

Et si tout ça est bon, tu mets la TV sur ON.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je cherche a faire une scene et je pense que l'utilisation des triggers peut faire cela mais je sais comment faire.

Pouvez-vous me dire comment faire ceci, s'il vous plait ?

 

- SI heure entre 17h00 et 19h00

- ET Detecteur = En Alerte

- ET SI television + ampli + sub + Playstation = pas allumer

- ALORS allumer television + ampli + sub + Playstation 

 

Je ne sais vraiment pas si cela est faisable mais je pense qu'en trigger avec le détecteur en déclencheur et juste vérifier les 2 autres conditions cela doit pouvoir ce faire non ?

Nicolas,

En tout cas il y a moyen de faire cela en mode bloc (que j'aime bien quand c'est possible, car je le trouve très lisible).

Ensuite tu peux le faire traduire par ta box en LUA, et le tour est joué

Lien vers le commentaire
Partager sur d’autres sites

il y a moyen de faire qqch, sans boucles, mais plus compliqué que je croyais, car pas de possibilité de faire un test sur timer > ou < à  une heure donnée.

Mais voici la solution

  1. on crée une variable globale TV = Autorise/Interdit
  2. scène 1 : SI timer tous les jours à  17h ALORS variable TV = Autorisé
  3. scène 2 : SI timer tous les jours à  19h ALORS variable TV = Interdit
  4. scène 3 : SI variable TV = Autorisé ET Detecteur = En Alerte ET SI television + ampli + sub + Playstation = pas allumer ALORS allumer television + ampli + sub + Playstation 

et le mode bloc travaille sous forme de trigger.

Tu peux également remplacer les scènes 1 et 2 pour google calendar

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Je continue de jouer avec les triggers.

 

Y a-t-il une bonne âme sur le forum pour me faire un copier/coller de la doc dispo en version 4 pour l'appel suivant.

 

fibaro:getValue(deviceID, 'dead');

 

Je cherche à  savoir quelles sont les valeurs retournées et leur signification.

 

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Merci Steven.

 

J'ai fait la petite scène suivante.

--[[
%% properties

67 dead
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
local deviceID = tonumber(startSource["deviceID"]);
local status = fibaro:getValue(deviceID, 'dead');

local n = fibaro:countScenes();

if (n > 1) then
  fibaro:abort();
end

fibaro:debug(n.."  "..deviceID.."  "..status);

j'obtiens le résultat suivant

 

post-1115-0-51071700-1430815360_thumb.jpg

 

Je ne comprends donc pas pourquoi le satus passe de 1 à  0 alors que j'ai enlevé la prise et donc le device est mort.

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas comment fonctionne la fibaro, mais parfois il est utile de prêcher le faux pour connaitre le vrai.

 

Exemple : Je dis que mon module est "vivant" puis je l'interroge .. s'il me répond pas dans les X secondes alors je dis qu'il est "mort", sinon je laisse sur "vivant". Je recommence l'opération X fois, au bout des X fois je confirme la "mort" de mon module.

 

La mort n'est donc pas imminente  ;)

Lien vers le commentaire
Partager sur d’autres sites

Effectivement en Belgique on ne tourne pas autour du pot : quand tu es mort, tu es mort; quand tu es enceinte, ce n'est pas à  moitié. Je ne sais pas comment ils font en Pologne 😀

Envoyé de mon Nexus 5 en utilisant Tapatalk

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Voilàce que j'ai fais pour les "Dead Devices".

ça donne de bons résultats.

--[[
%% properties
46 dead
47 dead
48 dead
55 dead
56 dead
66 dead
67 dead
108 dead

%% globals
--]]

local startSource = fibaro:getSourceTrigger();
local deviceID = tonumber(startSource["deviceID"]);
local status = fibaro:getValue(deviceID, 'dead');

fibaro:debug(deviceID.."  "..status);

if (fibaro:countScenes() > 1 or (status == "0")) then
     fibaro:abort();
end

local timestamp = os.date("%Y/%m/%d  %H:%M:%S");
local name = fibaro:getName(deviceID);

  fibaro:call(1, "wakeUpDeadDevice", deviceID);
--  fibaro:wakeUpDeadDevice(deviceID);
  fibaro:debug("wake up");
  fibaro:debug(timestamp.."  "..deviceID.."  "..name);
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Voilà   la scène. J'ai coupé la première partie qui fonctionne très bien.

La Variable Start_PaC qui doit servir de trigger est modifié par une autre scène.

Mais  jamais on arrive dans la deuxième partie sourceTrigger["type"] == "global"

--[[

%% properties
35 value
64 value
59 value
%% globals
Start_PaC
--]]


local tempAir = 35;
local tempEau = 64;
local pompe = 59;
local PaC = 66;


local sourceTrigger = fibaro:getSourceTrigger();

  if (sourceTrigger["type"] == "property") then
  
    devID = sourceTrigger["deviceID"];
    devVAL = fibaro:getValue(devID,"value");
   
  .........

  -- Demande PaC OFF
  
  elseif (sourceTrigger["type"] == "global") then
     fibaro:debug("global");
    if (fibaro:getGlobalValue("Start_PaC") == "OFF") then
      fibaro:call(PaC, "turnOff");
      fibaro:call(113, "pressButton","1");
    end
  end
Lien vers le commentaire
Partager sur d’autres sites

donc globals ne fonctionne pas ?

Je disais ça, car je suis le champion des fautes de frappe. 

 

Je viens de regarder dans le code GEA de maître Steven, et c'est bien global qu'il faut utiliser

GEA.source["type"] == "global" 

donc il faut attendre patiemment sa petite idée ..

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...