Aller au contenu

Recommended Posts

salut 

 

juste un détail sur le Group

 

quand je rajoute une notification je la reçois tout les 5 seconde

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

Remets le code que tu utilises quand tu recois les notifs toutes les 5 secs.

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai avoir compris le probleme

 

autant de notification qu'il y a de lampe a éteindre dans le groupe

Partager ce message


Lien à poster
Partager sur d’autres sites

exact puisque tu fais un for i = 1, #groupelampes, do...donc a chaque fois que ta ligne GEA est vraie tu recevras les notifs, ta ligne GEA etant dans la boucle for-end

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai un petit doute avec les -1 dans cette ligne, vu que la ligne se trouve dans une boucle for

GEA.add ({"Value", ID["LAMPE_SALON"], 1}, -1, "ok", {{"turnOff", groupeLampes[i]}})

j'aurais mis ceci

GEA.add (ID["LAMPE_SALON"], 1, "ok", {{"turnOff", groupeLampes[i]}})

car on  n'est pas à  30sec près. 

attention : ID ou id ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo:

 

Le -1 dans la boucle ne doit pas poser de problèmes normalement

 

@971jmd:

 

L'intéret de la boucle sur le groupe comme t'a proposé @Jojo est valable si tu as besoin de ce groupe à  plusieurs reprises dans GEA, cela t'évite d'ajouter un ID à  chaque ajout d'une nouvelle lampe ou encore d'avoir à  écrire plusieurs fois de lignes GEA avec 50 turnOff. Si ton groupe n'est que de 3 lampes alors tu peux te contenter des turnoff successifs, ce n'est pas trop dur à  suivre, mais sinon c'est vrai que c'est lourd:

-- Tout eteindre quand absent depuis 30s
GEA.add({"Global","ETATMAISON","ABSENT"}, 30 , "Arret de tous les ECLAIRAGES" , {{"turnOff",id["ECL_GARAGE"]},{"turnOff", id["ECL_ESC_SOUSSOL"]},{"turnOff", id["ECL_BUANDERIE"]},{"turnOff", id["ECL_ESC_HALL"]}})
-- Ou identique en instantanné
GEA.add({"Global","ETATMAISON","ABSENT"}, -1 , "Arret de tous les ECLAIRAGES" , {{"turnOff",id["ECL_GARAGE"]},{"turnOff", id["ECL_ESC_SOUSSOL"]},{"turnOff", id["ECL_BUANDERIE"]},{"turnOff", id["ECL_ESC_HALL"]}})

-- Tout Allumer quand present depuis 30s
GEA.add({"Global","ETATMAISON","PRESENT"}, 30 , "Allumage de tous les ECLAIRAGES" , {{"turnOn",id["ECL_GARAGE"]},{"turnOn", id["ECL_ESC_SOUSSOL"]},{"turnOn", id["ECL_BUANDERIE"]},{"turnOn", id["ECL_ESC_HALL"]}})
-- Ou identique en instantanné
GEA.add({"Global","ETATMAISON","PRESENT"}, -1, "Allumage de tous les ECLAIRAGES" , {{"turnOn",id["ECL_GARAGE"]},{"turnOn", id["ECL_ESC_SOUSSOL"]},{"turnOn", id["ECL_BUANDERIE"]},{"turnOn", id["ECL_ESC_HALL"]}})

Une autre solution te permettant de gérer un groupe de lampe à  part sans avoir à  tout réécrire à  chaque fois et où il est facile d'ajouter/retirer une lampe dans le groupe:

-- Définition d'un fonction d'allumage pour un groupe de lampes
-- order: type Number. 1 = Allumer / 0 = Eteindre
function groupeLampes(order)
    -- Table contenant les id des lampes à  gérer
    local lampes = {id["ECL_GARAGE"],id["ECL_ESC_SOUSSOL"],id["ECL_BUANDERIE"],id["ECL_ESC_HALL"],id["ECL_CUISINE"],id["ECL_SAM"],id["ECL_SALLETV"]}
    
    local power = {"turnOff","turnOn"}
    for i=1 , #lampes do
        fibaro:call(lampes[i],power[order+1])
    end
end

    
GEA.add({"Global","ETATMAISON","PRESENT"}, 30 , "Allumage de tous les ECLAIRAGES" , {{"Function", function() groupeLampes(1) end }})
GEA.add({"Global","ETATMAISON","ABSENT"}, 30 , "Arret de tous les ECLAIRAGES" , {{"Function", function() groupeLampes(0) end }})

Ainsi quand tu veux allumer ou éteindre ton groupe tu utilises la fonction: Tu ne reçois que 1 notification et si tu as de multiples conditions (et lignes GEA) où tu as besoin du groupe c'est plus lisible. De plus ajouter une lampe au groupe est moins contraignant.

 

C'est une solution parmi tant d'autres....

 

Nicolas

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

oui Nikko, mais la question que je me posait avec le -1 dans la boucle for, c'est qu'il ne ferait pas la boucle, il exécuterait directement l'action, mais avlors pour quelle valeur de i, et je crains pas pour toutes les valeurs définies dans la boucle ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans ce cas on peut vérifier:

 

Un GEA avec Juste ce code (plus les définitions id). Ici 476 est un PIR

local groupeLampes = {id["ECL_CUISINE"], id["ECL_HALL"],id["ECL_ESC_HALL"], id["ECL_SALLETV"]}
for i=1 , #groupeLampes do 
 GEA.add (476, -1, "Start ", {{"turnOn", groupeLampes[i]}})
end

Et au lancement de GEA:

 

post-376-0-39076300-1450287944_thumb.png

 

Lorsque Mon PIR m'a détecté une nouvelle instance s'est lancée, avec la définition des 4 ID et j'ai bien reçu 4 notifs.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, super mais alos GEA est encore plus puissant que je le pensais. Je pensais qu'en cas de -1 il allait exécuter uniquement la ligne concernée par le -1.

Mais alors comment il gère les -1 ? Dans ton exemple, il est obligé de passer dans les 4 lignes ?

Partager ce message


Lien à poster
Partager sur d’autres sites

En fait quand une instance est lancée en instantanée, toutes les lignes GEA sont parcourues, mais ne sont gardées que celles dont la première condition est l'id (ou vg) déclencheur de la scène.

Ensuite évaluation de de chaque entrée gardée puis exécution le cas échéant.... C'est ce que je comprend au code donc il n'est pas impossible que les foudres de Steven ou autre s’abattent sur moi..... :)

Partager ce message


Lien à poster
Partager sur d’autres sites

en effet c'est la seule logique qui peut expliquer ton exemple

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour a tous

 

j'ai un probleme a résoudre:

 

je cherche à  éteindre une lampe dans un temps défini :  Si variable = 1 alors  Off Lampe

EA.add({"Global", "temps", "1"}, -1, "", {{{"turnOff", id["lampe"]}})

jusque la pas de soucie.

 

Mai je cherche a définir le temps,

modifier le  -1    (........", "1"}, -1, "", {{.....)  avec un VD, n'est pas possible

 

alors pouvez vous m'aider à  crée un VD compte a rebours, qui passera la variable temps à  1

 

post-112-0-38693900-1450323655_thumb.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

@nikko et @jojo

Autre solution pour eteindre toutes les lampes, c'est un petit VD avec une fonction recherche sur le nom des lampes, il est sur le forum.;je l'utilisais avant le demenagement,

Faut juste appeler toutes ses lampes avec un prefixe : ECLAIRAGE ou autre..et un appui sur le bouton avec GEA.

Inconvenient, contrairement à  vos soluces, encore un VD supplementaire.

 

@971jmd

Heuuu tu nous la refais stp ? ;-) pour definir la duree tu met à  la place de -1 : 30, 60, 5*60..

 

Ta variable temps devrait passer à  1 en fonction de quoi ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité chris6783

Il me semble qu il y avait aussi un bout de lua qui passait en revue tous les modules et eteignait toutes les lampes en les reconnaissant via le devicetype.

De mémoire je crois que Steven avait partagé ça.

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite

Oui je le refait IoI

.pour definir la duree tu met àla place de -1 : 30, 60, 5*60.. Sauf que nous ne pouvons pas changer ce derniers sur notre smartphone ou tablette..

L'idée est de changer àtout moment le temps de déclenchement du variable, (comme un timers)

Il exits AlarmeGEA de Steven, mai ce dernier fonctionne le temps horaires (allumé ou éteindre la salon á 18h30)

Dans le cas de AlarmeGEA il faut crée deux VD ON et OFF

Ce que cherche àréaliser comme code est:

Si value. Walplug = +10w alors démarre un compte á rebours pour 1mm

GEA({value+ id walplug],10} , 1*60 , ..........

Mai nous ne pouvons pas changer le 1*60 autrement que dans le code GEA

Partager ce message


Lien à poster
Partager sur d’autres sites

non testé, mais essaye ceci (au début de tes instructions GEA, après la définition de tes id

temps = tonumber(fibaro:getGlobal("temps"))

ensuite où tu veux

GEA.add(la/les condition(s) que tu veux ou true, temps, "", {{{"turnOff", id["lampe"]}})

mais je ne mettrais pas d'instantané (temps = -1)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Si j'ai bien compris le fonctionnement de GEA, je doute que cette solution fonctionne sans redémarrer la scène...

Curieux de savoir si ça marche !!

 

Le problème est qu'il faut pouvoir avoir une variable durée qui évolue pour le test de temps...

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai compris @971jmd

 

La soluce de jojo avec la variable non ? variable de temps que tu modifies avec un VD

Partager ce message


Lien à poster
Partager sur d’autres sites
pour mieux expliqué mon idée, je me permet de re poster le sujet:
 
Pensé vous qu'il est possible de créée une VD compte-a-rebour
paramétrable depuis note tablette ou smartphone  
 
un bouton + / -  : Minute
un bouton + / -  : heure
un bouton : validé
 
le principe:  si je valide 10mm alors dans 10mm passe une variable temps de 0  à   1
 
 
Dans GEA actuellement, si on souhaite éteindre un WP dans 10mm:
GEA.add(........ , 10*60, "", {{"turnOff", id["wallplug_ch"]}})

le problème est que si on souhaite modifier ce temps de 10mm à  25mm il nous faut rentrée dans GEA et le modifier

 
 
l'idée est: qu'à  partir de notre téléphone ou tablette on puisse changer à  tout moment ce temps 
 
-----si wallplug_ch plus de 10w alors valide le bouton de notre VD compte-a-rebour  préalablement réglée su 10mm
GEA.add({"power", "wallplug_ch", "10"} , -1, "", {{"VirtualDevice", <id,_module>, valide}})
-----si variable temps = 1    alors   off    wallplug_ch        et  repasse la variable Temps à  0
 
GEA.add({"Global", "temps", "1"} , -1, "", {{"turnOff", id["wallplug_ch"]}, {"Global", "temps", "0"}})

Partager ce message


Lien à poster
Partager sur d’autres sites

créer un VD comme tu le pense, c'est toujours possible.

Mais as-tu validé la solution que je t'ai proposée pour récupérer la vlauer d'une variable pour l'utiliser comme temps de déclenchement dans GEA ?

C'est la première chose àfaire, ensuite, le VD pour rendre ça encore plus sympa

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui mai je ne suis pas parvenu àle faire fonctionner

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir à  tous,

 

J'ai un soucis, dans l'optique de ne plus avoir à  savoir qu'elle ID de portables correspond a qui, je me suis fait une mécanique (comme certains), qui est celle çi :

  GEA.add({{"Global", "EtatPortail", "open"}, {"Global","Maison","Absent"}}, -1, "Portail ouvert à  #time# le #date#", {{"Portable", MobileId["PHONE_BERNARD"]}, {"Portable", MobileId["PHONE_NATHALIE"]}})

Mais, autant je reçois certaines notifications, autant sur ce genre de ligne, je n'ai pas d'erreurs GEA, mais je ne reçois pas de notifications.

Pouvez-vous m'aider

 

La partie Local est bien déclaré et fonctionnelle, par exemple cette ligne fonctionne :

  GEA.add({"Global", "Maison", "Absent"}, -1, "Mode absence le #date# à  #time#", {{"Portable", MobileId["PHONE_BERNARD"]}})

D'avance merci

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo

À quel moment le décompte commence, pour je moment j'ai cliquer sur 1mm et valider, je voie bien les variable mai rien ne bouge

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites
local timer = tonumber(fibaro:getGlobalValue('TIMER'))
GEA.add( true , timer , "" ) 

Lors de la lecture de la ligne GEA, la variable timer sera remplacé par la valeur de la VG. Mais la ligne GEA.add n'est lue qu'une fois. A ce moment les tables sont céées et les valeurs de temps sont figées.

Ceci ne fonctionne donc pas (je ne sais pas si c'est à  ça que tu pensais @Jojo)

 

@971jmd:

Si tu veux voici un VD écrit très vite fait: un bouton +30s, 1 bouton -30s, 1 bouton ON et 1 bouton OFF. Tu crées une variable globale TRIGGER

 

Lors tu bascules le VD sur ON le décompte se fait et quand on arrive à  0  alors TRIGGER bascule sur 1. Ensuite tu peux baser tes condition GEA sur cette VG:

 

post-376-0-42187700-1450461439_thumb.png

-- A la fin du timer si lampe allumée on éteint
GEA.add({{"Global","TRIGGER", 1},id["ECL"]}, -1 , "" , {{"turnOff",id["ECL"]}})

Attention ce n'est pas optimisé (décompte toutes les 3s)  c'est juste pour voir si ça te convient. Je t'avoue que je n'a fait que 1 ou 2 essais sous GEA (exemple au-dessus)....

Compte_a_rebours.vfib

Partager ce message


Lien à poster
Partager sur d’autres sites

@ niko

Merci, dès que je rente je teste tout ça

Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×