HANSOLO Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 En mettant la condition avec les options... local condition = {"If",{"Global", "ETATALARME", "Active"}} GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{condition},{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}})
Moicphil Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 Merci Hansolo, j'avais déjà essayé...en vain ! >> [ERROR] 22:07:06: line 961: attempt to concatenate field '?' (a table value) Maintenant, en fait, je me demande si avec la fonction "if" il ne faut pas mini 2 conditions, moi j'en ai qu'une.
HANSOLO Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 local condition = {"If",{{"Global", "ETATALARME", "Active"}}} GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{condition},{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}}) Il manque aussi une série d'accolades pour la condition
Moicphil Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 Merci, j'ai rajouté la paire d'accolades manquantes... Toujours ce message d'erreur quand je mets la condition dans les options. Si je mets ma condition avant, Gea démarre mais de prise en compte du "if"
HANSOLO Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 local condition = {"If",{{"Global", "ETATALARME", "Active"}}} GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {condition,{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}}) Dernière correction: pas d'accolade pour utiliser condition dans la ligne GEA
Moicphil Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 Pas d'erreur, mais le "if" n'est pas pris en compte... D'aprés l'exemple de Steven ci dessous, la "condition" à l'air intégrée à l'option 'Days" J'ai aussi fais l'essai...pareil. Exemple de Steven : -- Si la lumière (69) est allumée un Lundi, Samedi ou Dimanche -- ET que "Vacances = 0" ET que "Absence" = 1 -- ET que la température (8) est inférieur à 18° local condition = {"If",{{"Global", "Absence", "1"},{"Global", "Vacances", "0"},{"Value-", 8, 18}}} GEA.add(69, -1, "La lumière est allumée", {{"Days", "Monday, Weekend"}, condition})
Moicphil Posté(e) le 23 août 2014 Signaler Posté(e) le 23 août 2014 Bon, j'ai trouvé : -Apparement la fonction "condition" est donc indexée sur "Days" Merci Hansolo pour ton aide. local condition = {"If",{{"Global", "ETATALARME", "Active"}}} GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{"Days", "All"}, condition, {"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}})
HANSOLO Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 Content que ça marche. bizarre quand même, days est une autre condition non liée àta condition pour moi. attendons le retour de maître GEA
Steven Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 Je confirme ce que dit Hansolo ?
Moicphil Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 Ok Je me remettrais dessus en supprimant l'option "days". J'ai du surement me planter sur une "accolade" hier soir.
PITP2 Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 Est il possible de mettre du code "classique" dans GEA pour utiliser la fonction intéressante de Scene qui s’exécute de façon cyclique. Sinon et pour ma culture comment créer une scene qui se répète toutes les minutes par exemple en lua ?
JM13 Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 Je ne sais pas ce que tu veux faire exactement car tout est possible ...mais parfois cela peut être dangereux !! Sinon, ci-dessous un petit code (qui vient de Lazer je crois) que j'aime bien car il s'exécute au début de la minute, heure... --[[ %% properties %% autostart %% globals --]] -- -------------------------------SCENE SETTINGS -------------------------------- local seconde = os.date('%S') if tonumber(seconde) ~= 0 then local delta = 60 - seconde fibaro:debug("Time is " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...") fibaro:sleep(delta*1000) end local hour = os.date('%H') local day = os.date('%d') while true do -- --------------------- Actions to perform every new minute --------------------- fibaro:debug('New minute') -- ICI le code -- -----------------------Actions to perform every new hour ---------------------- local newhour = os.date('%H') if newhour ~= hour then fibaro:debug('New hour') -- ICI le code hour = newhour end -- -----------------------Actions to perform every new day ----------------------- local newday = os.date('%d') if newday ~= day and tonumber(os.date('%M')) >= 1 then fibaro:debug('New day') -- ICI le code day = newday end fibaro:debug('Last run : ' .. os.date('%H:%M:%S')) fibaro:sleep(60*1000); -- Sleep 1 minute end
JM13 Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 Au fait Steven, il existe la fonction {Repeat} dans GEA mais il n'existe pas la fonction {Une seule fois} Je m'explique... Si je veux pendant une période de 15 minutes lancer une action UNE SEULE FOIS en cas de présence, je mets la commande ci-dessous GEA.add(id["PRESENCE_ENTREE"], -1, "", -- Quand je détecte quelqu'un dans l'entrée { {"Time", "06:00", "06:15"}, {"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, -- Seulement les jours de la semaine travaillés {Faire une action} -- Faire une action une seule fois }) mais l'action se fait à chaque détection de présence. Je peux faire ça aussi GEA.add({"Global", "", ""}, 30, "", { {"Time", "06:00", "06:15"}, {"If",{{"Value+",id["PRESENCE_SALON"],-1}}}, -- Quand je détecte quelqu'un dans l'entrée {"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, -- Seulement les jours de la semaine travaillés {Faire une action} }) mais c'est pareil alors je joue avec la durée (entre 6:10 et 6:15) et la fréquence (30s -> 60s) ...mais bon !! J'arrive très bien à m'en sortir avec une variable globale mais cela me gène un peu de créer plusieurs variables globales pour ça !!! Aurais-je loupé qqles chose ? as-tu une idée ?
Invité chris6783 Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 Je rebondis sur le dernier post car gea me sert énormément (merci Steven). Sur ma motorisation de portail j ai une sortie voyant qui clignote lors des manoeuvres et indique ouvert/fermé. Un module universel fibaro surveille le voyant et gea surveille le module. Gea envoi des push et declanche des photos via les caméras. Le clignotement saturait mon réseau car gea allume aussi les lumières la nuit lorsque le portail manoeuvre. Donc j ai opté pour une variable globale que gea value àchaque clignotement et ensuite gea surveille la variables pour les push et les autres actions. En passant par la variable je passe de 20 push par manoeuvre a 3 ou 4 mais pouvoir limiter de façon native àune réaction gea par tranche de 30 secondes serait pratique. Bien sûr cela marche pour les contrôles non immédiats mais pour prendre les images gea est en mode surveillance instantanée. Bravo en tout cas pour ce script qui démontre ce qu'une communauté peut construire autour de membres compétents et genereux comme Steven (sans oublier les autres, mais làon parle de GEA)
JM13 Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Exemple avec une variable globale ...pour ne faire une action qu'une seule fois GEA.add(id["PORTE_ENTREE"], -1, "", -- Quand la porte d'entrée s'ouvre on dit : "WELCOME au new comer" une fois par jour { {"If", { {"Global", "Sortie", "0"}, -- Si la variable Sortie est 0, cela veut dire que qql'un est en train d'entrer {"Global", "WD_JM", "TRUE"}, -- Si c'est le Wifi Device de JM est détecté {"Global", "Welcome_JM", "OK"} -- Si Welcome_JM est OK, on pourra dire le message } }, {"Time", "17:00", "23:00"}, -- Le soir uniquement {"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, -- Seulement les jours de la semaine travaillés {"Global", "SONOS_Num_Message", "8"}, -- Message "Bonjour JM" dans la salon {"VirtualDevice", id["SONOS"], 1}, -- en TTS -- {"VirtualDevice", id["PUSH"], 10}, -- Un petit PUSH aux parents si le gosse est àla maison {"Global", "Welcome_JM", "NOT_OK"} -- RAZ pour ne dire le message qu'une seule fois par jour }) GEA.add({"Global", "Welcome_JM", "NOT_OK"}, 1, "", -- Gestion de la variable "Welcome_JM" pour ne dire le message qu'une fois par jour { {"Time", "23:01", "23:02"}, {"Global", "Welcome_JM", "OK"} -- On ré-autorise après 22h00 (RAZ de la variable) }) mais cela oblige àpasser par une variable globale
Steven Posté(e) le 28 août 2014 Auteur Signaler Posté(e) le 28 août 2014 Le problème est le suivant : Chaque fois que le détecteur est activé en mode instantané, la HC2 relance une instance de GEA qui est donc déconnectée des autres. Le seul moyen de faire discuter 2 scènes différentes est de passer par des variables globales ou un module virtuel. Vu l'ampleur du projet, je suis entrain de réfléchir s'il ne serait pas intelligent de lui greffer un module virtuel qui permettrait : 1. De tout suspendre 2. Affiche les X dernières tâches exécutées 2. De suspendre uniquement une tache (demandé par @Shyrka973 il y a mille an) 3. De définir un MaxPar* et un MinPar** * Permettrait d'avoir une tâche qui s’exécute une fois maximum par tranche de X secondes ** Permettrait d'avoir une tâche qui s'exécute au moins une fois toutes les X secondes même si la condition n'est pas remplie Mais bon, tout cela demande du temps et de la patience.
Steven Posté(e) le 28 août 2014 Auteur Signaler Posté(e) le 28 août 2014 Cherchez l'erreur sur ma programmation foireuse de simulation de présence local vac = {"Dates", "14/08/2014", "27/08/2014"} local estVac= {"If", {{"Global", "Chauffage", "VACANCES"}}} GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise", "Sunrise"}} ) GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+120", "Sunrise+120"}} ) GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "01:04", "01:04"}} ) GEA.add( id["LAMPE_ENTREE"], 5*30, "Simul : extinction entrée #time#", {estVac, vac, {"turnOff"}} ) GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+5", "Sunrise+5"}} ) GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+90", "Sunrise+90"}} ) GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "01:06", "01:06"}} ) GEA.add( id["LAMPE_ESCALIER"], 2*30, "Simul : extinction entrée #time#", {estVac, vac, {"turnOff"}} ) GEA.add( id["LAMPE_NOLAN"], 30, "Simul : allumage Nolan #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+6", "Sunrise+6"}} ) GEA.add( id["LAMPE_NORA"], 30, "Simul : allumage Nora #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+16", "Sunrise+16"}} ) GEA.add( id["LAMPE_NOLAN"], 10*30, "Simul : extinction Nolan #time#", {estVac, vac, {"turnOff"}} ) GEA.add( id["LAMPE_NORA"], 15*30, "Simul : extinction Nora #time#", {estVac, vac, {"turnOff"}} ) GEA.add( id["TV"], 30, "Simul : allumage TV #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+60", "Sunrise+60"}} ) GEA.add( id["TV"], 60*30, "Simul : extinction TV #time#", {estVac, vac, {"turnOff"}} )
JM13 Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Steven, si je peux me permettre en tant que"Beta testeur" je pense que tu raisonnes en informaticien et non en automaticien ! Il y a une condition pour lancer une instance GEA ... il manque tout simplement une condition pour arrêter l'instance. Le condition pouvant être la réussite de la réalisation de la dites tâche. (Sorte de bascule RS) Je pense que c'est plus facile àdire (même sur un clavier de smartphone) qu'àcoder ...mais c'est peut être une piste.
JM13 Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Ton post "cherchez l'erreur" ... c'est un jeu?
Steven Posté(e) le 28 août 2014 Auteur Signaler Posté(e) le 28 août 2014 Non, un cas réel, je me suis planté dans la programmation de ma simulation et l'erreur est tellement grosse que je suis sà»r que tu vas peiner à trouver. Pour revenir aux posts précédents, je suis d'accord avec toi mais cela ne répond qu'à ta problématique qui est d'effectuer une action UNE seule fois. Ou là , en effet, c'est assez simple à gérer. Par contre dans le cas demandé qui serait de n'effectuer une action que toutes les X secondes maximum, il faut stocker l'heure de la dernière exécution et la comparer ce que GEA ne fait pas actuellement. Et s'il faut connaitre l'heure d’exécution, il faut être capable de la stocker dans un environnement partagé.
JM13 Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Ok, on va voir pour la GRôôsse erreur. .. Au fait, quels sont les symptômes?
Krikroff Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Pourquoi ne pas migrer complètement GEA dans un module virtuel ? Envoyé de mon iPhone àl'aide de Tapatalk
Steven Posté(e) le 28 août 2014 Auteur Signaler Posté(e) le 28 août 2014 @Krikroff Parce qu'on perdrait les déclenchements instantanés Par contre, on gagnerait le json, le http et l'environnement partagé. @JM13 Incohérence
Krikroff Posté(e) le 28 août 2014 Signaler Posté(e) le 28 août 2014 Tu peux je pense gérer les déclenchements instantanés avec quelques lignes dans une scène et une variable ... Envoyé de mon iPhone àl'aide de Tapatalk
Steven Posté(e) le 28 août 2014 Auteur Signaler Posté(e) le 28 août 2014 C'est un peu ce que je voulais pas. A l'origine une seule scène permettait de tout gérer, là , il faudrait, une scène, un module virtuel et une variable globale. Je trouve GEA déjà assez, voir trop, compliquer pour les utilisateurs. Mais c'est vrai que cela ouvrirait encore d'autre perspective.
Messages recommandés