jojo Posté(e) le 8 juin 2022 Signaler Posté(e) le 8 juin 2022 il y a 11 minutes, Lazer a dit : Pour "Program" : Je te suggère de supprimer les 2 lignes suivantes de la syntaxe : {"Program+", <id_module>} {"Program-", <id_module>} Qui sont techniquement possibles, mais n'ont aucun intérêt en pratique... qui aurait le cas d'usage d'aller comparer si le programme n°X est supérieur/inférieur à la valeur Y.... ça n'a juste aucun sens.... ça n'est pas comme comparer une Value (de luminosité, de température, de puissance, etc) en effet -- "Program" - "StartProgram" : Teste/démarre l'exécution d'un programme d'un module RGBW -- SYNTAXE : {"Program", <id_module>} {"Program!", <id_module>, <id_program>} {"Program", <id_module>, <id_program>} -- CONDITIONS : GEA.add( {"Program", 72}, 30, "", {ACTIONS} ) -- Retourne le programme en cours du RGB dont l'ID est 72 GEA.add( {"Program!", 72, 3}, 30, "", {ACTIONS} ) -- Vérifie si le programme 3 est en cours du RGB dont l'ID est 72 -- ACTIONS : GEA.add( {CONDITIONS}, 30, "", {"Program", 72, 6} ) -- Démarre le programme 6 du RGB 72 GEA.add( {CONDITIONS}, 30, "", {"Program", {72, 73}, 6} ) -- Démarre le programme 6 DES RGBS 72 ET 73 1
jojo Posté(e) le 8 juin 2022 Signaler Posté(e) le 8 juin 2022 Le 05/06/2022 à 12:24, Lazer a dit : Exemple : GEA.add({18, {"Value-", 19, 0}}, -1, "Ouverture fenêtre alors qu'il gêle dehors") En réalité, cette règle se déclenchera lorsque la fenêtre est ouverte, mais également à chaque fois que le température change d'un dixième de degrés tout en restant sous les 0°C.... et cela même si la fenêtre est fermée.... ça va faire beaucoup de notifications ! je vais documenter ce point précis et très important à mes yeux. As-tu voulu faire un test pour voir si je suivais ? En effet, je suis d'accord qu'un trigger est généré à chaque changement de température (19), même si la fenêtre (18) est fermée => bcp de déclenchements inutiles (et donc la règle GEA est vérifiée plusieurs fois pour rien). Mais pas de notif (ou d'actions) car toutes les conditions (18=1 et 19<0) ne sont pas remplies. (C'est le principe de GEA de n'exécuter une règle que si toutes les conditions sont remplies ?) Et je suis donc tout à fait ok avec ta syntaxe adaptée : GEA.add({18, {"(Value-)", 19, 0}}, -1, "Ouverture fenêtre alors qu'il gêle dehors")
jojo Posté(e) le 8 juin 2022 Signaler Posté(e) le 8 juin 2022 en fait ce dont tu me parlais avec les () est repris toute à la fin de la doc, dans les "Trucs et astuces". Tu y confirmes ton explication ci-dessus, mais je n'ai toujours pas compris la logique du raisonnement : je ne comprend pas comment une règle GEA peut être validée si toutes les conditions ne sont pas remplies (seule exception = {"Inverse", #}) ?????????????
Lazer Posté(e) le 8 juin 2022 Auteur Signaler Posté(e) le 8 juin 2022 Il y a 2 heures, jojo a dit : je vais documenter ce point précis et très important à mes yeux. As-tu voulu faire un test pour voir si je suivais ? En effet, je suis d'accord qu'un trigger est généré à chaque changement de température (19), même si la fenêtre (18) est fermée => bcp de déclenchements inutiles (et donc la règle GEA est vérifiée plusieurs fois pour rien). Mais pas de notif (ou d'actions) car toutes les conditions (18=1 et 19<0) ne sont pas remplies. (C'est le principe de GEA de n'exécuter une règle que si toutes les conditions sont remplies ?) Et je suis donc tout à fait ok avec ta syntaxe adaptée : GEA.add({18, {"(Value-)", 19, 0}}, -1, "Ouverture fenêtre alors qu'il gêle dehors") C'est exactement cela, maintenant tu as tout compris Par contre, ce n'était pas un test pour te tester Mais bien un exemple supposé réel. Dans le cas de cette règle, l'intention de l'utilisateur est de déclencher l'action instantanément, au moment précis où la porte s'ouvre, tandis que la température est négative. Cependant, l'effet de bord non attendu, c'est que les actions se déclencheront également à chaque fois que la température varie (ce qui arrive souvent) tandis que la porte est toujours ouverte... pas du tout l'effet attendu. A la réflexion, cet exemple n'était peut être pas le plus pertinent. Mais c'était surtout la logique que je voulais mettre en évidence, et les effets de bords induits qui peuvent être surprenants si on n'a pas saisit l'utilité des parenthèses. C'est un cas que j'ai souvent vu sur le topic du support GEA... déjà à l'époque de la HC2, raison pour laquelle Steven a introduit les parenthèses.
Felig Posté(e) le 9 juin 2022 Signaler Posté(e) le 9 juin 2022 Bonjour, Ci-dessous une suggestion pour la fonction de contrôle de "sleep". Ça ne change rien au fonctionnement, mais ça permet d'avoir des messages d'erreur plus explicites dans mes tests: sleep = {name = "Sleep", control = function(duree, option) if type(duree) ~= "number" then return false, string.format(self.trad.not_number, duree) end return self:getOption(option).control() end, Pour tester j'ai utilisé: GEA.add(true,0,"",{"sleep","10",{"Global","varxxx","Test"}},"Test Sleep 1") GEA.add(true,0,"",{"sleep",10, {"Global","varxxx","Test"}},"Test Sleep 2") 1
Lazer Posté(e) le 10 juin 2022 Auteur Signaler Posté(e) le 10 juin 2022 Merci pour la suggestion, ça sera pour une prochaine version alors Tu sais qu'en attendant, plutôt que de modifier le code de GEA dans le fichier main, tu peux définir tes propres options dans ta fonction config() : function config(GEA) ... GEA.options.sleep = {name = "Sleep", .... } } Normalement si tu redéfinies une option qui existe déjà, l'originale sera replacée par la tienne.
jojo Posté(e) le 10 juin 2022 Signaler Posté(e) le 10 juin 2022 (modifié) Le 08/06/2022 à 17:40, Lazer a dit : Par contre, ce n'était pas un test pour te tester non, c'était bien un test (involontaire) de ta part, car tu avais écrit ceci : Le 05/06/2022 à 12:24, Lazer a dit : cela même si la fenêtre est fermée.... mais voyons l'aspect positif, cela m'a obligé de me torturer les méninges pour bien comprendre finalement ... Le 08/06/2022 à 17:40, Lazer a dit : tandis que la porte est toujours ouverte Voici donc la v7.37 de la doc/syntaxe. GEA v7.37 Syntaxe.lua Modifié le 1 juillet 2022 par jojo 1
Lazer Posté(e) le 10 juin 2022 Auteur Signaler Posté(e) le 10 juin 2022 Ah mince alors, désolé, j'ai donc écris une bêtise Merci pour la doc à jour, je la mettrai en 1ère page
Ghoosti Posté(e) le 10 juin 2022 Signaler Posté(e) le 10 juin 2022 (modifié) Lazer, Jojo Merci pour le travail et la nouvelle doc Modifié le 10 juin 2022 par Ghoosti
Felig Posté(e) le 10 juin 2022 Signaler Posté(e) le 10 juin 2022 Il y a 12 heures, Lazer a dit : Tu sais qu'en attendant, plutôt que de modifier le code de GEA dans le fichier main, tu peux définir tes propres options dans ta fonction config() : Je savais que c'était possible pour GEA 6 j'avais écrit quelques options custom, pour sélectionner un label par son contenu notamment, mais j'avais pas encore testé sur GEA 7. Je vais le faire. J'ai une addiction pour le débogage et les améliorations inutiles désolé, je vais essayer de me contrôler. J'avais aussi amélioré quelques messages dans les logs (une autre de mes maniaqueries), mais sur GEA 7 pas besoin, tu as fait un super boulot, ils sont clairs et esthétiques. 1
jojo Posté(e) le 11 juin 2022 Signaler Posté(e) le 11 juin 2022 De rien (cela m'a permis d'apprendre bcp de choses) Et le temps que j'y ai passé n'est rien comparé au temps que @Lazer a du passer à convertir le code pour la HC3.
Lazer Posté(e) le 12 juin 2022 Auteur Signaler Posté(e) le 12 juin 2022 Oui c'était assez long... Mais instructif
RS600807 Posté(e) le 13 juin 2022 Signaler Posté(e) le 13 juin 2022 Bonjour, Je rencontre une difficulté avec GEA 7.37 concernant l'utilisation de VariableCache. Je souhaite récupérer le profil actif avant changement vers un nouveau profil. Voici mon code : GEA.add(true, 30, "", {{"VariableCache", "Prev_Profile", "#profile#"}, {"Profile", "AWAY"}}, "test de verif variable en cache") Voici l'erreur qui apparait : [ERROR] [QA_GEA_205]: Ajout auto #6 : Activation mode précédent Règle exclue : ./include/main.lua:1940: attempt to index a nil value (local 'profileId') j'ai vu sur le forum que Dragoniacs avait rencontrer la même erreur sur la version GEA 6.xx (15 mars 2021). Mais j'ai essayé toutes les solutions proposées et rien ne fonctionne, ça ne s'initialise pas... Je suis novice, je dois rater quelquechose. Si quelqu'un peut m'aiguiller, car là je capitule! Merci.
Lazer Posté(e) le 14 juin 2022 Auteur Signaler Posté(e) le 14 juin 2022 Il faudra que je reproduise le problème chez moi... mais pas tout de suite. Si en attendant @Dragoniacs a une idée pour te débloquer
Dragoniacs Posté(e) le 14 juin 2022 Signaler Posté(e) le 14 juin 2022 Alors effectivement, GEA est trop rapide et change le profile trop vite.Du coup, il faut utiliser une tempo "sleep" :GEA.add(true, 30, "", {{"VariableCache", "Prev_Profile", "#profile#"}, {"Sleep",30,{"Profile", "AWAY"}}}, "test de verif variable en cache")Envoyé de mon M2012K11AG en utilisant Tapatalk
RS600807 Posté(e) le 14 juin 2022 Signaler Posté(e) le 14 juin 2022 Merci pour vos premiers retours. Je viens de tester : le fait d'ajouter la tempo permet effectivement de valider l'évènement demandé. A indiquer dans une prochaine mise à jour de GEA ? Néanmoins, après test, je me rends compte qu'il n'initialise pas la variable en cache car lorsque j'appelle mon 2e évènement (retour au mode précédent), il ne revient pas au mode précédent... GEA.add(true, 30, "", {{"VariableCache", "Prev_Profile", "#Profile#"}, {"Sleep", 30, {"Profile", "AWAY"}}}, "Mise en cache du profil") GEA.add({"Time","16:48","18:50"}, 30, "", {"Profile", {"VariableCache", "Prev_Profile"}}, "Activation mode précédent") Est-ce que la mise en cache nécessite d'activer une option dans un GEA ? J'avoue que que je sèche... par ailleurs, en faisant un print(Prev_Profile), il devrait pouvoir m'afficher ce que contient la valeur en cache Prev_Profile, non ?
jojo Posté(e) le 14 juin 2022 Signaler Posté(e) le 14 juin 2022 vu qu'on parle de variable cache, en relisant la doc, je m'était posé les questions suivantes : c'est quoi précisément ? car je ne connaissais que 2 types de variable : les Globales et celles des QA quelle est sa durée de vie / sa persistance : reboot HC3 ? / sauvegarde ce GEA / 1 cycle de GEA / ??? ?
Lazer Posté(e) le 14 juin 2022 Auteur Signaler Posté(e) le 14 juin 2022 Il y a 23 heures, RS600807 a dit : Néanmoins, après test, je me rends compte qu'il n'initialise pas la variable en cache car lorsque j'appelle mon 2e évènement (retour au mode précédent), il ne revient pas au mode précédent... Là je pense que ça n'a rien à voir avec la gestion des profiles, ta 2nde règle contient une condition de plage horaire, est-ce que tu es bien dans la plage depuis la durée de 30s ? Autre remarque, le Sleep que tu utilises a une tempo de 30s, donc... le profile n'est modifié que 30s après l'exécution de la 1ère règle. Pas évident de jongler avec la gestion temporelle... Il y a 23 heures, RS600807 a dit : Est-ce que la mise en cache nécessite d'activer une option dans un GEA ? J'avoue que que je sèche... Non pas du tout, rien de particulier à faire Il y a 23 heures, RS600807 a dit : par ailleurs, en faisant un print(Prev_Profile), il devrait pouvoir m'afficher ce que contient la valeur en cache Prev_Profile, non ? Non, le print() que tu vas mettre dans ta fonction function setEvents() ne va s'exécuter qu'au démarrage de GEA, pas pendant la vérification des règles qui a lieu toute les 30s, car elles sont chargées en mémoire. Donc GEA ne revient jamais dans la function setEvents()... sauf en cas d'exécution instantanée sur événement / trigger, avec durée = -1 Il y a 17 heures, jojo a dit : vu qu'on parle de variable cache, en relisant la doc, je m'était posé les questions suivantes : c'est quoi précisément ? car je ne connaissais que 2 types de variable : les Globales et celles des QA quelle est sa durée de vie / sa persistance : reboot HC3 ? / sauvegarde ce GEA / 1 cycle de GEA / ??? ? C'est plus ou moins la même chose qu'une variable locale en LUA... c'est à dire une variable en mémoire RAM, perdue lors du redémarrage de GEA Puisqu'on ne peut pas utiliser les variables locales dans la function setEvents() (voir explication au dessus), ces "VariableCache" permettent de stocker des informations en mémoire pour être utilisées dans les prochains cycles de GEA. Exemple, j'en utilise une pour déclencher l'aspirateur 1 seule fois par jour, sans ça il se redéclencherait plusieurs fois par jour dès que la batterie est rechargée : -- Robot aspirateur Xiaomi Roborock GEA.add({{"Profile", "Absent"}, {"Value", id["QA_XIAOMI_ROBOROCK"], false}, {"Battery", id["QA_XIAOMI_ROBOROCK"], 100}, {"VariableCache!", "Aspirateur", true}}, 5*60, "", {{"QuickApp", id["QA_XIAOMI_ROBOROCK"], "clean"}, {"VariableCache", "Aspirateur", true}}, "Démarrage aspirateur") GEA.add({"Time", "00:00", "00:01"}, 0, "", {"VariableCache", "Aspirateur", false}, "VariableCache Aspirateur") Autre exemple, mémoriser la valeur de 2 lumières, les allumer à 100%, faire une action (ici une photo), puis les rétablir à leur niveau précédent, le tout en 1 seule règle : GEA.add( { {"Label", id["VD_OCTOPRINT"], "LabelJob", "Operational"}, {"Label", id["VD_OCTOPRINT"], "LabelJobProgress", "100.0 %"} }, 30, "Impression 3D terminée à #time#", { {"VariableCache", "LED_IMP3D_HAUT", {"Value", id["LED_IMP3D_HAUT"]}}, {"VariableCache", "LED_IMP3D_COTE", {"Value", id["LED_IMP3D_COTE"]}}, {"value", {id["LED_IMP3D_HAUT"], id["LED_IMP3D_COTE"]}, 99}, {"Email", "Christophe", "Octoprint : Impression 3D terminée avec succès à #time#", "GEA : Octoprint"}, {"Sleep", 10, {"Picture", id["CAMERA_IMPRIMANTE_3D"], "Lazer"}}, {"Sleep", 15, {"Value", id["LED_IMP3D_HAUT"], {"VariableCache", "LED_IMP3D_HAUT"}}}, {"Sleep", 15, {"Value", id["LED_IMP3D_COTE"], {"VariableCache", "LED_IMP3D_COTE"}}} } ) 1
flacon030 Posté(e) le 16 juin 2022 Signaler Posté(e) le 16 juin 2022 (modifié) Bonjour J'ai fait quelques modification dans mon GEA et je viens de me rendre compte de ceci dans le debug C'est normale ce warning? Je n'avais jamais fait attention a cela [16.06.2022] [14:28:17] [DEBUG] [QA_GEA_53]: Déclencheurs instantanés : 0 [16.06.2022] [14:28:17] [WARNING] [QA_GEA_53]: Aucun déclencheur instantané en mode événement Modifié le 16 juin 2022 par flacon030 1
Lazer Posté(e) le 16 juin 2022 Auteur Signaler Posté(e) le 16 juin 2022 Il va falloir reprendre l'habitude de poser vos question sur le topic du support GEA les gars Bref, ce message t'informe que tu n'as aucun déclencheur instantanée (durée = -1) parmi tes règles. 1
RS600807 Posté(e) le 21 juin 2022 Signaler Posté(e) le 21 juin 2022 Merci dragoniacs, lazer et jojo pour vos réponses. Il faut en effet apprendre à jongler avec la dimension séquentielle de GEA. Maintenant que j'ai un peu mieux cerner le fonctionnement avec vos différentes explications, le "sleep" prend tout son sens. J'ai donc réussi à mettre en place la gestion de mes différents profils, moyennant un délai de 30s avant activation. Pour ceux à qui ça pourrait aider, voici ce que ca donne avec en plus la gestion des alarmes : -- *** Profils de la box disponibles : 1=HOME / 2=AWAY / 7=NUIT / 5=FRIENDS / 8=MANUEL -- *** Mise en cache du profil GEA.add(true, 30, "", {"VariableCache", "Prev_Profile", "#profile#"}, "Mise en cache du profil") -- *** Activation des profils -- 1=HOME GEA.add({{"VariableCache", "Jour_Nuit", "Jour"}, {"Or", {"VariableQuickApp", 190, "PRES_STEPHANE", true}, {"VariableQuickApp", 201, "PRES_LISE", true}}, {"VariableCache!", "Prev_Profile", "FRIENDS"}}, 30, "", {"Profile", "HOME"}, "Mode HOME activé (par détection de présence)") -- 2=AWAY GEA.add({{"VariableCache", "Jour_Nuit", "Jour"}, {"VariableQuickApp", 190, "PRES_STEPHANE", false}, {"VariableQuickApp", 201, "PRES_LISE", false}}, 30, "", {{"VariableCache", "Prev_Profile", "#profile#"}, {"Sleep", 30, {"Profile", "AWAY"}}}, "Mode AWAY activé (par détection de présence)") -- 7=NUIT GEA.add({{"VariableCache", "Jour_Nuit", "Nuit"}, {"Or", {"VariableCache", "Etat_Steph", true}, {"VariableCache", "Etat_Lise", true}}}, 30, "", {{"VariableCache", "Prev_Profile", "#profile#"}, {"VariableCache", "Etat_Steph", true}, {"VariableCache", "Etat_Lise", true}, {"Sleep", 30, {"Profile", "NUIT"}}}, "Mode NUIT activé (par détection Jour/Nuit)") -- 5=FRIENDS GEA.add({{"VariableCache", "Jour_Nuit", "Jour"}, {"Or", {"VariableQuickApp", 190, "PRES_STEPHANE", true}, {"VariableQuickApp", 201, "PRES_LISE", true}}, {"VariableCache", "Prev_Profile", "FRIENDS"}}, 30, "", {"Profile", "FRIENDS"}, "Mode FRIENDS activé (par restauration mode précédent)") --8=MANUEL --à compléter -- *** Gestion des alarmes *** GEA.add({"Profile", "HOME"}, -1, "", {{"SetDisarmed", {1,3,4}}, {"Portable", "26", "Mode HOME activé à #time# / Alarmes désactivées"}}, "Mode HOME activé / Alarmes désactivées") GEA.add({"Profile", "AWAY"}, -1, "", {{"SetArmed", {1,3,4}}, {"Portable", "26", "Mode AWAY activé à #time# / Alarmes activées :ext., garage & maison"}}, "Mode AWAY activé / Alarmes activées : Extérieur, Maison et Garage") GEA.add({"Profile", "NUIT"}, -1, "", {{"SetArmed", {1,3}}, {"Portable", "26", "Mode NUIT activé à #time# / Alarmes activées : ext. & garage"}}, "Mode NUIT activé / Alarmes activées : Extérieur et Garage") GEA.add({"Profile", "FRIENDS"}, -1, "", {{"SetDisarmed", {1,3,4}}, {"Portable", "26", "Mode FRIENDS activé à #time# / Alarmes désactivées"}}, "Mode FRIENDS activé / Alarmes désactivées") GEA.add({"Profile", "MANUEL"}, -1, "", {{"SetDisarmed", {1,3,4}}, {"Portable", "26", "Mode MANUEL activé à #time# / Alarmes désactivées"}}, "Mode MANUEL activé / Alarmes désactivées") 1
Felig Posté(e) le 28 juin 2022 Signaler Posté(e) le 28 juin 2022 Merci, c'est intéressant. J’utilisais une variable globale pour mémoriser le profil précédent, mais c'est plus élégant comme ça.
jojo Posté(e) le 1 juillet 2022 Signaler Posté(e) le 1 juillet 2022 Comme la version 7.37 de la syntaxe n'a pas encore été publiée sur la première, j'en profite pour encore la modifier un tout petit peu. Dans les modes thermostat possible j'ai rajouté Off car : testé et ça fonctionne ce mode est repris dans les exemples -- "ThermostatMode" : Teste/modifie le mode de fonctionnement d'un thermostat -- SYNTAXE : {"ThermostatMode", <id_thermostat>, "<mode>"} -- mode : Heat | Cool | Auto | Resume | Fan | Dry | Off -- CONDITIONS : GEA.add( {"ThermostatMode", 72, "Heat"}, 30, "Thermostat chaud", {ACTIONS} ) -- Vérifie si le thermostat 72 est en train de chauffer GEA.add( {"ThermostatMode", 72, "Off"} , 30, "Thermostat arrêt", {ACTIONS} ) -- Vérifie si le thermostat 72 est arrêté GEA v7.37 Syntaxe.lua 2
RS600807 Posté(e) le 3 juillet 2022 Signaler Posté(e) le 3 juillet 2022 Bonsoir, Est-ce que quelqu'un rencontre des pb avec la fonction Ask sous GEA? GEA.add(true, 30, "", {{"Ask", 26, "test notif inter", "voulez-vous ouvrir ?", {"Close", 35, 85}}, {"Repeat"}}, "test notification interactive") Je reçois bien le message intercatif. Mais dès que je clique sur le "yes" (j'ai testé aussi avec le "no" au cas où !), je reçois une notif instantanément indiquant : "info: sending action "%@" failed" failed. Je reçois également un email m'indiquant "suspicious login attempt" avec une adresse IP. J'ai vu sur le forum forum.fibaro.com que des personnes ont déjà rencontré ce pb sur des versions antérieures, mais je n'ai pas trouvé de solutions qui résoud le pb... J'ai l'impression qu'il y a comme un filtrage et que la box ne veut pas accepter les messages entrant. Je suis en version 5.111.48 (beta). Je précise que je n'ai aucun soucis avec les notifications push "classiques". J'ai également testé la notification interactive en mode bloc et j'obtiens les mêmes soucis (donc a priori pas un pb lié à GEA) Quelqu'un rencontre-t-il le même pb ? Un bug de la dernière version ? Merci pour vos réponses.
Messages recommandés