Aller au contenu

Support Gea


Steven

Recommended Posts

En mettant la condition avec les options...

local condition = {"If",{"Global", "ETATALARME", "Active"}}
GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{condition},{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}})
Lien vers le commentaire
Partager sur d’autres sites

Merci Hansolo, j'avais déjà  essayé...en vain ! >> 

[ERROR] 22:07:06: line 961: attempt to concatenate field '?' (a table value)

Maintenant, en fait, je me demande si avec la fonction "if" il ne faut pas mini 2 conditions, moi j'en ai qu'une.

Lien vers le commentaire
Partager sur d’autres sites

local condition = {"If",{{"Global", "ETATALARME", "Active"}}}
GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{condition},{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}})

Il manque aussi une série d'accolades pour la condition

Lien vers le commentaire
Partager sur d’autres sites

Merci, j'ai rajouté la paire d'accolades manquantes...

Toujours ce message d'erreur quand je mets la condition dans les options.

 

Si je mets ma condition avant, Gea démarre mais de prise en compte du "if"

Lien vers le commentaire
Partager sur d’autres sites

local condition = {"If",{{"Global", "ETATALARME", "Active"}}}
GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {condition,{"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}})

Dernière correction: pas d'accolade pour utiliser condition dans la ligne GEA

Lien vers le commentaire
Partager sur d’autres sites

Pas d'erreur, mais le "if" n'est pas pris en compte...

 

D'aprés l'exemple de Steven ci dessous, la "condition" à  l'air intégrée à  l'option 'Days" 

J'ai aussi fais l'essai...pareil.

 

Exemple de Steven :

-- Si la lumière (69) est allumée un Lundi, Samedi ou Dimanche
-- ET que "Vacances = 0" ET que "Absence" = 1
-- ET que la température (8) est inférieur à  18°
local condition = {"If",{{"Global", "Absence", "1"},{"Global", "Vacances", "0"},{"Value-", 8, 18}}}
GEA.add(69, -1, "La lumière est allumée", {{"Days", "Monday, Weekend"}, condition})
Lien vers le commentaire
Partager sur d’autres sites

Bon, j'ai trouvé :

 -Apparement la fonction "condition" est donc indexée sur "Days"

 

Merci Hansolo pour ton aide.  ;)

local condition = {"If",{{"Global", "ETATALARME", "Active"}}}
GEA.add(261, 10*60, "La lumière de la cuisine est allumée depuis plus de 10 minutes", {{"Days", "All"}, condition, {"Repeat"}, {"Global", "pushover", "La cuisine est allumée depuis 10 minutes"}, {"VirtualDevice", 198, 4}}) 
Lien vers le commentaire
Partager sur d’autres sites

Est il possible de mettre du code "classique" dans GEA pour utiliser la fonction intéressante de Scene qui s’exécute de façon cyclique.

Sinon et pour ma culture comment créer une scene qui se répète toutes les minutes par exemple en lua ?

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas ce que tu veux faire exactement car tout est possible ...mais parfois cela peut être dangereux !!

 

Sinon, ci-dessous un petit code (qui vient de Lazer je crois) que j'aime bien car il s'exécute au début de la minute, heure...


--[[
%% properties
%% autostart
%% globals
--]]


-- -------------------------------SCENE SETTINGS --------------------------------
local seconde = os.date('%S')

if tonumber(seconde) ~= 0 then
	local delta = 60 - seconde
	fibaro:debug("Time is  " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...")
	fibaro:sleep(delta*1000)
end

local hour = os.date('%H')
local day = os.date('%d')


while true do

-- --------------------- Actions to perform every new minute ---------------------
  		fibaro:debug('New minute')

-- ICI le code

-- -----------------------Actions to perform every new hour ----------------------
	local newhour = os.date('%H')
	if newhour ~= hour then
		fibaro:debug('New hour')

-- ICI le code

		hour = newhour
	end

-- -----------------------Actions to perform every new day -----------------------
	local newday = os.date('%d')
	if newday ~= day and tonumber(os.date('%M')) >= 1 then
		fibaro:debug('New day')
		
-- ICI le code

		day = newday
	end

	fibaro:debug('Last run : ' .. os.date('%H:%M:%S'))
	fibaro:sleep(60*1000); -- Sleep 1 minute

end
Lien vers le commentaire
Partager sur d’autres sites

Au fait Steven, il existe la fonction {Repeat} dans GEA mais il n'existe pas la fonction {Une seule fois}  ^_^

 

Je m'explique...

 

Si je veux pendant une période de 15 minutes lancer une action UNE SEULE FOIS en cas de présence, je mets la commande ci-dessous 

GEA.add(id["PRESENCE_ENTREE"], -1, "", 						-- Quand je détecte quelqu'un dans l'entrée
	{
   	{"Time", "06:00", "06:15"},
   	{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"},		-- Seulement les jours de la semaine travaillés      
        {Faire une action}							-- Faire une action une seule fois
	})

mais l'action se fait à  chaque détection de présence.

 

Je peux faire ça aussi

GEA.add({"Global", "", ""}, 30, "",
	{
   	{"Time", "06:00", "06:15"},			    	    	    	
   	{"If",{{"Value+",id["PRESENCE_SALON"],-1}}},    	    	    	-- Quand je détecte quelqu'un dans l'entrée 
   	{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"},		-- Seulement les jours de la semaine travaillés   	
        {Faire une action}
	})

mais c'est pareil  :mellow: alors je joue avec la durée (entre 6:10 et 6:15) et la fréquence (30s -> 60s) ...mais bon !!

 

J'arrive très bien à  m'en sortir avec une variable globale mais cela me gène un peu de créer plusieurs variables globales pour ça !!!

 

Aurais-je loupé qqles chose ? as-tu une idée ?

Lien vers le commentaire
Partager sur d’autres sites

Invité chris6783

Je rebondis sur le dernier post car gea me sert énormément (merci Steven). Sur ma motorisation de portail j ai une sortie voyant qui clignote lors des manoeuvres et indique ouvert/fermé. Un module universel fibaro surveille le voyant et gea surveille le module. Gea envoi des push et declanche des photos via les caméras. Le clignotement saturait mon réseau car gea allume aussi les lumières la nuit lorsque le portail manoeuvre. Donc j ai opté pour une variable globale que gea value àchaque clignotement et ensuite gea surveille la variables pour les push et les autres actions. En passant par la variable je passe de 20 push par manoeuvre a 3 ou 4 mais pouvoir limiter de façon native àune réaction gea par tranche de 30 secondes serait pratique. Bien sûr cela marche pour les contrôles non immédiats mais pour prendre les images gea est en mode surveillance instantanée.

Bravo en tout cas pour ce script qui démontre ce qu'une communauté peut construire autour de membres compétents et genereux comme Steven (sans oublier les autres, mais làon parle de GEA)

Lien vers le commentaire
Partager sur d’autres sites

Exemple avec une variable globale ...pour ne faire une action qu'une seule fois

GEA.add(id["PORTE_ENTREE"], -1, "", 						-- Quand la porte d'entrée s'ouvre on dit : "WELCOME au new comer" une fois par jour
    {
    {"If",
        {
        {"Global", "Sortie", "0"},					-- Si la variable Sortie est 0, cela veut dire que qql'un est en train d'entrer
        {"Global", "WD_JM", "TRUE"},					-- Si c'est le Wifi Device de JM est détecté
	{"Global", "Welcome_JM", "OK"}					-- Si Welcome_JM est OK, on pourra dire le message
	}
    },
    {"Time", "17:00", "23:00"},						-- Le soir uniquement 
    {"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"},		-- Seulement les jours de la semaine travaillés
    {"Global", "SONOS_Num_Message", "8"},				-- Message "Bonjour JM" dans la salon 
    {"VirtualDevice", id["SONOS"], 1},	 				-- en TTS
--  {"VirtualDevice", id["PUSH"], 10},					-- Un petit PUSH aux parents si le gosse est àla maison
    {"Global", "Welcome_JM", "NOT_OK"}					-- RAZ pour ne dire le message qu'une seule fois par jour
    })

GEA.add({"Global", "Welcome_JM", "NOT_OK"}, 1, "", 			-- Gestion de la variable "Welcome_JM" pour ne dire le message qu'une fois par jour
	{
	{"Time", "23:01", "23:02"},
	{"Global", "Welcome_JM", "OK"}					-- On ré-autorise après 22h00 (RAZ de la variable)
	})

mais cela oblige àpasser par une variable globale

Lien vers le commentaire
Partager sur d’autres sites

Le problème est le suivant :

 

Chaque fois que le détecteur est activé en mode instantané, la HC2 relance une instance de GEA qui est donc déconnectée des autres. Le seul moyen de faire discuter 2 scènes différentes est de passer par des variables globales ou un module virtuel.

 

Vu l'ampleur du projet, je suis entrain de réfléchir s'il ne serait pas intelligent de lui greffer un module virtuel qui permettrait :

1. De tout suspendre

2. Affiche les X dernières tâches exécutées

2. De suspendre uniquement une tache (demandé par @Shyrka973 il y a mille an)

3. De définir un MaxPar* et un MinPar**

 

* Permettrait d'avoir une tâche qui s’exécute une fois maximum par tranche de X secondes

** Permettrait d'avoir une tâche qui s'exécute au moins une fois toutes les X secondes même si la condition n'est pas remplie

 

Mais bon, tout cela demande du temps et de la patience.

Lien vers le commentaire
Partager sur d’autres sites

Cherchez l'erreur sur ma programmation foireuse de simulation de présence 

	local vac = {"Dates", "14/08/2014", "27/08/2014"}
	local estVac= {"If", {{"Global", "Chauffage", "VACANCES"}}} 

  	GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise", "Sunrise"}} )
  	GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+120", "Sunrise+120"}} )
 	GEA.add( id["LAMPE_ENTREE"], 30, "Simul : allumage entrée #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "01:04", "01:04"}} )
  	GEA.add( id["LAMPE_ENTREE"], 5*30, "Simul : extinction entrée #time#", {estVac, vac, {"turnOff"}} )
  
  	GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+5", "Sunrise+5"}} )
  	GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+90", "Sunrise+90"}} )
  	GEA.add( id["LAMPE_ESCALIER"], 30, "Simul : allumage escalier #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "01:06", "01:06"}} )	
  	GEA.add( id["LAMPE_ESCALIER"], 2*30, "Simul : extinction entrée #time#", {estVac, vac, {"turnOff"}} )
 
	GEA.add( id["LAMPE_NOLAN"], 30, "Simul : allumage Nolan #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+6", "Sunrise+6"}} )
  	GEA.add( id["LAMPE_NORA"], 30, "Simul : allumage Nora #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+16", "Sunrise+16"}} )
  	GEA.add( id["LAMPE_NOLAN"], 10*30, "Simul : extinction Nolan #time#", {estVac, vac, {"turnOff"}} )
  	GEA.add( id["LAMPE_NORA"], 15*30, "Simul : extinction Nora #time#", {estVac, vac, {"turnOff"}} )

  	GEA.add( id["TV"], 30, "Simul : allumage TV #time#", {estVac, vac, {"Inverse"}, {"turnOn"}, {"Time", "Sunrise+60", "Sunrise+60"}} )
  	GEA.add( id["TV"], 60*30, "Simul : extinction TV #time#", {estVac, vac, {"turnOff"}} )
Lien vers le commentaire
Partager sur d’autres sites

Steven,

si je peux me permettre en tant que"Beta testeur" ;) je pense que tu raisonnes en informaticien et non en automaticien ! :)

Il y a une condition pour lancer une instance GEA ... il manque tout simplement une condition pour arrêter l'instance.

Le condition pouvant être la réussite de la réalisation de la dites tâche. (Sorte de bascule RS)

Je pense que c'est plus facile àdire (même sur un clavier de smartphone) qu'àcoder ...mais c'est peut être une piste.

Lien vers le commentaire
Partager sur d’autres sites

Non, un cas réel, je me suis planté dans la programmation de ma simulation et l'erreur est tellement grosse que je suis sà»r que tu vas peiner à  trouver.

 

Pour revenir aux posts précédents, je suis d'accord avec toi mais cela ne répond qu'à  ta problématique qui est d'effectuer une action UNE seule fois. Ou là , en effet, c'est assez simple à  gérer.

Par contre dans le cas demandé qui serait de n'effectuer une action que toutes les X secondes maximum, il faut stocker l'heure de la dernière exécution et la comparer ce que GEA ne fait pas actuellement. Et s'il faut connaitre l'heure d’exécution, il faut être capable de la stocker dans un environnement partagé.

Lien vers le commentaire
Partager sur d’autres sites

@Krikroff

Parce qu'on perdrait les déclenchements instantanés  :(

Par contre, on gagnerait le json, le http et l'environnement partagé.

 

 

@JM13

Incohérence :)

Lien vers le commentaire
Partager sur d’autres sites

Tu peux je pense gérer les déclenchements instantanés avec quelques lignes dans une scène et une variable ...

Envoyé de mon iPhone àl'aide de Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

C'est un peu ce que je voulais pas.

 

A l'origine une seule scène permettait de tout gérer, là , il faudrait, une scène, un module virtuel et une variable globale.

Je trouve GEA déjà  assez, voir trop, compliquer pour les utilisateurs.

 

Mais c'est vrai que cela ouvrirait encore d'autre perspective.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...