Aller au contenu

Messages recommandés

Posté(e)

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);

Posté(e)

Je n'ai pas d'exemple sous la main, mais il n'y a aucune restriction de test de variable par boucle...

Sent From my Vic20

Posté(e)
--[[
%% 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.

Posté(e)

@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 !!!

Posté(e)

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 ?

Posté(e)
  • --[[
  • %% 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.

Posté(e)

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é

Posté(e)

Merci Bareal24 pour tes informations je vais tester :)

 

@jojo, j'ai fait un truc en mode bloc mais cela implique une boucle pendant 2 heures alors qu'avec le trigger je pense qu'il y en à  pas besoin.

 

mini_4898372015021716h3748.png

Posté(e)

A partir du moment ou tu mets une condition de temps en mode bloc, tu obtiens une boucle en LUA.

 

Faut pas écouter Jojo, il dit rien que des bêtises !!! :1:

  • Upvote 1
Posté(e)

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
  • 2 mois après...
Posté(e)

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.

Posté(e)

A part retourné vrai ou faux sous forme de numérique soit 1 ou 0, je ne vois pas ce qu'il pourrait de retourner d'autre ?

 

extrait du json d'un module : ... "dead":"false"...

Posté(e)

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.

Posté(e)

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  ;)

Posté(e)

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
Posté(e)

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);
  • 2 semaines après...
Posté(e)

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
Posté(e)

Berale,

En informatique, le problème se trouve souvent entre le clavier et la chaise  :P

 

Faute de frappe ligne 30  : "... == "globals" au lieu de "... == "global"

  • Upvote 1
Posté(e)

Merci Jojo,mais toutes les infos sur le net donnent "global" au singulier.

 

J'ai fait une scène minimaliste et elle n'est pas actionnée après changement de la VG.

Posté(e)

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 ..

×
×
  • Créer...