-
Compteur de contenus
2 516 -
Inscription
-
Dernière visite
-
Jours gagnés
28
Tout ce qui a été posté par MAM78
-
Bibliothèque des fonctions additionnelles pour GEA Nom : LabelRegEx Auteur : @MAM78 Description fonctionnelle : Permet de filtrer les caractères contenue dans un label d'un VD pour en conserver que les caractères utiles et les exploiter. Code : GEA.options.labelregex = {name="LabelRegEx", math=true, optimize = true, depends = {"label"}, control =function(id, property, RegEx, condition) if condition == nil or RegEx == nill then return false, "Check option StringToAlpha condition or ReGex" else return true end end, getValue=function(id, property, RegEx, condition, case) local newvalue = "" for word in string.gmatch(GEA.options.label.getValue(id, property), RegEx) do newvalue = newvalue..word end if case ~= nil then if string.upper(case) == "UPPERCASE" then newvalue = string.upper(newvalue) elseif string.upper(case) == "LOWERCASE" then newvalue = string.lower(newvalue) end end return condition==newvalue end, } Description des paramètres de la fonction : value = données source, RegEx = chaine de caractères de filtrage, case = peut prendre la valeur UPPERCASE ou LOWERCASE afin de mettre en majuscule ou minuscule le résultat après filtrage. Exemples d'utilisations : GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblXXX", "[a-zA-Z0-9.-]", "Valeur rechercher"} ,-1, "La valeur du label lblXXX filtrée est égale à : #value#") Compatibilité : 6.11 Nom : TempInt Auteur : @pepite Description fonctionnelle : Permet le retour du relevé (et en TTS) de Température des différents modules d'une Station Météo Netatmo. Code : GEA.options.tempint = {name ="TempInt", math=true, optimize=true, getValue=function() return fibaro:getValue(164, "ui.lblTemp.value"):match("[0-9.]+") end, } GEA.options.tempext = {name="TempExt", math=true, optimize=true, getValue=function() return fibaro:getValue(147, "ui.lblTemp.value"):match("[0-9.%-]+") end, } GEA.options.tempinttts = {name ="TempIntTTS", optimmize=true, getValue=function() local temp = fibaro:getValue(164, "ui.lblTemp.value") return temp:match("[0-9.]+"):gsub("%.", "virgule").. "degrer" end, } GEA.options.tempexttts = {name ="TempExtTTS", optimize=true, getValue=function() local temp = fibaro:getValue(147, "ui.lblTemp.value") return temp:match("[0-9.%-]+"):gsub("%.", "virgule").. "degrer" end, } Exemples d'utilisations : -- Temperature Salon Netatmo-- GEA.add({ {"TempInt-",40},{"Time", "18:30"}}, 30, "Temperature intérieure : {TempInt} °C le {Date}", {"SMS", "Temperature du Salon #value# degrés le #date#"}, "Température Salon Netatmo 18h30") --=== Temp exter matin Station Netatmo ===== GEA.add( {{"Time", "07:00", "07:01"}, {"Time", "07:30", "07:31"}}, 30, "Température exterieure : {TempExt} °C", "Relevés Temperature extérieure" ) Compatibilité : 6.11
-
GEA - Bibliothèque de fonction GEA additionnelles (conditions / actions) Préambule : A l'occasion de mes échanges avec @Steven au sujet des fonctions GEA et notamment celles qui ne sont pas forcement destinées à y être incluses dans la version officielle de GEA (notamment du fait qu'elles ne serait pas forcement utiles au plus grand nombre), il nous ai paru intéressant de référencer l'ensemble des fonctions additionnelles que chacun développe et les référencer sous la forme d'une bibliothèque dans laquelle chacun pourrait venir les récupérer et les intégrer dans son GEA. Le Projet : Nous avons tous des idées/besoins différents et GEA permet d'ajouter vos propres conditions/actions dans GEA. Référencer l'ensemble des fonctions que chacun développe de son côté et les référencer ici sous la forme d'une bibliothèque. Attention : L'idée est de référencer des conditions/actions qui ne sont pas déjà réalisables au travers des fonctions disponibles sous GEA. Les fonctions conditions/actions que vous créez pour une simplification d'écriture ou de lecture n'ont pas lieu d'être référencer ici. Mais rien n'empêche évidement que vous les présentiez dans vos messages, mais elles ne seront pas intégrées dans la bibliothèque. Comment développer une nouvelle fonction (option) : @Steven avait décrit comment développer une fonction (Option) GEA. Vous trouverez les explications ici : Pour rappel ces fonctions doivent être positionnée dans la partie : function config() de GEA. Comment soumettre une nouvelle fonction (option) : C'est simple vous créez un post dans ce sujet dans lequel vous souhaitez vos créations. Pour chaque proposition, il convient : d'en faire une description fonctionnelle de fournir le code de décrire les paramètres de la fonction : donner un ou plusieurs exemples d'utilisation d'indiquer avec quelle version de GEA est est compatible Les propositions seront référencées au fil de l'eau dans le deuxième post ci-dessous. Et peut-être qu'un jour elles seront intégrées dans une version officielle de GEA ` Historique des contributions : LabelRegEx @MAM78 du 22/01/2019 TempInt, TempExt,TempIntTTS, TempExtTTS @pepite du 232/01/2019
-
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 ?
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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 ?
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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})
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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"}}
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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 :
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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} )
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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") 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, ...)
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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 }
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Nouvelle application mobile pour smartphone Fibaro Home Center / Yubii Home Center
MAM78 a répondu à un(e) sujet de fredokl dans Applications Smartphones et Tablettes
Ah oui effectivement si c'est une solution à tiroirs. L'addition risque d'être salée -
Essay de modifier ton slider manuellement (via l'application ou sur ta console HC2) et il devrait tout seul revenir sur 21.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Nouvelle application mobile pour smartphone Fibaro Home Center / Yubii Home Center
MAM78 a répondu à un(e) sujet de fredokl dans Applications Smartphones et Tablettes
Et il en manque plein d'autres Toi tu vas te faire des copains -
Je viens de faire le test et ça fonctionne très bien. Mais il faut mettre en place une condition de déclenchement : par exemple une vérification tous les jours à 4h00 du matin. Si tu es sur IE ou Safari pense à bien réactualiser la page. La modification apparaît bien en chiffre, mais le slider lui ne bouge pas tant que tu n'a pas réactualisé ta page. Sur l'application c'est bon.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
c'est donc bien cela qu'il te faut : GEA.add({"Slider!", 305, "3", 21},-1, "",{"Slider",305, "3", 21}) Bien évidement, il faut ajouter les conditions horaires.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Tient nous avons les mêmes idées
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Nouvelle application mobile pour smartphone Fibaro Home Center / Yubii Home Center
MAM78 a répondu à un(e) sujet de fredokl dans Applications Smartphones et Tablettes
300 euros d'écarts avec la HC2 ce n'est pas si énorme que ça, s'il y a moins de bug, plus de fonctionnalité et plus protocoles ? -
Tout dépend de ce que tu cherches à faire. Il faudrait que tu nous indiques fonctionnellement ce que tu veux faire (dans quelles circonstances)
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
oui puisqu'il faut déclarer dans l'entête de GEA ton label pour qu'il soit considéré comme un déclencheur de GEA. 305 ui.nonlabel.value -- remplace nomlabel par ton nom du Slider et si tu veux que la modification se fasse immédiatement suite au changement de la valeur de ton slider, il faut modifier ta ligne de la façon suivante : GEA.add({"Slider!", 305, "3", 21}, , "",{"Slider",305, "3", 21}) Mettre -1 à la place de 30 qui permet d'indique qu'il s'agit d'un déclenchement immédiat suite à une modification d'un élément de ton Virual Device. 30 c'est pour un déclenchement 30 secondes après avoir fait la modification (avec une valeur différente de 21)
- 12 490 réponses
-
- 1
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je suppose qu'il n'est pas possible : d'imbriquer 2 conditions du genre ? {"RegEx" {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, "[a-zA-Z0-9.-], "Absent"} La fonction Label récupère la valeur lblMichel qui après est traitée par la fonction RegEx pour nettoyer la valeur restituée. ou d'utiliser la valeur restituée dans une première condition pour la tester dans une deuxième, du genre ? {"Label", id["VD_HomeMode_Manager"], "lblMichel"}, {"RegEx", #valeur#, "[a-zA-Z0-9.-], "Absent"}
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Si je peux abuser de ton temps, j'ai la question suivante : Est-ce qu'il est déjà possible avec GEA d'appliquer une nettoyage de la valeur restituée par la condition "Label" par l'utilisation d'un RegEx. Comme tu peux le voir dans mon VD Home Manager dans les labels, j'ai des emoji pour faire plus jolie et les rendre plus explicite. mais dans GEA pour tester la valeur des labels, il est préférable de supprimer ces caractères. N'ayant pas trouvé comment, j'ai créé la fonction suivante qui fait le nécessaire : GEA.options.labelregex = {name="LabelRegEx", math=true, optimize = true, depends = {"label"}, control =function(id, property, RegEx, condition) if condition == nil or RegEx == nill then return false, "Check option StringToAlpha condition or ReGex" else return true end end, getValue=function(id, property, RegEx, condition, case) local newvalue = "" for word in string.gmatch(GEA.options.label.getValue(id, property), RegEx) do newvalue = newvalue..word end if case ~= nil then if string.upper(case) == "UPPERCASE" then newvalue = string.upper(newvalue) elseif string.upper(case) == "LOWERCASE" then newvalue = string.lower(newvalue) end end return condition==newvalue end, } Je l'utilise de la façon suivante : GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblGaby", "[a-zA-Z0-9.-]", "Absent"} ,{"TriggerPropertyName", "lblGaby"}} ,-1, "Gaby quitte la maison") Il est également possible de mettre tout en majuscule ou minuscule si l'on ajoute "UPPERCASE" ou "LOWERCASE" en dernier paramètre qui lui est optionnel.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je confirme que ça ne fonctionne pas comme je le souhaite (Seule la ligne pour laquelle le label a été modifié doit s'exécuter). Je ne sais pas s'il faut parler d'un bug ou d'une fonctionnalité non prévue. Mais quoi qu'il en soit ma proposition de fonction TriggerPropertyName elle fonctionne quid de son intégration dans une prochaine version ou de la correction s'il est considéré qu'il s'agit d'un bug.
- 12 490 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
