Aller au contenu

Felig

Membres confirmés
  • Compteur de contenus

    49
  • Inscription

  • Dernière visite

Réputation sur la communauté

9 Neutral

À propos de Felig

  • Rang
    Nouveau

Profile Information

  • Sexe :
    Homme
  • Ville :
    Le Vesinet - Ile de France
  • Intéret :
    GEA
  • Box
    Home Center 2
  • Version
    4.55

Visiteurs récents du profil

348 visualisations du profil
  1. Felig

    Support Gea

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

    Support Gea

    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"})
  3. Felig

    Support Gea

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

    Support Gea

    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 },
  5. Bonjour, j'avais un peu customisé mon GEA afin d'améliorer l'affichage dans la console (oui, c'est du lourd, pour puristes uniquement!!), et en passant à la version 6.11 j'en ai profité pour documenter mes ajouts au cas ou ça soit jugé digne d'être inclus dans une future version. 1) Option GEA.verbose et ajout séparateur à la fin des actions instantanées J'ai ajouté une option pour supprimer les messages "vérifications en cours" chaque 30s, afin d'alléger l'affichage en console. Je trouve que les messages "GEA fonctionne" chaque 5 minutes sont suffisants. Attention il faut adapter WatchDog en conséquence si vous l'utilisez (test sur "GEA fonctionne" toutes les 5 minutes). En complément j'ai ajouté un message de séparation à la fin des actions instantanées. Ça donne ça: 2) Correction message affichage création variables globales Les messages "Création de la variable GEA.Tasks" sont affichés à chaque démarrage, que la variable existe déjà ou pas, et que la création échoue ou non. J'ai regroupé la création de variable, la vérification et le message, dans une fonction commune aux 3 variables (GEA_Tasks, GEA_History et GEA_Plugins). Oui, je sais c'est un peu perfectionniste pour une création qui ne se fera qu'une fois, mais comme indiqué dans le fil support, ça m'aurait fait gagner du temps pour identifier un bug de création de VG chez moi. Ça donne ça: Je joins mon code au cas où (faire recherche sur "Felig" pour identifier mes propositions). J'ai un peu amélioré certaines traductions également. GEA 6.11F.lua
  6. Felig

    Support Gea

    Je suis en 4.55 (je viens de mettre à jour mon profil).
  7. Felig

    Support Gea

    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).
  8. Felig

    Support Gea

    Merci Steven, bon à savoir, j'aurais du savoir que GEA gérait toutes les situations!
  9. Felig

    Support Gea

    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 ?
  10. Felig

    HC2 - 4.510 - Stable - 02/08/2018

    Il y a sans doute plusieurs raisons possibles aux messages API not found, mais la seule que je connaisse pour l'instant est quand on essaie d'accéder une variable globale qui n'existe pas. Le problème c'est que c'est une technique utilisée dans de nombreux scripts pour justement vérifier l'existence d'une variable globale: on essaie de lire sa valeur et si le résultat est "nil" on en déduit qu'elle n'existe pas. Depuis la 4.51, non seulement le résultat est "nil" mais en plus on un message d'erreur API not found (qui est juste pour information, ça ne bloque pas les scripts). Si on essaie d'accéder directement au json, c'est pareil on a aussi le message d'erreur. @Sakkhho Attention quand le Watchdog trouve une erreur dans un script, il t'indique le message d'erreur d'origine. Le API not found vient peut-être du script qui est surveillé par le Watchdog (même si ça n'a pas l'air d'être le cas ici, si j'en crois la ligne que tu as recopiée). Si ça vient bien du Watchdog, le programme utilise une variable globale pour les SMS j'ai l'impression, il faut peut-être vérifier ce point. Pour revenir à GEA et à tous les autres scripts qui testent l'existence d'une variable globale, il faudra sans doute changer la technique de test, avec une fonction de ce style, qui elle ne génère pas de message d'erreur: GEA.isGlobal = function(vg) -- vérifie si la variable globale vg existe response = api.get("/globalVariables/") for _,v in pairs(response) do if v.name == vg then return true end end end J'ai un peu bidouillé mon GEA pour l'intégrer, mais les modifs indiquées par @pepite ci-dessus suffisent, en attendant que @Steven corrige tout ça proprement.
  11. Felig

    HC2 - 4.510 - Stable - 02/08/2018

    NB: Pour les puristes, il faut ajouter la ligne suivante dans GEA.Init : tools.info(string.format(GEA.trad.gea_minifier, tools.version), "yellow") tools.info(string.format(GEA.trad.gea_check_every, GEA.checkEvery), "yellow") tools.info(string.format(GEA.trad.gea_global_create, GEA.globalvariables), "yellow") tools.info(string.format(GEA.trad.gea_global_create, GEA.historyvariable), "yellow") tools.info(string.format(GEA.trad.gea_global_create, GEA.pluginsvariables), "yellow") -- nouvelle ligne Ça donne ça au démarrage: [DEBUG] 21:11:48: -------------------------------------------------------------------------------- [DEBUG] 21:11:48: Démarrage automatique de GEA 6.07 (mode autostart) [DEBUG] 21:11:48: -------------------------------------------------------------------------------- [DEBUG] 21:11:48: Utilisation de minifiertools v. 2.00 [DEBUG] 21:11:48: Vérification automatique toutes les 30 secondes [DEBUG] 21:11:48: Création de la variable globale : GEA_Tasks [DEBUG] 21:11:48: Création de la variable globale : GEA_History [DEBUG] 21:11:48: Création de la variable globale : GEA_Plugins [DEBUG] 21:11:48: -------------------------------------------------------------------------------- [DEBUG] 21:11:48: Recherche de plugins ... : Aucun plugin trouvé [DEBUG] 21:11:48: Chargement du code utilisateur setEvents() ... [DEBUG] 21:11:48: -------------------------------------------------------------------------------- J'avais prévenu: c'est vraiment pour les puristes
  12. Felig

    HC2 - 4.510 - Stable - 02/08/2018

    Désolé, je réponds un peu tard, mais je confirme: ca règle le pb, et c'est plus propre que mon bricolage. On a quand même une erreur API not found la première fois que GEA est lancé et que la variable n'existe pas. Pour être parfait il faudrait un moyen de vérifier l'existence de la variable sans générer un message d'erreur, mais ça semble difficile sous cette version. Mais ensuite, bien sûr plus aucun message d'erreur. PS: Un truc étrange c'est que depuis que j'ai chargé le fichier syntaxe.lua dans une nouvelle scène, GEA le reporte comme plugin, et du coup ma variable était déjà créée. Probablement parce que le fichier indique le code nécessaire pour identifier les plugins. J'ai du effacer la scène en question puis la variable globale pour tester. Bref, ravi d'avoir pu aider. Merci @pepite
  13. Felig

    HC2 - 4.510 - Stable - 02/08/2018

    Bonjour, J'avais aussi une génération du message d'erreur API: Not Found quand GEA se déclenchait en mode -1 (en l’occurrence changement d'état d'une variable globale). Je confirme que ça ne bloque pas GEA qui continue à fonctionner normalement. Mais c'était gênant car du coup le Watchdog GEA redémarrait GEA pour rien. En recherchant la source, j'ai trouvé que ça vient de la fonction GEA.searchPlugins() et plus précisément de la ligne ci-dessous: GEA.searchPlugins = function() if (not GEA.auto) then -- la ligne ci-dessous génère error API: Not found si var globale non créée local vgplugins = fibaro:getGlobalValue(GEA.pluginsvariables) En effet, cette ligne génère un message d'erreur quand la variable globale "GEA_Plugins" n'existe pas (si vous n'utilisez pas de plugins). Solution: soit créer la variable globale, soit supprimer la fonction GEA.searchPlugins si vous ne l'utilisez pas. Moi j'ai choisi de ne pas appeler cette fonction quand on est en mode déclenchement -1 (équivalent à GEA.auto = false), en changeant la ligne suivante dans GEA.init (à la fin du code): -- la ligne dessous provoque erreur API: Not found en déclenchement -1 -- GEA.searchPlugins() -- corrigé en ajoutant condition if (GEA.auto) devant: if (GEA.auto) then GEA.searchPlugins() end Une façon plus propre de régler le problème serait de trouver un moyen de vérifier l'existence d'une variable globale sans générer ce fichu message d'erreur ...
  14. Felig

    HC2 - 4.510 - Stable - 02/08/2018

    Bonjour, j'ai mis une fonction dans GEA pour reboot ma HC2 tous les jours à 4h du mat: GEA.add({"Time","04:00"},30,"",{"RebootHC2"},"Redémarrage HC2 à 4:00") Ça marchait parfaitement avant la 4.51, mais là en vérifiant par hasard les logs de GEA il me dit qu'il fonctionne depuis 120h. Je suis en GEA 6.07 Quelqu'un a le même problème ?
  15. Felig

    Support Gea

    Voilà, je savais que j'avais vu ça, je ne me souvenais plus du nom, merci Lazer !!!!
×