zeldoi5 Posté(e) le 13 février 2015 Signaler Posté(e) le 13 février 2015 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);
sebcbien Posté(e) le 13 février 2015 Signaler Posté(e) le 13 février 2015 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
jojo Posté(e) le 13 février 2015 Signaler Posté(e) le 13 février 2015 as-tu essayé en ajoutant simlement une ( àla ligne 14 ? Parce que cela aurait du fonctionner ?
Berale64 Posté(e) le 13 février 2015 Auteur Signaler Posté(e) le 13 février 2015 --[[ %% 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.
zeldoi5 Posté(e) le 13 février 2015 Signaler Posté(e) le 13 février 2015 @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 !!!
Nicolas P Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 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 ?
Berale64 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 --[[ %% 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.
jojo Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 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é
Nicolas P Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 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.
Berale64 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 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
jojo Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 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 on crée une variable globale TV = Autorise/Interdit scène 1 : SI timer tous les jours à 17h ALORS variable TV = Autorisé scène 2 : SI timer tous les jours à 19h ALORS variable TV = Interdit 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 1
Berale64 Posté(e) le 4 mai 2015 Auteur Signaler Posté(e) le 4 mai 2015 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.
Steven Posté(e) le 5 mai 2015 Signaler Posté(e) le 5 mai 2015 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"...
Berale64 Posté(e) le 5 mai 2015 Auteur Signaler Posté(e) le 5 mai 2015 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 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.
Steven Posté(e) le 5 mai 2015 Signaler Posté(e) le 5 mai 2015 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
Berale64 Posté(e) le 5 mai 2015 Auteur Signaler Posté(e) le 5 mai 2015 Pas bête le lapin. Merci. PS: la mort subite c'est chez les belges. :-) 1
jojo Posté(e) le 5 mai 2015 Signaler Posté(e) le 5 mai 2015 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 1
Berale64 Posté(e) le 7 mai 2015 Auteur Signaler Posté(e) le 7 mai 2015 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);
Berale64 Posté(e) le 16 mai 2015 Auteur Signaler Posté(e) le 16 mai 2015 J'ai un problème de trigger avec variable globale. Je suis en 3.60. C'est un bug connu ou c'est moi le bug ? Merci.
Steven Posté(e) le 16 mai 2015 Signaler Posté(e) le 16 mai 2015 Heuuu, j'ai ma petite idée Sinon, peux-tu décrire ce que tu fais qui me fonctionne pas stp.
Berale64 Posté(e) le 16 mai 2015 Auteur Signaler Posté(e) le 16 mai 2015 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
jojo Posté(e) le 17 mai 2015 Signaler Posté(e) le 17 mai 2015 Berale, En informatique, le problème se trouve souvent entre le clavier et la chaise Faute de frappe ligne 30 : "... == "globals" au lieu de "... == "global" 1
Berale64 Posté(e) le 17 mai 2015 Auteur Signaler Posté(e) le 17 mai 2015 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.
jojo Posté(e) le 17 mai 2015 Signaler Posté(e) le 17 mai 2015 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 ..
Messages recommandés