Lazer Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Normal, en plus la coloration syntaxique te montre bien qu'il y a un souci.... 156_détecteur, c'est quoi ce truc là ? Je suppose que tu voulais mettre seulement 156 ? Idem pour 162 Sinon si tu veux utiliser du texte à la place des ID, ce qui est plus parlant, il faut définir le tableau id et l'utiliser ainsi (en plus il est déjà dans ton exemple) : local id = { DETECTEUR = 156, LUMIERE = 162, } GEA.add(id["DETECTEUR"], -1, "", {"TurnOn", id["LUMIERE"]}) Ainsi c'est plus parlant, surtout quand tu as beaucoup de règles. PS : attention aux majuscules/minuscules, il faut être très rigoureux, l'ordinateur fait la différence.
Guizmo Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Excuse mon ignorance, je vais retenter. Merci.
Eric_95430 Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Bonjour, Je voudrais intégrer la gestion de ma piscine dans GEA, mais je bute déjà. Pour bien faire je dois lancer un cycle court de filtration pour récupérer la température réelle de l'eau, la sonde ne se trouvant pas au niveau du bassin, mais sur le filtre. J'ai une fonction pour le cycle court, mais je n'arrive pas à récupérer la valeur de la température pour l'utiliser comme déclencheur dans GEA et ce n'est que le début . Au final, voici le fonctionnement voulu: Mode "HIVERS": si Température Eau>= 5°: (Contrôle toute les 30 min) 1 ou 2 cycle de filtration par jour (de 2 ou 3 heures) si Température Eau < 5 mise en route de la Pompe à chaleur et filtration Mode "ETE" si Température eau>= Consigne: (Contrôle toute les 30 min) 2 cycles de filtration par jour (de 4 ou 6 heures) Si Température Eau < Consigne mise en route de la Filtration et de la Pompe à chaleur jusqu'à Eau>Consigne Je compte sur vous pour vos idées, vos conseils ou une solution. Je débute tout juste dans ce domaine et je galère bien Voici le début de mon code: function config(GEA) -- =================================================== -- Configuration générale -- =================================================== GEA.debug = true GEA.portables = {26} GEA.checkEvery = 10 -- Pour Tests, à passer à 30 min end function Prise_Temp() local Filtre = fibaro.getValue(309, "value") if not Filtre then fibaro.call(309, "turnOn") print("mise en route du Filtre pour prise de T°") -- Pour Debug, à supprimer fibaro.setTimeout(10000, function() -- Pour Tests, à passer à 3 min Temp_Pisc = fibaro.getValue(313, "value") print ("T° Piscine :", Temp_Pisc) -- Pour Debug, à supprimer return Temp_Pisc end) else print("Le Filtre est dèjà en route pour prise de T°") -- Pour Debug, à supprimer Temp_Pisc = fibaro.getValue(313, "value") print ("T° Piscine :", Temp_Pisc) -- Pour Debug, à supprimer return Temp_Pisc end end function setEvents() -- ========================================================== -- Règles utilisateur -- ========================================================== local id = { Temp_Eau_Pisc =313, P_A_C =310, Filtration =309, } --Temp_Pisc=Prise_Temp() GEA.add(true, 0, "Démarrage de GEA PISCINE le #date# à #time#", nil, "Démarrage GEA-Picine") GEA.add(true, 0 , "", {{"repeat"}, {"Function", function() return Prise_Temp() end}} ) end
Guizmo Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 C'est fait et ca fonctionne. Par contre au fur et à mesure que des lignes vont etre ajouté cela va devenir un livre et pour trouver une erreur , modifié une commande ......ca va devenir compliqué, je me trompe peut-etre.
Lazer Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Alors tu peux ajouter un autre paramètre à la fonction GEA.add ce qui permet de s'y retrouver plus facilement dans les logs. GEA.add(id["DETECTEUR"], -1, "", {"TurnOn", id["LUMIERE"]}, "Allumage auto lumière après mouvement") Comme tu peux le voir, c'est déjà le cas dans les 4 règles d'exemple que tu as conservé. Quand tu as une erreur, le plus simple pour débuter c'est de supprimer toutes les autres lignes pour ne conserver que la ligne en cours d'écriture. Ainsi le débogage sera facilité, les seuls messages affichés dans le log seront ceux qui t'intéressent, tu ne seras pas pollué par les autres règles. En arrive sans problème à gérer des centaines de règles avec GEA, il faut juste un peu d'organisation, regrouper les règles ensembles par thématique, etc. @Eric_95430 euh.... mais ça m'a l'air 1000x trop compliqué tout ça. Utiliser "Function" OK, mais attention, faut déjà une bonne maitrise de GEA et du LUA avant de se lancer là dedans. Je ne sais pas trop ce que tu cherches à faire avec ta fonction, mais sans même chercher à la comprendre, quand je vois un gros setTimeout() en plein milieu, ça ne peut pas fonctionner.... ne pas oublier que GEA vérifie toutes les règles de manière séquentielle (de haut en bas) toutes les 30 secondes. Ton setTimeout() est asynchrone, tu ne maitrises absolument pas quand il va s'exécuter. 1
Guizmo Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 J'ai préféré mettre un titre là où c'est surligné, comme ca je sais où ca commence et où ca termine. Merci quand meme. Maintenant je vais réfléchir à un mode d'extinction sans gène.
Eric_95430 Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Il est vrai que le "gros setTimeout()" n'ai pas judicieux, mais j'ai pas d'autres idées. j'ai tenté de tout faire sous GEA mais c'était pire, je me suis perdu tout seul. La gestion de cette piscine me paraissait simple, mais en fait, pas si simple pour un débutant. J'ai réussi à lancer ma fonction et récupérer la Température comme ceci: local H_G = 5 -- Température Hors Gel -- Lancement de la fonction Prise_Temp() et stockage dans le variable 'Temp_Pisc' GEA.add(true, 0 , "", {{"repeat"},{"VariableCache", "Temp_Pisc", {"Function", function() return Prise_Temp() end}}}) -- Si Temp_Pisc < H_G passage en mode hors-Gel GEA.add({"VariableCache-", "Temp_Pisc", H_G},10,"Je passe en Hors Gel T° Eau: #value#",{"repeat"},"Passage en Mode Hors-Gel" )
Lazer Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 @Guizmo attention du définies ton tableau id 2 fois, il faut le déclarer une seule fois, avant toutes les règles (donc juste au début de la fonction setEvents)... bref comme dans l'exemple. @Eric_95430 Mais ta température, c'est un module ? Donc tu as juste à utiliser la valeur de ce module, je ne comprends pas ta logique avec ta fonction (et je n'ai aucune intention de comprendre pour être honete, c'est 1000x trop complexe) Comme je dis toujours, commencez avec des choses simples, ultra basiques, puis ajouter au fur et à mesure. Partir dès le début avec un truc complexe, ça ne marchera jamais.
Guizmo Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 je laisse tombé pour ce soir. Bonne soirée.
Manu31 Posté(e) le 7 janvier 2022 Signaler Posté(e) le 7 janvier 2022 Bonsoir, En espérant que ce message puisse vous aider Pour @Guizmo : Un petit exemple de ce que j'ai fait. -- Allume la lumière du garage si det garage = true GEA.add({id["DetMouv_Garage"]}, -1, "", {"turnOn", id["Eclairage_Garage"]}) -- Eteint la lumière du garage au bout de 3min si pas de mouvement GEA.add({"Value", id["DetMouv_Garage"], "false"}, 3*60, "", {"turnOff",id["Eclairage_Garage"]}) Pour @Eric_95430 : Je suis d'accord avec @Lazer. Tu cherches à mon sens à faire qqc de beaucoup trop complexe. Voici ce que j'ai fait pour ma part (qui reste bien sur à compléter / modifier / améliorer) Domotiser sa piscine 3
fredokl Posté(e) le 9 janvier 2022 Signaler Posté(e) le 9 janvier 2022 Salut. J'ai un doute sur le fonctionnement de ces lignes. La première arrête ma clim si au moins une ouverture est détectée, la seconde relancera la clim si toutes les ouvertures sont fermées. Pouvez-vous me dire si il y a quelque chose qui cloche? merci. -- Arrêt de la climatisation si la baie vitrée droite ou la baie vitrée gauche ou la fenêtre du salon ou la fenêtre de la cuisine ou la porte d'entrée est ouverte GEA.add({"Or", {"Value",id["BAIE_VITREE_SALON_DROITE"],true}, {"Value",id["BAIE_VITREE_SALON_GAUCHE"],true},{"Value",id["FENETRE_SALON"],true},{"Value",id["FENETRE_CUISINE"],true},{"Value",id["PORTE_ENTREE"],true}}, 30, "",{"ThermostatMode", id["CLIM_SALON"], "Off"}) -- Arrêt -- Relance Climatisation en Mode Automatique GEA.add({"Or", {"Value",id["BAIE_VITREE_SALON_DROITE"],false}, {"Value",id["BAIE_VITREE_SALON_GAUCHE"],false},{"Value",id["FENETRE_SALON"],false},{"Value",id["FENETRE_CUISINE"],false},{"Value",id["PORTE_ENTREE"],false}}, 30, "", {{"Inverse"},{"RestartTask",{climsalon1,climsalon2,climsalon3,climsalon4,climsalon5,climsalon6,climsalon7,climsalon8,climsalon9,climsalon10,climsalon11,climsalon12,climsalon13,climsalon14,climsalon15,climsalon16,climsalon17,climsalon18,climsalon19,climsalon20,climsalon21,climsalon22,climsalon23,climsalon24,climsalon25,climsalon26,climsalon27}}}) -- Relance
Lazer Posté(e) le 9 janvier 2022 Signaler Posté(e) le 9 janvier 2022 Il faut enlever le "Or" dans la seconde règle, non ? Parce que tu veux une condition "Et" en fait (qui est la condition booléenne par défaut quand on met plusieurs conditions, il faut qu'elles soient toutes valides) 1
basklj Posté(e) le 12 janvier 2022 Signaler Posté(e) le 12 janvier 2022 Hello, I am wondering if it is possible to run different GEA devices on my HC3. For example a GEA device for the kitchen, a separate GEA device for the living room etc etc.? And I am further struggling with the folllowing (which I am nor sure is even possible or work), defining and combining local: local Home = {"Global", "HomeStatus", "Home"} local Away = {"Global", "HomeStatus", "Away"} local Asleep = {"Global", "PresenceStatus", "Asleep"} local Awake = {"Global", "PresenceStatus", "Awake"} local HomeAwake = {Home, Awake} and how to apply this in the following code: GEA.add({ {"Global", "HomeStatus", "Home"}, {"Global", "PresenceStatus", "Awake"}}, 1, "", {{"Hue", id["Snk_Lght"], "bri", "30"}, {"Hue", id["Ktchn_Dry"], "bri", "50"}, {"Hue", id["Ktchn_Smll"], "bri", "50"}}) Thank you
Dragoniacs Posté(e) le 12 janvier 2022 Signaler Posté(e) le 12 janvier 2022 I have 2 GEA quickapp on my box and it with working well.Envoyé de mon M2012K11AG en utilisant Tapatalk
Lazer Posté(e) le 12 janvier 2022 Signaler Posté(e) le 12 janvier 2022 (modifié) I confirm you can have multiple independent GEA instances, each one runs in it's own QuickApp. This rule alone looks OK : GEA.add({ {"Global", "HomeStatus", "Home"}, {"Global", "PresenceStatus", "Awake"}}, 1, "", {{"Hue", id["Snk_Lght"], "bri", "30"}, {"Hue", id["Ktchn_Dry"], "bri", "50"}, {"Hue", id["Ktchn_Smll"], "bri", "50"}}) Which should be the same as : local Home = {"Global", "HomeStatus", "Home"} local Away = {"Global", "HomeStatus", "Away"} local Asleep = {"Global", "PresenceStatus", "Asleep"} local Awake = {"Global", "PresenceStatus", "Awake"} local HomeAwake = {Home, Awake} GEA.add(HomeAwake, 1, "", {{"Hue", id["Snk_Lght"], "bri", "30"}, {"Hue", id["Ktchn_Dry"], "bri", "50"}, {"Hue", id["Ktchn_Smll"], "bri", "50"}}) Just replace the GEA condition by the HomeAwake variable. It is useful if you intend to use the same condition multiple times in the other rules. Modifié le 12 janvier 2022 par Lazer
gorn Posté(e) le 16 janvier 2022 Signaler Posté(e) le 16 janvier 2022 Pour la migration vers HC3, j'ai une règle GEA qui ne fonctionne pas. La ligne éclairage extérieure ne marche pas. A savoir que celle en dessous fonctionne. Je n'ai pas trouvé la fenêtre de débug comme sur la HC2. J'ai bien une icône en bas a gauche qui ouvre une fenêtre en bas mais rien n'y apparait. function config(GEA) -- =================================================== -- Configuration générale -- =================================================== GEA.debug = true GEA.portables = {25} end function setEvents() -- ========================================================== -- Règles utilisateur -- ========================================================== local id = { -- Garage -- Porte_Garage = 78, -- Extérieur -- Detecteur_Allee = 70, Detecteur_Terrasse = 72, Detecteur_Entree = 68, Ecl_Terrasse = 65, Spot_Allee = 74, Guirelande = 82, --Halogene_Entree = 122, -- Interne -- -- Lapinou = 44, -- Xiaomi_vacuum = 201, } GEA.add(true, 0, "Démarrage de GEA le #date# à #time#", nil, "Démarrage GEA") GEA.add({"Info+", "serverStatus", os.time()-120}, 0, "Box redémarrée le #date# à #time#", nil, "Démarrage box") GEA.add({"Info", "updateStableAvailable", true}, 24*60*60, "Une nouvelle version Stable est disponible", nil, "Détection nouvelle version stable") GEA.add({"Info", "updateBetaAvailable", true}, 24*60*60, "Une nouvelle version BETA est disponible", nil, "Détection nouvelle version beta") GEA.add( {{"Value", id["Detecteur_Allee"], 1}, {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée") GEA.add({id["Porte_Garage"], {"Time", "20:00", "08:00"}}, 60*60, "La porte du garage est ouverte depuis #duration#", {"Repeat"}) end
fredokl Posté(e) le 16 janvier 2022 Signaler Posté(e) le 16 janvier 2022 (modifié) GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée") @gorn Essai avec cette ligne. Pour le debug, il faut mettre true à la ligne 68 et 69 dans le main. Modifié le 16 janvier 2022 par fredokl 1
971jmd Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 (modifié) Il y a 3 heures, fredokl a dit : @gorn Essai avec cette ligne. Pour le debug, il faut mettre true à la ligne 68 et 69 dans le main. salut Je souhaiterais connaître ou comprendre la ligne de code je comprends: si détection entre le coucher et lever du soleil alors allume { id [ "Spot_Allee" ], id [ "Ecl_Terrasse " ], id [ "Guirelande" ]}, Mais là je sais pas à quoi ça correspond : 1 * 60 }, "Eclairage allée" ) et et à quoi correspond dans la condition : (Heure) ? merci d'avance Modifié le 17 janvier 2022 par 971jmd
gorn Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 5*60}, "Eclairage allée") Si je le traduit en phrasé, c'est : Si détection allée, pendant la période du coucher au lever du soleil , j'allume le spot allée, éclairage terrasse, guirelande pendant 5x60s (dans l'exemple précédent c'était 1x60s) et je met "Eclairage allée" dans le débug 1
gorn Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 J'aurais dût exporter mon GEA de temps en temps... Parce que je sèche a nouveau sur des règles que j'avais fait. On ne m'y prendra plus! Pourquoi ça ne fonctionne pas? (et me dites pas que c'est parce que l'on est lundi ) GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "08:30"}}, 30, "", {"TurnOn", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise") GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "00:15"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise")
Lazer Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 Il y a 13 heures, gorn a dit : Pour la migration vers HC3, j'ai une règle GEA qui ne fonctionne pas. La ligne éclairage extérieure ne marche pas. A savoir que celle en dessous fonctionne. GEA.add( {{"Value", id["Detecteur_Allee"], 1}, {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée") Attention lors du passage HC2 => HC3, les modules ne prennent plus la même valeur (propriété value dans le JSON du module, visible via l'API) Sur HC2, Fibaro avait mal fait les choses, les détecteurs binaires (mouvement, ouverture, etc) prenaient les valeurs "0" et "1" (chaines de caractères contenant un nombre), tandis que sur HC3 c'est plus logique, on trouve des valeurs true et false (booléennes) De même, sur HC2 les multilevel (dimmer, volet, etc) avaient une valeur entre 0 et 99 mais sous forme de chaine de caractère (donc entre guillemets), tandis que sur HC3 c'est une vraie valeur numérique. C'est une différence fondamentale, donc il faudra adapter les valeurs dans tes règles GEA. Pour voir les valeurs des modules, tu peux utiliser l'API HTTP pour voir le JSON du module directement depuis ton navigateur, connaissant son ID : http://.../api/devices/ID Et tu cherches la valeur de la propriété value La syntaxe qui t'a été donnée est une écriture abrégée, les 2 conditions suivantes sont identiques : -- écriture complète corrigée : GEA.add({"Value", id["Detecteur_Allee"], true}, -1, ...) -- écriture abrégée : GEA.add(id["Detecteur_Allee"], -1, ...) Il y a 2 heures, gorn a dit : GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 5*60}, "Eclairage allée") Si je le traduit en phrasé, c'est : Si détection allée, pendant la période du coucher au lever du soleil , j'allume le spot allée, éclairage terrasse, guirelande pendant 5x60s (dans l'exemple précédent c'était 1x60s) et je met "Eclairage allée" dans le débug Voilà c'est exactement ça. Et même, on pourrait être encore plus précis, vu que la durée = -1, c'est donc un déclenchement instantané, donc ta phrase aurait pu commencer par "Dès qu'il y a une détection dans l'allée, ..." il y a 38 minutes, gorn a dit : J'aurais dût exporter mon GEA de temps en temps... Parce que je sèche a nouveau sur des règles que j'avais fait. On ne m'y prendra plus! Pourquoi ça ne fonctionne pas? (et me dites pas que c'est parce que l'on est lundi ) GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "08:30"}}, 30, "", {"TurnOn", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise") GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "00:15"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise") Ton écriture de Days est mauvaise, voir la doc de syntaxe (comme sur HC2, ça n'a pas changé) : {"Days", "Saturday, Sunday"} Tu n'as pas besoin des parenthèses autour de "Time", les parenthèses ne sont utiles que dans les déclenchement instantanés (donc avec durée = -1) pour exclure la condition du déclenchement (comme sur HC2, ça n'a pas changé) De plus, évite les conditions Time avec une heure précise à la minute près, en cas de freeze de la HC3 (constaté par quelques utilisateurs de façon aléatoire), GEA pourrait manquer le bon moment. Préfère une durée de 2 ou 3 minutes par sécurité : {"Time", "00:15", "00:16"}
gorn Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 Merci @Lazer, en effet le JSON est true/false Concernant ma ligne, en effet le days était mal écrit, c'est de nouveau fonctionnel : GEA.add( {{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, {"Time", "00:00", "00:31"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}}, "Eco énergie prise OFF") Si je pousse le vice plus loin, concernant les notifications, ce que j'ai écrit passe dans le débug. Si je veux un push, il faut que je rajoute ça à la fin de mon code non? : , nil, "Push eco energie" Et si je veux rajouter un trigger de plus qui est une variable globale, je rajoute dans les conditions un {"Global", "Presence", "present"} j'ai bon?
Lazer Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 Non le Push c'est toujours le 3ème argument. Dans ton cas tu as laissé "", donc une chaine vide, donc pas de notification. Voilà : GEA.add( {{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, {"Time", "00:00", "00:31"}}, 30, "Push eco énergie", {"TurnOff", {id["Prise_Sapin"]}}, "Eco énergie prise OFF") Pour ta condition de variable globale, oui c'est ça. Attention à la terminologie, dans cette règle cette condition n'est pas un "trigger" (= déclencheur), mais juste une condition. Elle serait un trigger si elle était utilisé dans une règle à déclenchement instantané (avec une durée = -1)
Messages recommandés