soulac Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 bon je reviens vers vous : quand je mets la condition de temps cela fonctionne avec le code suivant: GEA.add({"Time", "14:17", "14:18"}, 30, "",{"VirtualDevice", 305, 9}) maintenant je souhaite rajouter la condition JourChome avec le code suivant : GEA.add({"Global","JourChome", "NON"}, 30, "", {{"Time", "14:23", "14:24"}, 30, "",{"VirtualDevice", 305, 9}} ) mais cela ne fonctionne pas. En GEA V5 mon code est le suivant : GEA.add(JourTravail, 30, "" , {{"Time","7:20","7:21"},{"VirtualDevice", 305, 9}}) -- GEA V5 avec en local local JourTravail = {"Global", "JourChome", "NON"}
pepite Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 @MAM78 J'ai compris, je te parle de la propriété Property qui retourne bien la valeur du bon Label. Peux pas tester avec 2 labels et en declenchements instantanés pour le moment Tu peux essayer cela dans config() stp ? GEA.options.trigger = { name = "Trigger", getValue=function(value) if (not value)then if (GEA.source.type == "autostart") then return "autostart" elseif (GEA.source.type == "global") then return "Global["..GEA.source.name.."]" elseif (GEA.source.type == "property") then return "Property[" ..GEA.source.deviceID .."]" elseif (GEA.source.type == "event") then return "Event["..GEA.source.event.data.deviceId.."]" end elseif (value) then if (GEA.source.type == "property") then return GEA.source.propertyName == value end end return "other" end }, GEA.add({{"Label", id["VD_HomeMode_Manager"],"lblMichel", "X Présent"} ,{"Trigger", "ui.lblMichel.value"}},-1, "Michel arrive à la maison") Rien en natif pour le "nettoyage", mais ce n'était le but de StringToAlpha et autre ? Sinon un string.gmatch ou match ca doit le faire comme tu le fais. Si on peut imbriquer les options : GEA.add( {"Global", "JourNuit", {"Value", 73}, 30, "", {ACTIONS} ) - Si la variable "JourNuit" est égale à la valeur "value" du module 73 \\ If variable "JourNuit" is equal to the value "value" of device 73 A tester : Si le label = à la valeur LabelRegEx {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, {"LabelRegEx", id["VD_HomeMode_Manager"], "lblMichel", "[a-zA-Z0-9.-]", "Absent"}}
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 Je ne suis pas dispo mais GEA prend déjà en compte les regex. 1
pepite Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 il y a 4 minutes, Steven a dit : Je ne suis pas dispo mais GEA prend déjà en compte les regex oui mais MAM veut supprimer les emoji si j'ai bien suivi et non utiliser "#r#" ;-)
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 il y a 20 minutes, pepite a dit : Tu peux essayer cela dans config() stp ? Merci. J'ai testé et ça fonctionne également tout comme ma suggestion qui était sur la même base. Ce sera peut-être effectivement plus simplement intégrable en réutilisant la fonction existante "Trigger". J'ai néanmoins adapté la fonction afin d'évite de devoir renseigner "ui." et ".device" dans le paramètre de la fonction et ne garder que le nom du label. Voici le code modifié. GEA.options.trigger = { name = "Trigger", getValue=function(value) if (not value)then if (GEA.source.type == "autostart") then return "autostart" elseif (GEA.source.type == "global") then return "Global["..GEA.source.name.."]" elseif (GEA.source.type == "property") then return "Property[" ..GEA.source.deviceID .."]" elseif (GEA.source.type == "event") then return "Event["..GEA.source.event.data.deviceId.."]" end elseif (value) then if (GEA.source.type == "property") then return GEA.source.propertyName:gsub("ui.", ""):gsub(".value", "") == value end end return "other" end }
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) il y a 38 minutes, pepite a dit : Rien en natif pour le "nettoyage", mais ce n'était le but de StringToAlpha et autre ? Sinon un string.gmatch ou match ca doit le faire comme tu le fais. Si c'était bien le but, mais après réflexion je me suis dit que ce serait plus utile de pouvoir mettre le RegEx en paramètre de la fonction afin de pouvoir créer les filtres que l'on veux J'ai néanmoins eu quelques soucis avec les Emoji puisque certain intègre des caractères accentués, du coup je suis obligé de supprimé les caractères les caractères accentués du coup je suis obligé de tester de la façon suivante : Présent devient Prsent dans mon test. Cf. exemple ci-dessous. GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblGaby", "[a-zA-Z0-9.-]", "Prsent"} ,{"Trigger", "lblGaby"}} ,-1, "Gaby arrive de la maison") il y a 38 minutes, pepite a dit : GEA.add( {"Global", "JourNuit", {"Value", 73}, 30, "", {ACTIONS} ) - Si la variable "JourNuit" est égale à la valeur "value" du module 73 \\ If variable "JourNuit" is equal to the value "value" of device 73 Super, je vais tester ça. Si c'est bon, il sera possible d'utiliser une fonction RegEx indépendamment de la source de donnée (Label, VG, Données récupérées via une API, ...) Modifié le 22 janvier 2019 par MAM78
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 P'tit message rapide. Je ne vois pas la différence entre : {"LabelRegEx", id["VD_HomeMode_Manager"], "lblGaby", "[a-zA-Z0-9.-]", "Prsent"} et {"Label", id["VD_HomeMode_Manager"], "lblGaby", "#r#Prsent"} Je surveille les posts d'un seul oeil. Je te répond demain MAM pour ton message, mais d'avance pas de soucis. 1
pepite Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 il y a 30 minutes, MAM78 a dit : GEA.source.propertyName:gsub("ui.", ""):gsub(".value", "") quand tu fais cela, cela ne fonctionnera qu'avec le Label, donc avec ton beosin, l'idée est que cela soit portable quelque soit le nom de la propriété
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) J'y ai bien pensé mais lorsque le type == "property" il n'y a que 2 sous valeurs possibles : deviceID: numéro d’ID du module propertyName: nom de la propriété Pour deviceID je ne vois pas trop utilités dans la mesure ou la ligne qui sera déclenchée contiendra déjà une condition avec ce deviceID. Sauf peut-être si la condition concerne plusieurs deviceID, dans ce cas cela peut être utile de savoir lequel. EDIT : est-ce qu'il possible dans GEA de tester en une fois plusieurs ID de module comment par exemple : Dans cas effectivement il serait utile de pouvoir vérifier quel deviceID a déclenché la condition GEA.add( {"Label", {72, 73, 74}, "lblXXX", "ZZZZ"}, , "", {ACTIONS} ) Modifié le 22 janvier 2019 par MAM78
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) il y a 46 minutes, Steven a dit : Je surveille les posts d'un seul oeil. Je te répond demain MAM pour ton message, mais d'avance pas de soucis. J'ai bien essayé, mais je ne vois pas comment ça marche. J'ai essayé ça, mais sans succès. GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblMichel", "#[a-zA-Z0-9.-]#Prsent"} ,{"Trigger", "lblGaby"}} ,-1, "Gaby arrive de la maison") GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblGaby", "#[a-zA-Z0-9.-]#Absent"} ,{"Trigger", "lblGaby"}} ,-1, "Gaby quitte la maison") J'ai supposé qu'il fallait remplacer le r de #r# par la chaine ReGex. Ca ne doit pas être cela Pour rappel mes labels contiennent ça : Modifié le 22 janvier 2019 par MAM78
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) Il y a 1 heure, pepite a dit : {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, {"LabelRegEx", id["VD_HomeMode_Manager"], "lblMichel", "[a-zA-Z0-9.-]", "Absent"}} Ca il y a pas de souci, c'est ce que je fais déjà, de façon légèrement différente mais c'est toujours en passant par une fonction "LabelRegEx" qui va chercher le contenu de label (et pas autre chose comme un VD) et nettoyer la valeur. Ce voudrait pouvoir faire quelque chose comme cela : {"RegEx", {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, "[a-zA-Z0-9.-]", "Absent"}}, , , "", {ACTIONS} ) {"RegEx", {"Global", id["VG_XXXXr"]}, "[a-zA-Z0-9.-]", "Absent"}} {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, {"RegEx", #value#, "[a-zA-Z0-9.-]", "Absent"}} {"Global", id["VG_XXXXr"], "lblMichel"}, {"RegEx", #value#, "[a-zA-Z0-9.-]", "Absent"}} Modifié le 22 janvier 2019 par MAM78
soulac Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 Il y a 2 heures, soulac a dit : bon je reviens vers vous : quand je mets la condition de temps cela fonctionne avec le code suivant: GEA.add({"Time", "14:17", "14:18"}, 30, "",{"VirtualDevice", 305, 9}) maintenant je souhaite rajouter la condition JourChome avec le code suivant : GEA.add({"Global","JourChome", "NON"}, 30, "", {{"Time", "14:23", "14:24"}, 30, "",{"VirtualDevice", 305, 9}} ) mais cela ne fonctionne pas. En GEA V5 mon code est le suivant : GEA.add(JourTravail, 30, "" , {{"Time","7:20","7:21"},{"VirtualDevice", 305, 9}}) -- GEA V5 avec en local local JourTravail = {"Global", "JourChome", "NON"} bon après quelque test et modification j'ai réussi avec le code suivant : -- ================================================== -- SALLE DE BAIN -- ================================================== GEA.add({"Slider!", 305, "3", 21}, 30, "",{{"Time","7:19","7:20"},{"Slider",305, "3", 21}}) -- Play Wit Fm dans la salle de bain à 7h20 en mode Travail GEA.add(JourTravail, 30, "" , {{"Time","7:20","7:21"},{"VirtualDevice", 305, 9}}) -- Stop music dans la salle de bain à 8h30 en mode Travail GEA.add(JourTravail, 30, "" , {{"Time","8:30","8:31"},{"VirtualDevice", 305, 2}})
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 il y a 16 minutes, MAM78 a dit : Ca il y a pas de souci, c'est ce que je fais déjà, de façon légèrement différente mais c'est toujours en passant par une fonction "LabelRegEx" qui va chercher le contenu de label (et pas autre chose comme un VD) et nettoyer la valeur. Ce voudrait pouvoir faire quelque chose comme cela : {"RegEx", {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, "[a-zA-Z0-9.-]", "Absent"}}, , , "", {ACTIONS} ) {"RegEx", {"Global", id["VG_XXXXr"]}, "[a-zA-Z0-9.-]", "Absent"}} {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, {"RegEx", #value#, "[a-zA-Z0-9.-]", "Absent"}} {"Global", id["VG_XXXXr"], "lblMichel"}, {"RegEx", #value#, "[a-zA-Z0-9.-]", "Absent"}} As-tu essayé simplement {"Label", id["VD_HomeMode_Manager"], "lblMichel", #r#Absent} #r# indique simplement à GEA d'utiliser les regex.
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 Pour moi et si les tranches horaires correspondent au moment ou l'action doit être réalisée, tu devrais l'écrire comme ça : GEA.add({{"Slider!", 305, "3", 21}, {"Time","7:19","7:20"}}, 30, "",{"Slider",305, "3", 21}) -- Play Wit Fm dans la salle de bain à 7h20 en mode Travail GEA.add({JourTravail, {"Time","7:20","7:21"}}, 30, "" , {"VirtualDevice", 305, 9}) -- Stop music dans la salle de bain à 8h30 en mode Travail GEA.add({JourTravail, {"Time","8:30","8:31"}}, 30, "" , {"VirtualDevice", 305, 2})
soulac Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 pourquoi quand je change mes id de module en non cela ne fonctionne pas ? --GEA.add({"turnOn", 299}, 30, "", {"turnOff", 299}) ok fonctionne GEA.add({"turnOn",id[SPOT_ENTREE]}, 30, "", {"turnOff",id[SPOT_ENTREE]}) le message de débug est le suivant : Citation [DEBUG] 16:54:04: 2019-01-22 16:54:04.073054 [ fatal] Unknown exception: /opt/fibaro/scenes/170.lua:118: attempt to index global 'id' (a nil value) sommes nous d'accord que les id à renseigné sont juste après function config() comme ceci ? function config() local id = { -- entree OUVERTURE_ENTREE = 280, SPOT_ENTREE = 299, SPOT_ENTREE_EXTERIEUR = 297,
soulac Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 il y a 5 minutes, MAM78 a dit : Pour moi et si les tranches horaires correspondent au moment ou l'action doit être réalisée, tu devrais l'écrire comme ça : GEA.add({{"Slider!", 305, "3", 21}, {"Time","7:19","7:20"}}, 30, "",{"Slider",305, "3", 21}) -- Play Wit Fm dans la salle de bain à 7h20 en mode Travail GEA.add({JourTravail, {"Time","7:20","7:21"}}, 30, "" , {"VirtualDevice", 305, 9}) -- Stop music dans la salle de bain à 8h30 en mode Travail GEA.add({JourTravail, {"Time","8:30","8:31"}}, 30, "" , {"VirtualDevice", 305, 2}) merci pour cette vérification j'ai modifié et cela fonctionne
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) il y a 15 minutes, Steven a dit : As-tu essayé simplement {"Label", id["VD_HomeMode_Manager"], "lblMichel", #r#Absent} #r# indique simplement à GEA d'utiliser les regex. Je viens de tester et ça marche avec les lignes suivantes : GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblGaby", "#r#Présent"} ,{"Trigger", "lblGaby"}} ,-1, "Gaby arrive de la maison") GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblGaby", "#r#Absent"} ,{"Trigger", "lblGaby"}} ,-1, "Gaby quitte la maison") Ok je ne connaissais pas le regEx #r#, mais dans ce cas quels sont les caractères qui sont filtrés / remplacés ? Modifié le 22 janvier 2019 par MAM78
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 Au lieu de faire un égal, il fait un match() donc il faut juste regarder ce qu'accepte cette fonction. Cela revient à faire label:match("Présent") J'ai aussi ajouté la possibilité d'utiliser le OR "|" afin de pouvoir faire "#r#Présent|Absent" ce qui revient à dire "Présent" OU "Absent" Cela fonctionne aussi sur les "Global" P.S. Le trigger sur les label sera corrigé en 6.12. C'est effectivement un manque dans GEA.
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) Top ça. Si j'avais su j'aurais perdu un peu moins de temps, mais du coup j'ai appris plein de choses sur ton code GEA et la construction de fonctions utilisateur Est-ce qu'il ne serait pas intéressant néanmoins de pouvoir disposer d'une fonction permettant de filtrer un contenu selon sa propre règle de filtrage et/ou de remplacement de caractères ? Comme pour faire du String to Number ou du Upercase, Lowcase, ... EDIT : Mais du coup je ne sais toujours pas comment associer cette fonction au résultat d'une autre condition et la réutiliser dans la partie condition. Modifié le 22 janvier 2019 par MAM78
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 il y a 31 minutes, MAM78 a dit : Top ça. Si j'avais su j'aurais perdu un peu moins de temps, mais du coup j'ai appris plein de choses sur ton code GEA et la construction de fonctions utilisateur Suffit de demander et surtout d'avoir quelqu'un de disponible pour te répondre ... Mea Culpa ... pour me manque de disponibilité il y a 31 minutes, MAM78 a dit : Est-ce qu'il ne serait pas intéressant néanmoins de pouvoir disposer d'une fonction permettant de filtrer un contenu selon sa propre règle de filtrage et/ou de remplacement de caractères ? Oui, non, je ne sais pas, je pense que c'est assez propre à ton usage et que 99% des utilisateurs devrait se suffire des fonctions déjà offertes. Je ne suis pas pour surcharger GEA par des fonctions utilisateurs. Par contre, je suis 100% pour l'échange de code qu'il est facilement intégrable, comme tu l'as fais en ajoutant, au besoin, des GEA.options.xxxxxx il y a 31 minutes, MAM78 a dit : Comme pour faire du String to Number ou du Upercase, Lowcase, ... String To Number peut être une bonne option car elle permettrait de faire des calculs +/- sur des labels contenants du texte. Pour l'Upercase et Lowercase, je n'y voit pas d’intérêt en "domotique" que ce soit "Présent" ou "présent" revient au même dans, à nouveau, 99% des cas. D'ailleurs la méthode GEA.compareString lowercase systématiquement les valeurs fournies avec les valeurs des labels avant de les comparer. il y a 31 minutes, MAM78 a dit : EDIT : Mais du coup je ne sais toujours pas comment associer cette fonction au résultat d'une autre condition et la réutiliser dans la partie condition. Réponse au prochain post.
MAM78 Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 (modifié) Ok sur 100% de ce que indiques. Merci en tout cas pour temps consacré. il y a 9 minutes, Steven a dit : ar contre, je suis 100% pour l'échange de code qu'il est facilement intégrable, comme tu l'as fais en ajoutant, au besoin, des GEA.options.xxxxxx Du coup ce serait peut-être intéressant de créer un Tutoriel recensant les différentes GEA.options.xxxxx afin que chacun puisse y récupérer celles de la communautés. Si tu es d'accord, je peux me charger de créer le tutoriel et le compléter au fil du temps par les nouvelles contributions. J'ignore s'il est possible sur le forum de donner l'accès en modification sur le premier post d'un Sujet à plusieurs utilisateurs ? Modifié le 22 janvier 2019 par MAM78
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 Les options sont composée, en général, de 3 parties {"<nom>", <id>, "<argument>"}. Lors d'une condition, elles vont être additionnées d'une 4ème valeur qui sera donc la valeur souhaitée/recherchée {"<nom>", <id>, "<argument>", "<valeur souhaitée>"} GEA inclus un mécanisme qui permet à ce que le 3ème et les suivants paramètres puisse être d'autres options (C'est pas clair tout cela). Donc un exemple : {"Global", "Test", {"Label", 100, "mode"}} Le 3ème paramètre est remplacé par une autre option. Permettant ainsi que copier la valeur du Label "mode" dans la variable globale "Test". Appliqué à une condition, on pourrait imaginer quelque chose comme ceci : GEA.add({"Global", "Test", {"Regex", #value#, "Toto}}, 30, "") Voilà.
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 il y a 25 minutes, MAM78 a dit : Ok sur 100% de ce que indiques. Merci en tout cas pour temps consacré. Du coup ce serait peut-être intéressant de créer un Tutoriel recensant les différentes GEA.options.xxxxx afin que chacun puisse y récupérer celles de la communautés. Si tu es d'accord, je peux me charger de créer le tutoriel et le compléter au fil du temps par les nouvelles contributions. J'ignore s'il est possible sur le forum de donner l'accès en modification sur le premier post d'un Sujet à plusieurs utilisateurs ? Je en pense pas que cela soit possible. Il faudrait une sorte de modèle que les gens doivent recopier et compléter pour avoir toujours la même structure afin de facilité la lecture et un sujet très clair. Mais OUI un grand OUI. Edit : il y avait ce post qui expliquait comment écrire sa propre action/condition mais ce n'est pas une base de donnés d'exemple : 1
Steven Posté(e) le 22 janvier 2019 Auteur Signaler Posté(e) le 22 janvier 2019 Même moi, j'ai des options supplémentaires Totalement inutile aux autres utilisateurs. -- Mes options personnelles -- GEA.options.autravail = { name = "au travail", getValue=function() return fibaro:getGlobalValue("JourChome") == "NON" end } GEA.options.enfants = { name = "enfants présents", getValue=function() return fibaro:getGlobalValue("Enfants") == "Presents" end } GEA.options.notifgarage = { name = "Notif garage", getValue=function() return fibaro:getGlobalValue("GEA_Garage") == "ON" end } GEA.options.notif = { name="notif", action=function(message, button) fibaro:setGlobal("Notification", GEA.getMessage(message)); fibaro:call(id.NOTIFICATION_CENTER, "pressButton", button) end } GEA.options.notifimperihome = { name="Notification Imperihome", action=function(message) GEA.options.notif.action(message, 8) end } GEA.options.notifpushbullet = { name="Notification Pushbullet", action=function(message) GEA.options.notif.action(message, 2) end } GEA.options.lampeescalier = {name = "Lampe escalier", getValue=function() return fibaro:getValue(id["APLIQUE_ESCALIER"], "value") ~= "0" end} Je les utilise bêtement comme ceci : GEA.add({{"Days", "weekdays"}, {"auTravail"}, {"Time", "10:30"}}, 30, "", {"turnOff", id["VMC"]}, "Extinction VMC") GEA.add({id["DETECTEUR_GARAGE"], {"notifGarage"}}, 10*60, "La porte du garage est ouverte depuis plus de #duration#", {"NotifImperihome", "La porte du garage est ouverte depuis #durationfull#"}, "Avert. garage ouvert") GEA.add( {id["SPOTS"], {"Time", "Sunset", "Sunrise"}, {"Enfants"}} , -1, "", {{"Inverse"}, {"turnOn", id["VEILLEUSE"]}}, "Allumage de la veilleuse")
fredokl Posté(e) le 22 janvier 2019 Signaler Posté(e) le 22 janvier 2019 Salut. Je cherche à savoir si GEA permet plusieurs valeurs sur une variable dans les conditions. Exemple: GEA.add({"Global","NameVG", "1,2,3,4,5"}, 30 , "", {"Global","AutreVG","Résultat à afficher"}) Il me semble que oui mais je voudrai bien l'avis des experts. Merci.
Messages recommandés