Steven Posté(e) le 11 août 2019 Auteur Signaler Posté(e) le 11 août 2019 @pepite Help, Je n'ai rien sous le yeux. C'était duration ou durationfull ou autre chose ? Envoyé de mon SM-G935F en utilisant Tapatalk
Steven Posté(e) le 12 août 2019 Auteur Signaler Posté(e) le 12 août 2019 Grrrrrrr, essaie avec #duration# en minuscule stp. Je pense que la différence vient de là et que je ne suis qu'une grosse patate :-) Voici mon test: GEA.add(true, 30, "", {{"Global", "Test", "#duration#"}, {"Repeat"}}) Voici le contenu de ma variable "Test" après plusieurs passage : 30s 1m 1m 30s 2m 2m 30s ... 2
paoloc66 Posté(e) le 12 août 2019 Signaler Posté(e) le 12 août 2019 Parfait, tout fonctionne. Cependant, existe-t-il la possibilité de transformer la valeur d'une variable numérique en un format de date? (ex. 4000 = 1 heure, 6 minutes, 40 secondes ou 1:06:40)
Steven Posté(e) le 12 août 2019 Auteur Signaler Posté(e) le 12 août 2019 GEA n'a pas grand chose pour t'aider directement. C'est possible mais pas inclus dans GEA. Envoyé de mon SM-G935F en utilisant Tapatalk
Felig Posté(e) le 13 août 2019 Signaler Posté(e) le 13 août 2019 Bonjour, J'utilise GEA pour mettre a jour un VD en fonction de plusieurs paramètres: état de l'alarme (variable globale AlarmTrig), et état des fenêtres (variable globale Ouvrants) notamment. Ci-joint un exemple: GEA.Add({{"Global","AlarmTrig","Off"},{"Global","Ouvrants","On"}},-1,ACTION1) GEA.Add({{"Global","AlarmTrig","On"} ,{"Global","Ouvrants","On"}},-1,ACTION2) GEA.Add({{"Global","AlarmTrig","On"},{"Global","Ouvrants","Off"}},-1,ACTION3) etc. Si je met les deux variables globales dans %%globals, ça marche sauf que dans certains cas (ce n'est pas la majorité des cas), les deux variables changent en même temps (même déclencheur) et du coup j'ai plusieurs instances de GEA qui se lancent simultanément pour faire la même chose, avec un message d'erreur. Je sais que je peux augmenter le nombre de sessions simultanées de GEA autorisées mais je ne sais pas si c'est recommandé, et en tous cas c'est pas super élégant. PS: Une solution que je n'ai pas encore testée est de créer une variable globale "chapeau" qui change si l'une des deux autres variables change. Mais je me dis que cette variable chapeau va être modifiée 2 fois dans la même seconde si les variables filles sont modifiées en même temps, donc je risque de revenir à la case départ... Qu'en pensez-vous ?
Steven Posté(e) le 13 août 2019 Auteur Signaler Posté(e) le 13 août 2019 Perso, j'ai mis le nombre de sessions au maximum est je laisse la HC2 se débrouiller. Résultat : tout fonctionne à merveille Envoyé de mon SM-G935F en utilisant Tapatalk
Felig Posté(e) le 14 août 2019 Signaler Posté(e) le 14 août 2019 Merci Steven, bon à savoir, j'aurais du savoir que GEA gérait toutes les situations!
Felig Posté(e) le 14 août 2019 Signaler Posté(e) le 14 août 2019 (modifié) Le 31/10/2018 à 13:57, schwinny a dit : bon je viens de mettre GEA 6.10 en route et j'ai une erreur sur le restart. [DEBUG] 13:52:11: --------------------------------------------------------------------------------[DEBUG] 13:52:11: GEA a démarré le 31.10.18 à 13:52:11 ...[DEBUG] 13:52:11: ... vérification en cours #0 @0s...[DEBUG] 13:52:11: [1;31m2018-10-31 13:52:11.977885 [ fatal] Unknown exception: /opt/fibaro/scenes/25.lua:772: attempt to index field 'globalvalue' (a nil value) la ligne correspond a ca: restarttask = {name="RestartTask", getValue=function(taskid) return GEA.globalvalue:find("|R_" .. taskid.."|") end, action=function(taskid) if (type(taskid) ~= "table") then taskid = {taskid} end for i=1, #taskid do if (taskid=="self") then taskid=GEA.currentEntry.id end GEA.globalvalue = GEA.globalvalue:gsub("|R_" .. taskid.."|", ""):gsub("|M_" .. taskid .. "{(%d+)}|", ""):gsub("|S_" .. taskid.."|", "") .. "|R_" .. taskid.."|" end end }, J'ai eu exactement le même bug en passant de 6.07 à 6.11 en copiant/collant le code dans la scène du précédent GEA. Le numéro de ligne est différent mais correspond également à la fonction RestartTask (que je n'utilise pas dans mon code). J'ai essayé de coller dans une nouvelle scène mais même erreur. Edit: L'erreur vient du fait que mon GEA n'arrive pas à créer de variable globale. J'ai du créer GEA_Tasks6 manuellement et maintenant tout fonctionne. Mon ancien GEA utilisait GEA_Tasks. Je ne comprends pas pourquoi la fonction api.post ne fonctionne pas chez moi. Quand je fais le test ci-dessous j'ai status = 400. local varName = "VarTest" local payload = {name=varName, isEnum=0, value="test"} local response, status = api.post("/globalVariables/"..varName, payload) fibaro:debug(status) Edit 2: Ok, j'ai trouvé l'erreur: il faut indiquer isEnum=false et non isEnum=0. Mais l'erreur vient du code GEA 6.11, donc tout le monde doit avoir le même problème ! Vous pouvez tester en effaçant la variable GEA_History (ca n’empêche pas GEA de fonctionner). Modifié le 14 août 2019 par Felig
Steven Posté(e) le 14 août 2019 Auteur Signaler Posté(e) le 14 août 2019 Par curiosité, quel est la version du firmware de la HC2 ?Envoyé de mon SM-G935F en utilisant Tapatalk
Felig Posté(e) le 14 août 2019 Signaler Posté(e) le 14 août 2019 (modifié) Je suis en 4.55 (je viens de mettre à jour mon profil). Modifié le 16 août 2019 par Felig
Felig Posté(e) le 16 août 2019 Signaler Posté(e) le 16 août 2019 J'ai fait d'autres tests: quand la variable est créée la première fois il y a quand même un message d'erreur (le même que ci-dessus) car elle est vide. Je suggère donc la correction suivante (la ligne d'origine est celle qui commence par --) restarttask = {name="RestartTask", ------------------------ MODIF FELIG --------------------------------------------------------------------------- getValue=function(taskid) if tools.isNil(GEA.GlobalValue) then return nil else return GEA.globalvalue:find("|R_" .. taskid.."|") end end, --getValue=function(taskid) return GEA.globalvalue:find("|R_" .. taskid) end, ------------------------ FIN MODIF ------------------------------------------------------------------------------ action=function(taskid) if (type(taskid) ~= "table") then taskid = {taskid} end for i=1, #taskid do if (taskid[i]=="self") then taskid[i]=GEA.currentEntry.id end GEA.globalvalue = GEA.globalvalue:gsub("|R_" .. taskid[i].."|", ""):gsub("|M_" .. taskid[i] .. "{(%d+)}|", ""):gsub("|S_" .. taskid[i].."|", "") .. "|R_" .. taskid[i].."|" end end }, stoptask = {name="StopTask", ------------------------ MODIF FELIG --------------------------------------------------------------------------- getValue=function(taskid) if tools.isNil(GEA.GlobalValue) then return nil else return GEA.globalvalue:find("|S_" .. taskid.."|") end end, --getValue=function(taskid) return GEA.globalvalue:find("|S_" .. taskid) end, ------------------------ FIN MODIF ----------------------------------------------------------------------------- action=function(taskid) if (type(taskid) ~= "table") then taskid = {taskid} end for i=1, #taskid do if (taskid[i]=="self") then taskid[i]=GEA.currentEntry.id end GEA.globalvalue = GEA.globalvalue:gsub("|S_" .. taskid[i].."|", ""):gsub("|M_" .. taskid[i] .. "{(%d+)}|", ""):gsub("|R_" .. taskid[i].."|", "") .. "|S_" .. taskid[i].."|" end end },
tcheri Posté(e) le 17 août 2019 Signaler Posté(e) le 17 août 2019 Bonjour, Je viens de me lancer dans GEA : j'ai donc installé la 6.11, et mon firmware est 4.55. J'ai cette erreur : [DEBUG] 11:33:37: -------------------------------------------------------------------------------- [DEBUG] 11:33:37: Démarrage automatique de GEA 6.11 (mode autostart) [DEBUG] 11:33:37: -------------------------------------------------------------------------------- [DEBUG] 11:33:37: Utilisation de minifiertools v. 2.00 [DEBUG] 11:33:37: Vérification automatique toutes les 30 secondes [DEBUG] 11:33:37: Création de la variable globale : GEA_Tasks6 [DEBUG] 11:33:37: Création de la variable globale : GEA_History [DEBUG] 11:33:37: -------------------------------------------------------------------------------- [DEBUG] 11:33:37: Recherche de plugins, ... :Aucun plugins trouvé [DEBUG] 11:33:37: Chargement du code utilisateur setEvents() ... [DEBUG] 11:33:37: -------------------------------------------------------------------------------- [DEBUG] 11:33:37: Ajout auto : #1 [51][TurnOff] [DEBUG] 11:33:37: -------------------------------------------------------------------------------- [DEBUG] 11:33:37: GEA a démarré le 17.08.19 à 11:33:37 ... [DEBUG] 11:33:37: ... vérification en cours #0 @0s... [DEBUG] 11:33:37: 2019-08-17 11:33:37.996691 [ fatal] Unknown exception: /opt/fibaro/scenes/1046.lua:543: attempt to index field 'globalvalue' (a nil value) Comme ecrit par Felig, j'ai créé la variable GEA_Tasks6 manuellement et c'est maintenant OK
Felig Posté(e) le 18 août 2019 Signaler Posté(e) le 18 août 2019 (modifié) Bonjour, Comme beaucoup je trouve la fonction PressButton de Fibaro mal faite: contrairement à un Label qu'on peut sélectionner par son identifiant, un bouton doit être sélectionné en fonction de sa position dans le Virtual Device, ce qui est source d'erreur, et oblige à réécrire toutes les fonctions en cas de modification de la structure du VD. Ci-joint deux fonctions qui permettent de pallier ce problème dans GEA: "PressButtonLabel" permet de sélectionner un bouton en fonction de son libellé (ce qui est affiché dessus). Attention: si plusieurs boutons ont le même libellé dans le même VD, le résultat sera aléatoire! Exemple d'utilisation: GEA.add({"Time","08:00"},0,"",{"PressButtonLabel",id["VOLETS"]","Monter"}) "PressButtonId" permet de sélectionner un bouton en fonction de son identifiant (dans l'onglet Advanced, c'est le nom qui apparait dans le champ "ID:"). Cet identifiant est unique et ne change pas si le reste du VD est modifié. Exemple d'utilisation: GEA.add({"Time","08:00"},0,"",{"PressButtonId",id["VOLETS"]","BtnMonter"}) Laquelle de ces fonctions privilégier ? "PresButtonLabel" est plus intuitif, il suffit de savoir ce qui est affiché sur le bouton pour l'utiliser. "PressButtonId" est cependant plus fiable: l'expérience prouve qu'on ne change jamais l'identifiant d'un bouton, alors que ça peut arriver avec un libellé. Par ailleurs "PressButtonId" utilise un identifiant unique. Autre avantage important commun à ces deux fonctions: le programme vérifiera si le bouton en question existe au démarrage de GEA (par contre si vous modifiez le bouton pendant que GEA est lancé, ce ne sera pas détecté). Pour utiliser ces fonctions, il suffit d'ajouter le code ci-dessous dans la section CONFIGURATION GENERALE de GEA: GEA.checkButton = function(id,property,text) if property ~= "name" and property ~= "caption" then return false end local vds = api.get("/virtualDevices/"..id) if not(vds) then return false end for _, row in pairs(vds.properties.rows) do if (row.type == "button") then for _, element in pairs(row.elements) do if not(element[property]) then return false end if element[property] == text then return tostring(element.id) end end end end return false -- Bouton n'existe pas end -- ---------------------------------------------------------- -- PressButtonLabel: Equivalent à PressButton mais sélectionne le bouton -- en fonction de son libellé (ce qui est affiché dessus). Attention: -- si plusieurs boutons ont le même libellé, le résultat sera aléatoire! -- Ex: GEA.add({"Time","08:00"},0,"",{"PressButtonLabel",id["VOLETS"]","Monter"}) -- ---------------------------------------------------------- GEA.options.pressbuttonlabel = { name = "PressButtonLabel", control = function(id,label) if GEA.checkButton(id,"caption",label) then return true else return false, string.format(GEA.trad.label_missing, id, label) end end, action = function(id,label) fibaro:call(id,"pressButton",GEA.checkButton(id,"caption",label)) end } -- ---------------------------------------------------------- -- PressButtonId: Equivalent à PressButton mais sélectionne le bouton -- en fonction de son identifiant (modifiable dans l'onglet Advanced). -- Cet identifiant unique ne change pas si le reste du VD est modifié. -- Ex: GEA.add({"Time","08:00"},0,"",{"PressButtonId",id["VOLETS"]","BtnMonter"}) -- ---------------------------------------------------------- GEA.options.pressbuttonid = { name = "PressButtonId", control = function(id,name) if GEA.checkButton(id,"name",name) then return true else return false, string.format(GEA.trad.label_missing, id, name) end end, action = function(id,name) fibaro:call(id,"pressButton",GEA.checkButton(id,"name",name)) end } PS: J'imagine que je ne suis pas le seul à avoir eu ce besoin, et sans doute d'autres ont posté des solutions équivalentes, désolé si c'est le cas. Mon code est très largement inspiré de la fonction checkLabel qui a été ajoutée dans GEA 6.10. Merci à @Steven et aux autres développeurs. PS2: Les noms de mes fonctions sont un peu longs, n'hésitez pas à changer pour VDname et VDid par exemple. PS3: Pour éviter de modifier GEA j'utilise le même message d'erreur que pour un Label inexistant. Pour les puristes, il faudrait ajouter un message d'erreur spécifique "button_missing" dans les traductions. Modifié le 18 août 2019 par Felig 2 1
Ghoosti Posté(e) le 18 août 2019 Signaler Posté(e) le 18 août 2019 Bonjour à vous, J'ai ceci: GEA.add(id["MVT_CUISINE"], -1, "", {"TurnOn", id["ECL_LED_CUISINE"]}) --Led ON si MVT ON et LUX < xx, éteindre après 2mn local LedCuisine = GEA.add(id["ECL_LED_CUISINE"], 2*60, "", {{"turnOff",id["ECL_LED_CUISINE"]},{"Repeat"}}) GEA.add(id["MVT_CUISINE"], -1, "", {{"RestartTask", LedCuisine}}) J'essaye d'ajouter ceci : {"Value-", id["LUX_CUISINE"], 20} pour que sa déclenche sur le mouvement si LUX < à xx Merci pour votre aide
Felig Posté(e) le 18 août 2019 Signaler Posté(e) le 18 août 2019 A priori tu n'as besoin ni de Repeat ni de RestartTask. Essaye ceci: GEA.add({id["MVT_CUISINE"],{"Value-", id["LUX_CUISINE"], 20},{"TurnOff", id["ECL_LED_CUISINE"]}}, -1, "", {"TurnOn", id["ECL_LED_CUISINE"]}) GEA.add({id["ECL_LED_CUISINE"],{"turnOff",id["MVT_CUISINE"]}}, 2*60, "", {"turnOff"})
Ghoosti Posté(e) le 19 août 2019 Signaler Posté(e) le 19 août 2019 Bonjour @Felig, ok merci je vais tester mais je ne comprend pas bien le pq du: dans la première ligne ? {"TurnOff", id["ECL_LED_CUISINE"]}},
Felig Posté(e) le 19 août 2019 Signaler Posté(e) le 19 août 2019 C'est juste pour que la tache ne se déclenche pas si la lumière est déjà allumée. TurnOff utilisé en condition permet de vérifier qu'une device est éteinte. De même dans la deuxième ligne, {"turnOff",id["MVT_CUISINE"]} permet de s'assurer que la lumière ne s'éteindra que si il n'y pas eu de mouvement pendant 2 minutes.
Dragoniacs Posté(e) le 20 août 2019 Signaler Posté(e) le 20 août 2019 Je crois que le "turnoff" ne s'utilise qu'en action et pas en condition. Pour les conditions, il me semble plus pertinent de regarder si value=0Envoyé de mon SM-A530F en utilisant Tapatalk
Steven Posté(e) le 20 août 2019 Auteur Signaler Posté(e) le 20 août 2019 TurnOff peu être utilisé dans les 2 cas : action ou condition. C'est une nouveauté de la version 6.Envoyé de mon SM-G935F en utilisant Tapatalk
Dragoniacs Posté(e) le 20 août 2019 Signaler Posté(e) le 20 août 2019 Cool ! Je vais pouvoir simplifier quelques lignes alors Envoyé de mon SM-A530F en utilisant Tapatalk
Ghoosti Posté(e) le 20 août 2019 Signaler Posté(e) le 20 août 2019 Hello, merci à vous pour les infos. @Felig, super ça fonctionne
Lazer Posté(e) le 22 août 2019 Signaler Posté(e) le 22 août 2019 Dites, je voudrais savoir s'il est possible de faire simplement en une ligne GEA un scénario tout simple : - récupérer la valeur courante d'un dimmer - l'allumer à fond - attendre 10s (avec un sleep, ça je sais faire) - remettre le dimmer à sa valeur précédente C'est possible de faire ça sans passer par une variable globale ?
Steven Posté(e) le 22 août 2019 Auteur Signaler Posté(e) le 22 août 2019 Dites, je voudrais savoir s'il est possible de faire simplement en une ligne GEA un scénario tout simple : - récupérer la valeur courante d'un dimmer - l'allumer à fond - attendre 10s (avec un sleep, ça je sais faire) - remettre le dimmer à sa valeur précédente C'est possible de faire ça sans passer par une variable globale ? Oui c'est possible, il y a VariableCache qui fonctionne comme Global mais qui n'est pas persisté. Envoyé de mon SM-G935F en utilisant Tapatalk
Steven Posté(e) le 22 août 2019 Auteur Signaler Posté(e) le 22 août 2019 Je n'ai pas tenté mais j'expérimenterais un truc du style : ID_DIMMER = 100 GEA.add( ..., 30, ""; { {"VariableCache", "Dimmer", {"Value", ID_DIMMER}}, -- On stocke la valeur du dimmer dans le variable "Dimmer" {"Value", ID_DIMMER, 100}, -- On met le dimmer au maximum {"Sleep", 10, {"Value", ID_DIMMER, {"VariableCache", "Dimmer"}}} -- Apres 10 secondes on remet la valeur du dimmer a celle contenu dans la variable "Dimmer" } ) 1
Lazer Posté(e) le 22 août 2019 Signaler Posté(e) le 22 août 2019 Ah super, je ne connaissais pas, mais c'est tout à faire le genre d'astuce que je cherchais Merci je testerai demain 1
Messages recommandés