Aller au contenu

Recommended Posts

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"}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@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"}}

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne suis pas dispo mais GEA prend déjà en compte les regex. 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
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#" ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites
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
                    }

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
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é

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites
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 :huh:

 

Pour rappel mes labels contiennent ça :

 

image.png.465e4a084100e7ef4f289bfc58687373.png

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites
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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites
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}})
	  

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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})

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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,

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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 

Partager ce message


Lien à poster
Partager sur d’autres sites
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 :60: 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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

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à.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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 :

 

 

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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")

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×