Aller au contenu

HomeMode Manager (type Geofence)


Messages recommandés

Posté(e)

@MAM78 bon j'ai essayé de faire au mieux mais cela ne fonctionne pas.

 

Dans le VD j'ai :

 

image.png.7371888ad175160229926ed463670a12.png

 

Dans le bouton Famille j'ai :

 

--
-- To configure the VD you must Enter a User Name in designation (caption) of each labels
-- This Name wile be used to designate the all the users in VG_HomeMode Globale Variable
--

--
-- Variables that must be change by the user
--
local Icon_Family_Present = 1017  -- Icon ID when one member of the family is present
local Icon_Family_Away    = 1018  -- Icon ID when all members of the family are away

--
-- Variables that can be change by the user
--
local lbl_UserStateValue_Present = " Présent" -- Label value (if Present)
local lbl_UserStateValue_Away    = " Absent"  -- Label value (if Asent)

local lbl_FamilyStateValue_Present = " Présente" -- Label value (if Present)
local lbl_FamilyStateValue_Away    = " Absente"  -- Label value (if Asent)

local Use_The_VG_HomeMode = true    -- Indicates if you want to use the Global Variable
local VG_HomeMode = "HomeMode"      -- Global Variable containing the homemode state
local VG_StateValue_Present = true  -- VG value (if Present)
local VG_StateValue_Away    = false -- VG value (if Away)

local debug = false -- Indicate the debug mode state (true ou false)

--
-- Do not change the code after here

Je n'ai rien touché au code initiale.

 

Dans GEA j'ai l'option :

 

  --Permet de filtrer les caractères contenue dans un label d'un VD pour en conserver que les caractères utiles et les exploiter
  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,
                    }

Puis une ligne simple qui doit activer ou pas une prise en fonction de la présence d'une des personnes de la famille.

 

 	GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présent"}, -1, "Prise On",{"turnOn", id["PRISE_BUREAU"]}})
  	GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Absent"}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]}})
 

C'est ce que j'ai compris mais malheureusement cela ne fonctionne pas. J'ai oublié quelque chose je supose si tu peux me donner un peu d'aide ? Merci par avance.

Posté(e) (modifié)

as-tu bien déclaré l'ID associés aux labels de ton VD dans l'entête de GEA section properties, cf exemple ci-dessous "999 ui.lblFamilyPresence.value", remplacer 999 par ton ID du VD :

--[[
%% autostart
%% properties

999 ui.lblFamilyPresence.value

999 ui.lblToto.value

999 ui.lblTata.value

%% globals
%% events
--]]

 

Attention l'option "GEA.options.labelregex ......." doit être incluse dans la fonction : function config()

 

Modifié par MAM78
Posté(e)

Effectivement je n'avais pas rajoutéles ID dans l'entête GEA.

 

Toutefois en rajoutant les lignes :

 

GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présent"}, -1, "Prise On",{"turnOn", id["PRISE_BUREAU"]}})
GEA.add({{"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Absent"}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]}})

j'ai dans le débug une erreur : durée requise

 

image.png.6feaf07f4c7b14b33b601c69be6bcd6d.png

 

une ptite idée ?

Posté(e) (modifié)

Ton souci vient des accolades, voici la correction :

GEA.add({"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présent"}, -1, "Prise On",{"turnOn", id["PRISE_BUREAU"]})
GEA.add({"LabelRegEx", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Absent"}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]})

Mais, je te suggère d'intégrer la fonction suivante en lieu et place de la fonction "LabelRegEx" :

  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
                    }

et de récrire la règle de la façon suivante :

GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présente"},{"Trigger", "lblFamilyPresence"}}, -1, "Prise On",{"turnOn", id["PRISE_BUREAU"]})
GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présente"},{"Trigger", "lblFamilyPresence"}}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]})

 

Modifié par MAM78
EDIT : Correction du code de la fonction "Trigger"
Posté(e)

@MAM78 merci pour ton retour mais malheureusement cela ne fonctionne pas.

 

Dans GEA j'ai bien rajouté :

 

--[[
%% autostart
%% properties
208 value
282 value
284 value
265 value
263 value
311 value
344 value
378 value
305 ui.slider.value
330 ui.lblFamilyPresence.value
330 ui.lblSebastienPresence.value
%% globals
--]]

J'ai rajouté les règles comme suite :

 

GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présente"},{"Trigger", "lblFamilyPresence"}}, -1, "Prise On",{"turnOn", id["PRISE_BUREAU"]})
GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Absente"},{"Trigger", "lblFamilyPresence"}}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]})
    

Nous sommes d'accord je ne doit pas rajouter l'option :

  --Permet de filtrer les caractères contenue dans un label d'un VD pour en conserver que les caractères utiles et les exploiter
  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,
                    }

Merci pour votre aide car la je ne comprends pas.

J'ai même dans le module HomeManager modifier les labels 

"Absente" "Présente"

sans les Emoji mais rien non plus.

 

Posté(e) (modifié)

Je viens de relire mon message précédent et j'ai fait une erreur de copier/coller sur le sujet de la fonction à remplacer.

 

Voici le code de la fonction en lieu et place de la fonction "LabelRegEx"  :

  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
                    }

 

Mais attention ce n'est pas une Option mais une fonction, qu'il convient d'ajouter dans la partie function config()

 

Modifié par MAM78
Posté(e)

@MAM78 je me permets de revenir vers vous car je souhaiterais allumer ma prise à une heure précise mais cela ne fonctionne pas.

 

J'ai fait cette ligne mais rien.

 

GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblSebastienPresence", "#r#Absent"},{"Trigger", "lblSebastienPresence"}}, 30, "",{{"Time","17:53","17:54"},{"turnOff", id["PRISE_BUREAU"]}})

une idée d'erreur ?

Merci pour votre patience.

Posté(e)

Plutôt que te donner directement la solution, je t'invite à lire la documentation GEA B)

{"Time","17:53","17:54"}

Je te donne une piste, la partie ci-dessus, je pense que c'est une condition pas une action :rolleyes:

 

Je ne suis pas expert en langue anglaise, mais "turnOff" je ne pense pas que ce soit l'équivalent d'allumer ;)

 

Mais t'inquiète, ce genre d'erreurs m'arrive également, n'est-ce pas @Lazer

  • Haha 1
Posté(e)

Hello merci pour ton retour @MAM78 j'ai modifié la ligne comme ceci

 

GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblSebastienPresence", "#r#Absent"},{"Trigger", "lblSebastienPresence"},{"Time","09:50","09:51"}}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]})
  

Mais cela n'éteint pas la prise quand le label est déja en mode Absent. Par contre cela fonctionne quand j'appuis sur le VD HomeMode Manager et je bascule du mode Present au mode Absent dans le temps imparti. Je ne sais pas si je me fais bien comprendre.

 

De plus effectivement en relisant la doc GEA j'ai bien vue le changement mais j'ai des lignes qui fonctionne encore comme ceci 

 

-- Eteindre prise bureau à 20h00 en mode Travail
	GEA.add({JourTravail,SebastienPresent}, 30, "Prise bureau off" , {{"Time","20:00","20:01"},{"turnOff", id["PRISE_BUREAU"]}})
	

J'ai trouvé une variante pour faire le job mais j'aurais aimé que cela fonctionne avec les Labels.

 

Je ne comprends pas ou est mon erreur.

Posté(e) (modifié)
Il y a 1 heure, soulac a dit :

Mais cela n'éteint pas la prise quand le label est déja en mode Absent. Par contre cela fonctionne quand j'appuis sur le VD HomeMode Manager et je bascule du mode Present au mode Absent dans le temps imparti. Je ne sais pas si je me fais bien comprendre.

C'est normal, puisque ta règle est conditionnée pour que l'action ne se déclenche seulement durant la tranche horaire mentionnée et que le déclenchement de GEA a été provoqué par le changement de valeur du Label lblSebastienPresence et que celui-ci à pris la valeur "Absent".

 

Ce que je comprend de ce que tu cherches à faire, c'est de vérifier dans la tranche horaire quelle la valeur du Label lblSebastienPresence et si elle est égale à "Absent". Ce n'est pas tout à fait la même chose. Donc ton action n'est pas conditionné par le moment ou ce fait ce changement valeur.

 

Tu devrais essayer ça :

GEA.add({{"Time","09:50","09:52"}, {"Label", id["VD_HomeMode_Manager"], "lblSebastienPresence", "#r#Absent"}}, -1, "Prise Off",{"turnOff", id["PRISE_BUREAU"]})

Pour ton info, j'ai remarqué qu'il y a un caractère fantôme entre le mot Absent et la guillemet. "#r#Absent "}

 

 

Modifié par MAM78
Posté(e)

@MAM78 malheureusement cela ne fonctionne pas.

 

Ce que je souhaite c'est si je suis Absent la prise du bureau soit éteint à une heure précise 13h par exemple.

 

J'ai trouvé une variante en ajoutant dans les boutons "Présent" "Absent" une ligne qui va modifier une variable et dans GEA je fais les lignes suivantes :

 

    -- ==================================================
    -- CONDITION
    -- ==================================================
local JourTravail = {"Global", "JourChome", "NON"}
local SebastienPresent = {"Global", "PRESENCE_SEB", "Present"}  -- Précense de sébastien
local SebastionAbsent = {"Global", "PRESENCE_SEB", "Absent"}    -- Absense de sébastien
  

-- Allumer prise bureau à 8h00 en mode Travail
	GEA.add({JourTravail,SebastienPresent}, 30, "Pise bureau on" , {{"Time","08:00","08:01"},{"turnOn", id["PRISE_BUREAU"]}})
	--GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblSebastienPresence", "#r#Présent"},{"Trigger", "lblSebastienPresence"},JourTravail}, -1, "Prise On",{{"Time","08:00","08:01"},{"turnOn", id["PRISE_BUREAU"]}})
 
 	-- Eteindre prise bureau à 20h00 en mode Travail
	GEA.add({JourTravail,SebastienPresent}, 30, "Prise bureau off" , {{"Time","20:00","20:01"},{"turnOff", id["PRISE_BUREAU"]}})

Mais j'aimerais comprendre pourquoi cela ne fonctionne pas avec les labels. J'ai envie de dire c'est la même chose et pas besoin de rajouter une variable mais je me trompe peut etre.

Posté(e) (modifié)

Je viens de faire des tests, avec ça c'est bon. Tu as plus qu'à adapter les horaires et les noms.

 

GEA.add({{"Time","15:18","15:19"}
        ,{"Label", id["VD_HomeMode_Manager"], "lblMichel", "#r#Présent"}}
        ,30, ""
        ,{"turnOn", id["LAMPE_SAM"]}
        ,"Présence de Michel, on allume la lumière de la salle à manger")


GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblMichel", "#r#Présent"}
        ,{"Trigger", "lblMichel"}
        ,{"Time","15:20","15:21"}}
        ,-1, ""
        ,{"turnOn", id["LAMPE_SAM"]}
        ,"Michel vient d'arriver à la maison, on allume la lumière de la salle à manger")

  
GEA.add({{"Time","15:31","15:32"}
        ,{"Label", id["VD_HomeMode_Manager"], "lblMichel", "#r#Absent"}
    	,{id["LAMPE_SAM"]}}
        ,30, ""
        ,{"turnOff", id["LAMPE_SAM"]}
        ,"Absence de Michel, la mumière du salon est allumée, on l'éteint")


GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblMichel", "#r#Absent"} 
        ,{"Trigger", "lblMichel"}
        ,{"Time","15:34","15:35"}
    	,{id["LAMPE_SAM"]}}
        ,-1, ""
        ,{"turnOff", id["LAMPE_SAM"]}
        ,"Michel quitte la maison, la mumière du salon est allumée, on l'éteint")

 

Modifié par MAM78
Posté(e) (modifié)

Voici 2 autres scènes qui pourraient t'intéresser :

GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Présente"},
         {"Trigger", "lblFamilyPresence"},
         {id["LAMPE_SAM"]},
         {"(Time)", "Sunset-15", "Sunrise+5"}}
        ,-1, ""
        ,{{"Inverse", 3},
          {"turnOn", id["LAMPE_SAM"]}}
        ,"Arrivée d'un membre de la famille à la maison, il fait nuit, la lumière de la salle à manger est éteinte, on allume")


GEA.add({{"Label", id["VD_HomeMode_Manager"], "lblFamilyPresence", "#r#Absente"},
         {"Trigger", "lblFamilyPresence"},
         {id["LAMPE_SAM"]}}
        ,-1, ""
        ,{"turnOff", id["LAMPE_SAM"]}
        ,"Tous les membres de la fammille ont quitté la maison, la mumière de la salle à manger est allumée, on l'éteint")

EDIT : Il y avait une petite erreur ;) corrigée ci-dessus

Modifié par MAM78
Posté(e) (modifié)

@MAM78 merci tes lignes fonctionnent cela me donne quelque idée avec la reconnaissance des labels.

 

A super merci pour les autres lignes je vais pouvoir encore jouer

 

Modifié par soulac
  • Like 1
×
×
  • Créer...