PITP2 Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 Alors pourquoi ceci ne fonctionnerait t il pas par rapport à ce que l'on vient de dire ? (la lumière passe à 25 % malgré que la tele soit allumée et donc à "oui") Hormis le "IF" qui est placé à la fin et non au début des actions ... local luminosite_faible_salon_TV_mode_non = {"If",{{"Value-", id["LUMINOSITE_SALON"], 50},{"Global!", "M_TV", "oui"}}} local TV_mode_non = {"If",{{"Global!", "M_TV", "oui"}}} GEA.add(id["CP_SALON"], -1, "", {{"Value", id["LUMIERE_AMBIANCE_SALON"], 25}, luminosite_faible_salon_TV_mode_non}) local arretlumambiancesalon = GEA.add({{"Value", id["CP_SALON"], 0}}, 2*60, "", {{"turnOff",id["LUMIERE_AMBIANCE_SALON"]}, TV_mode_non})
pepite Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 ben pour moi ca devrait marcher ;-), plus d'erreur de syntaxe ;-) Ou sans les "IF" : local luminosite_faible_salon_TV_mode_non = {"Value-", id["LUMINOSITE_SALON"], 50}, {"Global!", "M_TV", "oui"} local TV_mode_non = {"Global!", "M_TV", "oui"} GEA.add({id["CP_SALON"], luminosite_faible_salon_TV_mode_non}, -1, "", {{"Value", id["LUMIERE_AMBIANCE_SALON"], 25}}) local arretlumambiancesalon = GEA.add({{"Value", id["CP_SALON"], 0}, TV_mode_non}, 2*60, "", {{"turnOff",id["LUMIERE_AMBIANCE_SALON"]}})
Steven Posté(e) le 27 avril 2015 Auteur Signaler Posté(e) le 27 avril 2015 @PIPT2 Pour la suppression du IF .. c'est ICI .. dans ton cas le {"Global!", ...} mis dans la partie action sans IF est juste ignoré car GEA ne le connais pas, il connait juste "Global" en tant qu'action. Comme "Global!" est une condition, il doit être dans un IF si tu le met dans les options (vieille méthode) ou sans le IF si tu le met côté conditions (nouvelle méthode). @pepite Tu peux mettre GEA.add( {100, 134, 162} , ..., {{"turnOff"}}) mais attention seul la première condition, soit le 100, sera utilisé pour le turnOff. J'ai encore pas mal de bug sur la réecriture mais j'aimerais pouvoir prendre en compte la demande suivante : GEA.add(.........., {{"turnOff", {100, 134}}} Enfin, j'avance mais à pas de fourmi car j'ai un réel manque de temps à la maison.
flechg Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 @flechg, on va le faire en plusieurs étapes si tu veux bien. Déjà on va traiter la fermeture auto de ta porte de garage. En fait le FGRM remonte une valeur entre 0 et 100 alors que dans ta syntaxe la condition attendue est plutot "0 ou 1" Peux tu essayer ceci comme code (je ne l'ai pas testé) ? GEA.add({"Value+", id["PORTE_GARAGE"], 90}, 15*60, "La porte du garage est ouverte depuis plus de 15 minutes", {{"close"}, {"repeat"}}) Merci PITP2 ce code fonctionne par-contre si tu peux m expliquer a koi correspond le 90 ce serait sympas j attend la suite quand tu peux merci encore pour ton aide
jojo Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 le 90 (En Belgique, 80-10 en France ) correspond au % de fermeture ou d'ouverture de la porte du garage. Il me semble que le {"repeat"} peut être supprimé Pour la suite, il faut annuler la fermeture automatique prévue si le WP est allumé Voici donc le code (sans le repeat) local autoClose = GEA.add({{"Value+", id["PORTE_GARAGE"], 90}, {"Value", id["WallPlus"], 0}}, 15*60, "La porte du garage est ouverte depuis plus de 15 minutes", {{"close"}}) GEA.add(id["WallPlug"], 5*60, "On traivaille dans l'atelier, donc pas de fermeture auto de la porte", {"StopTask", autoClose}) la première action est mise dans une variable autoClose. J'y ai rajouté la condition que le WP devait être éteint (sinon si tu travailles dans ton atelier avec la lumière, la porte se refermera) En écrivant ces lignes, je me rends compte qu'on n'a peut être pas besoin de la 2° condition : On ferme la porte du garage après 15 que le le WP est éteint. La 2° condition pourrait quand-même être utile dans le cas suivant : la porte du garage est ouverte depuis 5 min, lampe éteinte, puis j'allume la lampe.Est-ce que GEA va arrêter le compteur et ne pas fermer la porte => à tester
PITP2 Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 Merci Steven pour les infos je vais modifier mes lignes avec la nouvelle méthode alors. @flechg, comme le dit Jojo cela correspond au % d'ouverture / fermeture de ta porte de garage mais tu vas me demander pourquoi pas 100% ou 0% alors ? et bien parce que cela n'est presque jamais le cas il y a tjrs quelques pourcents en moins ou en plus ... chez moi par exemple l'ouverte totale est à 98 % donc avec 90% tu es certain que ta condition soit valide.
pepite Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 merci steven ;-) .. fourmi peut-etre mais le resultat va certainement en valoir la peine ;-), courage @jojo : et si on l'ecrivait plutot comme ca non ? qu'en penses tu ? Si le WallPlug est allumé, la ligne ne sera pas executee par GEA ;-) GEA.add({id["WallPlug"], {"Value+", id["PORTE_GARAGE"], 90}}, 15*60, "La porte du garage est ouverte depuis plus de 15 minutes", {{"Inverse"}, {"close"}})
jojo Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 @pepite, ça me semble en effet encore plus optimal as-tu testé @flechg ?
PITP2 Posté(e) le 27 avril 2015 Signaler Posté(e) le 27 avril 2015 je poursuis avec mes histoires de condition qui semblent ne pas être prises en compte .. d'après vous est ce que cela fonctionne en utilisant le -1 Ma traduction littérale .. Si Luminosité salon inférieur à 50 ET variable globale TV à non ET capteur présence salon déclenché alors .... Et l'analyse de ces conditions ne sera effectuée que lors du changement d'état du capteur de présence ? J'ai bon ? GEA.add({{"Value-", id["LUMINOSITE_SALON"], 50},{"Global", "M_TV", "non"}, {id["CP_SALON"]}}, -1, "", {{"Value", id["LUMIERE_AMBIANCE_SALON"], 25}})
Steven Posté(e) le 27 avril 2015 Auteur Signaler Posté(e) le 27 avril 2015 CP_SALON doit être la première condition et être dans l'en-tête. Après c'est tout bon 😀
PITP2 Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 Merci Steven pour ton aide, si jamais tu as besoin de Beta pour tester ta nouvelle version et bien je crois que je suis ton homme 1
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 donc le -1 (ou la condition de temps) ne s'applique qu'àla première condition ?
PITP2 Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 C'est ce que j'ai compris aussi Jojo
pepite Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 Bonjour messieurs, J'ai compris cela aussi. De même pour les ACTIONS si on ne précise pas l'ID, steven m'a précisé cela : GEA.add( {100, 134, 162} , ..., {{"turnOff"}}) mais attention seul la première condition, soit le 100, sera utilisé pour le turnOff.
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 aux admin : il faudrait peut-être rouvrir (pour Steven uniquement ?) la page de son tuto GEA afin qu'il puisse la mettre à jour avec les dernières nouveautés qu'il développe ? Perso, cette page, c'est ma bible. Je pense par exple à l'option "Time", où on peut spécifier Sunrise ou Sunset, et avec un offset (génial ), mais ce n'est pas repris dans la bible => super boulot , non exploité ? idem pour les conditions de temps qui ne s'appliqueraient qu'à la première conditions, et pour les actions ?
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 j'ai une question par rapport à la gestion du temps d'une condition. Voici en exemple cette instruction : GEA.add (DeviceID["LUM_HALLNUIT_SDJ"], 30, "", {{"turnOff"}}) SI la lumière "LUM_HALLNUIT_SDJ" est allumée pendant plus de 30s, l'éteindre. Dans la réalité, elle s'éteint très souvent avant les 30s, parfois après 5s. Je sais que le script tourne toutes les 30s. Je me serais alors attendu que la lumière s'éteigne dans un délais de 30 à 60s. 0s - démarrage script 10s - allumage lampe 30s - le script tourne à nouveau : => est-ce que la lampe est allumée depuis 30s ? (non, elle est allumée depuis 20s) => je ne fais rien. 40s - cela fait 30s que la lampe est allumée, mais il ne se passe rien car le script n'est pas en train de tourner. 60s - le script tourne à nouveau : => est-ce que la lampe est allumée depuis 30s ? (oui, elle est allumée depuis 50s) => je l'éteint C'est comme si GEA calculait : est-ce que d'ici les 30 prochaines secondes je devrai faire qqch, alors je le fais déjà . Est-ce que ma compréhension est correcte ?
pepite Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 steven me corrigera au cas où ;-) GEA pour moi tourne toutes les 30s - le temps de traitement, donc toujours < 30s, donc 2 cycles < 60s GEA calcule bien la durée, par exemple, j'utilise ca pour des tests hihhihi et me faire la main et cela fonctionne tres bien, ma durée est bien de 5 mins, j'ai verifie au début avec un chrono lol pour essayer de comprendre, et ma frequence par defaut est bien 30s local halogene = GEA.add(id["WP_HALOGENE"], 5*60,"Extinction #name# de #room# après 5 mins à #time# le #date#",{{"VirtualDevice", id["VD_SMSFREE"], 4},{"turnOff", id["WP_HALOGENE"]}, {"Repeat"}}) GEA.add({presence},30,"Allumage Halogène SAM le #date# à #time#", {{"Days", "All"},{"Time", "7:42", "7:43"},{"Time", "22:05", "22:06"}, {"RestartTask", halogene},{"VirtualDevice", id["VD_SMSFREE"], 3}, {"turnOn", id["WP_HALOGENE"]}})
Steven Posté(e) le 28 avril 2015 Auteur Signaler Posté(e) le 28 avril 2015 GEA n'est pas précis dans les heures car il fonctionne par cycle de X secondes. Pour savoir si la lampe est allumée, il calcule ainsi : si (conditions respectées ET (nombre de cycle * duree d'un cycle >= secondes)) alors on active. Dans ton cas, si tu allume ta lampe à la 29sec, GEA va la considérée comme allumée depuis 30 secondes car dès le prochain cycle on aura Est-ce que la lampe est allumée : OUINombre de cycle : 1Duree d'un cylce : 30secSecondes souhaitée : 30 sec1 * 30 >= 30 = OUI GEA ne stocke aucune heure, il stock le nombre de cycle pour lequel les conditions éteints correctes. Dès qu'une condition n'est plus remplie, il repart à 0.Extrait du code : entry[GEA.keys["NBRUN"]] = 0 entry[GEA.keys["TOTALRUNS"]] = 0 entry[GEA.keys["DONE"]] = false entry[GEA.keys["OK"]] = false ... if ( GEA.source["type"] == "autostart" and ((entry[GEA.keys["NBRUN"]] * GEA.checkEvery) >= entry[GEA.keys["SECONDES"]]) ... C'est bien pour cela que GEA est précis mais à plus ou moins 30 secondes, c'est parce que les événements qui intervienne pendant un cycle sont "lue" à la fin d'un cycle. Le seul cas vraiment précis est, normalement, les détecteurs de présence car ils ont une donnée exploitable qui est la lastBreached (date/heure) de la dernière alarme. Sinon pour les autres modules, il n'y a pas de date/heure de la dernière modification viable.Voili voilà 1
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 merci pour cette explication très précise. Donc si je veux être sûr que ma lampe reste allumée 30s, je dois lui demander 30s+ (durée cyle - 1 =29)s = 59s
PITP2 Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 Encore une fois merci Steven pour tes lumières c'est vraiment sympa
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 1 * 30 >= 30 = OUI et si on mettais dans le code 1*30 > 30 (">" au lieu de ">=") ne serait-ce pas plus simple ? Comme ça on sait que la durée désirée sera toujours "au moins" respectée et un dépassement maximum possible de la durée du cycle - 1 sec ? Juste une idée en l'air. 1
flechg Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 bonsoir a tous tout d'abord merci pour vos reponses et votre aide qui me permet d avancer doucement dans gea je n es pas pu vous répondre avant car je n étais pas chez moi désolé pour revenir sur le chmilblic @Pepite le code ne marche pas mais ne manque t il pas le "1" qui justifie que le wallplug est allumé ??? GEA.add({id["WallPlug"], {"Value+", id["PORTE_GARAGE"], 90}}, 15*60, "La porte du garage est ouverte depuis plus de 15 minutes", {{"Inverse"}, {"close"}}) @jojo le code ne fonctionne pas rien ne se passe local autoClose = GEA.add({{"Value+", id["PORTE_GARAGE"], 90}, {"Value", id["WallPlus"], 0}}, 15*60, "La porte du garage est ouverte depuis plus de 15 minutes", {{"close"}}) GEA.add(id["WallPlug"], 5*60, "On traivaille dans l'atelier, donc pas de fermeture auto de la porte", {"StopTask", autoClose}) parcontre dans le debug j ai ca si cela peut aider [DEBUG] 22:02:06: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:02:36: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:03:06: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:03:36: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:04:06: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:04:36: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:05:06: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:05:36: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] [DEBUG] 22:06:06: [ Value [238|Volet Salon] > 90 ] Check : Arrêtée (ID:4) [close] [If..] en tout cas merci encore @jojo@pepite et @PITP2 flechg
flechg Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 @jojo mille excuses ton code fonctionne je me suis trompé en collant le code
jojo Posté(e) le 28 avril 2015 Signaler Posté(e) le 28 avril 2015 je suis vexé à mort Je meurs !!! A Dieu tout le monde et n'oubliez pas de prendre votre HC2 avec une V4.x stable dans votre tombe, histoire qu'on se mare un peu là haut ... 1
Messages recommandés