Aller au contenu

Quick App - Gestionnaire d'Événements Automatique - GEA pour HC3


Lazer

Messages recommandés

Le 03/07/2022 à 18:47, RS600807 a dit :

Je reçois également un email m'indiquant "suspicious login attempt" avec une adresse IP. 

je rencontre en problème similaire, quand je veux envoyer des messages depuis mon ancienne box (une LD, donc sur le même réseau). 
je n'ai jamais essayé des notif interactives ...

Mais ok depuis des Google Scripts externes => PAS GEA

et pas le dernier firmware beta, car je suis sur le dernier stable

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour,

 

J'ai un problème avec la règle suivante:

GEA.add({"Breached", "Alarme"},-1,"INTRUSION",{"Email","admin","Intrusion détectée","Alarme Fibaro"},"INTRUSION")

Quand l'alarme est déclenchée, GEA se lance bien en mode event, mais il ne trouve pas de règle à exécuter. J'ai le message d'erreur suivant:

[29.07.2022] [01:42:10] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[29.07.2022] [01:42:10] [TRACE] [QA_GEA_28]: GEA 7.37 started by event: mode alarm #2 Alarme breached
[29.07.2022] [01:42:10] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[29.07.2022] [01:42:10] [WARNING] [QA_GEA_28]: No entry to check in automatic mode
[29.07.2022] [01:42:10] [WARNING] [QA_GEA_28]: No entry for this event Alarm[2], please remove it from header

En mode non instantané (si je remplace -1 par 0), la règle s'exécute normalement.

 

Vous avez une idée ?

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Lazer,

 

J'ai créé une configuration test avec seulement 2 règles:

    GEA.add({"Profile", "3"},0,"",{"Filters","Lights","turnOff"},"Mode Vacances -> Extinction lumières")
    GEA.add({"Breached","Alarme"},-1,"ALARME DECLENCHEE",{},"ALARME DECLENCHEE")

 

Voici le log, du lancement de GEA jusqu'au déclenchement de l'alarme:

[02.08.2022] [19:56:20] [TRACE] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:20] [TRACE] [QUICKAPP28]: GEA 7.37 started automatically: mode autostart
[02.08.2022][19:56:20] [TRACE] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Use tools library v2.20
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Check automatic every 30 seconds
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: GEA QuickApp variable : GEA_History
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Loading user code setEvents() :
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: GEA:addEntry(["Profile","3"], 0, "", ["Filters","Lights","turnOff"], "Mode Vacances -> Extinction lumières")
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Add auto #1 : Mode Vacances -> Extinction lumières
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: GEA:addEntry(["Breached","Alarme"], -1, "ALARME DECLENCHEE", {}, "ALARME DECLENCHEE")
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Event triggers: 1
[02.08.2022] [19:56:20] [DEBUG] [QUICKAPP28]: Trigger : alarm #2 Alarme breached
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA started in automatic mode on 02.08.22 at 19:56:21 ...
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: ... check running #0 @0s...
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:encapsule() copy.check() copy.name="Profile" id="3" property="3" value="3" value2="3" value3="3" value4="3"
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:encapsule() copy.getValue() 2 return copy.lastvalue, copy.lastDisplayValue : 3, 3
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:encapsule() copy.check() result = 3
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:check() result = true, 3
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:check() ready = true
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: @0s [Validation*] #1 : Mode Vacances -> Extinction lumières
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]: GEA:check() difftime(0.0) >= 0
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]:    [Started] #1 : Mode Vacances -> Extinction lumières
[02.08.2022] [19:56:21] [DEBUG] [QUICKAPP28]:         [action] ["Filters",["Lights","turnOff"]]
[02.08.2022] [19:56:34] [DEBUG] [QUICKAPP28]: Event : {"type":"AlarmPartitionBreachedEvent","data":{"partitionId":2}}
[02.08.2022] [19:56:34] [DEBUG] [QUICKAPP28]: GEA:init() self.source = {"type":"alarm","msg":"#2 Alarme<\/font><\/b> breached<\/font>","property":"breached","id":2}
[02.08.2022] [19:56:34] [TRACE] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:34] [TRACE] [QUICKAPP28]: GEA 7.37 started by event: mode alarm #2 Alarme breached
[02.08.2022] [19:56:34] [TRACE] [QUICKAPP28]: ----------------------------------------------------------------------------------------------------
[02.08.2022] [19:56:34] [DEBUG] [QUICKAPP28]: GEA:init() self.event = {"id":2}
[02.08.2022] [19:56:34] [DEBUG] [QUICKAPP28]: GEA:addEntry(["Profile","3"], 0, "", ["Filters","Lights","turnOff"], "Mode Vacances -> Extinction lumières")
[02.08.2022] [19:56:34] [DEBUG] [QUICKAPP28]: GEA:addEntry(["Breached","Alarme"], -1, "ALARME DECLENCHEE", {}, "ALARME DECLENCHEE")
[02.08.2022] [19:56:34] [WARNING] [QUICKAPP28]: No entry to check in automatic mode
[02.08.2022] [19:56:34] [WARNING] [QUICKAPP28]: No entry for this event Alarm[2], please remove it from header

 

Lien vers le commentaire
Partager sur d’autres sites

Merci... étrange...

Si je comprends bien, ton "Alarme" c'est la partition n°2 ?

Tu as une autre partition en n°1 ?

 

2 tests que tu peux faire :

- {"Breached", 2} => c'est à dire avec l'ID numérique

- {"Breached"} => c'est à dire sans ID, il devrait déclencher la règle lors de l'intrusion sur la partition n°1 ou n°2

Lien vers le commentaire
Partager sur d’autres sites

Oui "Alarme" est ma partition 2. La partition 1 était la partition par défaut, mais je l'ai effacée.

Quand je remplace "Alarme" par 2 j'ai carrément un crash de GEA (cf. log ci-dessous).

Et si je ne mets aucune id, j'ai le même crash (je n'ai pas mis le log, mais la ligne d'erreur est la même).

 

Précision peut-être importante: la partition 2 "Alarme" est associée à un QA de type "Alarm Partition" et a été créée automatiquement quand j'ai créé le QA. Ce n'est pas une partition créée manuellement.

Je peux refaire le test avec une partition créée manuellement si ça t'est utile.

 

[04.08.2022] [14:03:34] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:03:34] [TRACE] [QA_GEA_28]: GEA 7.37 started automatically: mode autostart
[04.08.2022] [14:03:34] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: Use tools library v2.20
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: Check automatic every 30 seconds
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: GEA QuickApp variable : GEA_History
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: Loading user code setEvents() :
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: GEA:addEntry(["Breached",2], -1, "ALARME DECLENCHEE", {}, "ALARME DECLENCHEE")
[04.08.2022] [14:03:34] [WARNING] [QA_GEA_28]: No entry to check in automatic mode
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: Event triggers: 1
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: Trigger : alarm #2 Alarme breached
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:03:34] [DEBUG] [QA_GEA_28]: GEA has stopped running in automatic mode
[04.08.2022] [14:04:07] [DEBUG] [QA_GEA_28]: Event : {"data":{"partitionId":2},"type":"AlarmPartitionBreachedEvent"}
[04.08.2022] [14:04:07] [DEBUG] [QA_GEA_28]: GEA:init() self.source = {"msg":"#2 Alarme<\/font><\/b> breached<\/font>","type":"alarm","id":2,"property":"breached"}[04.08.2022] [14:04:07] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:04:07] [TRACE] [QA_GEA_28]: GEA 7.37 started by event: mode alarm #2 Alarme breached
[04.08.2022] [14:04:07] [TRACE] [QA_GEA_28]: ----------------------------------------------------------------------------------------------------
[04.08.2022] [14:04:07] [DEBUG] [QA_GEA_28]: GEA:init() self.event = {"id":2}
[04.08.2022] [14:04:07] [DEBUG] [QA_GEA_28]: GEA:addEntry(["Breached",2], -1, "ALARME DECLENCHEE", {}, "ALARME DECLENCHEE")
[04.08.2022] [14:04:07] [ERROR] [QUICKAPP28]: QuickApp crashed
[04.08.2022] [14:04:07] [ERROR] [QUICKAPP28]: main.lua:3165: attempt to index a nil value (field '?')

 

Modifié par Felig
Lien vers le commentaire
Partager sur d’autres sites

@Lazer En regardant la ligne concernée, le crash venait du fait que j'avais mis {} comme action (au lieu de laisser vide entre les deux virgules). En réessayant avec une action non vide, ça fonctionne bien.

 

Donc en résumé:

GEA.add({"Breached", 2},       -1,"ALARME DECLENCHEE",{"turnOn", 146},"ALARME DECLENCHEE") => OK
GEA.add({"Breached"},          -1,"ALARME DECLENCHEE",{"turnOn", 146},"ALARME DECLENCHEE") => OK
GEA.add({"Breached", "Alarme"},-1,"ALARME DECLENCHEE",{"turnOn", 146},"ALARME DECLENCHEE") => Message "No entry for this event Alarm[2], please remove it from header"
Lien vers le commentaire
Partager sur d’autres sites

Arf, et dire que je m'arrachais les cheveux et n'y comprenais rien, je ne regardais pas au bon endroit.

Tant mieux si tu as trouvé.

 

Si je comprends bien, il reste un cas de figure qui ne fonctionne pas, c'est lorsque la partition est identifiée par son nom ?

Il faudra que je regarde si je peux corriger ça.

Lien vers le commentaire
Partager sur d’autres sites

Ton intuition de tester directement avec l'id au lieu du nom était la bonne.

Ça m'a pris un peu de temps mais je crois que j'ai trouvé. Lors de la vérification du déclencheur, GEA remplace "Alarme" par l'id d'un QA qui s'appelle aussi Alarme. Il fait une recherche dans la liste des devices, et pas dans la liste des partitions. Pour régler le problème, j'ai ajouté la ligne suivante dans l'option "Breached" (que j'ai trouvée dans l'option "Armed").

getId     = function(id) return self:findPartitionId(id) end,

Il faut sans doute l'ajouter aussi dans les options "setArmed" et "setDisarmed", mais je te laisse confirmer.

En tous cas avec cet ajout ça marche!

 

Je suggère aussi l'ajout de la ligne suivante pour ceux qui comme moi essayent d'utiliser {} pour remplacer une action vide:

	-- traitement des actions
	if a and type(a) == "table" and #a == 0 then a = nil end -- AJOUT FELIG
	if a then
		if type(a) == "table" and type(a[1]) == "table" then
			for i = 1, #a do
				if type(a[i]) == "table" and a[i][1]:lower()=="if" then

 

Modifié par Felig
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Ah bien joué :60:

 

Effectivement par défaut GEA cherche les noms dans la liste des devices, c'est historique et hérité de GEA sur HC2.

J'avais constaté cet effet de bord lors du passage sur HC3, raison pour laquelle j'ai ajouté la possibilité de définir la fonction getId() pour chaque option, notamment pour tout ce qui ne concerne pas les modules (scènes, partitions d'alarmes, profiles, panneau de climat, etc)

Et donc le fait que cette fonction ne soit pas définie pour Breached, SetArmed et SetDisarmed est un oubli.

 

Merci pour tes suggestions, j'ajouterai tout ça dans une prochaine mise à jour du code.

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

j'ai fait des centaines d'essais, avant de devoir admettre l'impossible : il y aurait un bug ?

 

Voici mon instruction GEA

GEA.add ({"HeatingThermostatSetpoint!", <id_module>, <value>}, 1, "", 
         {"HeatingThermostatSetpoint", id["CHAUF_ECS_THERMOSTAT"],{"VariableQuickApp", id["GESTION_CHAUFFAGE"], "ChECSEco"}})

La condition ne fonctionne pas (avec ou sans ! - je n'ai pas essayé + ou -) et GEA tourne malgré tout comme un charme.

L'action fonctionne parfaitement.

Peux-tu le confirmer ? Merci

Lien vers le commentaire
Partager sur d’autres sites

Hum... je ne peux pas confirmer, je n'ai pas du tout le temps de me replonger dans du LUA en ce moment.

Il faudrait analyser les logs détaillés, éventuellement ajouter des traces supplémentaires...

 

Ne peux-tu pas écrire ta règle autrement pour éviter l'usage du comparateur point d'exclamation ?

Lien vers le commentaire
Partager sur d’autres sites

le problème n'est pas au niveau du !, car même sans

GEA.add ({"HeatingThermostatSetpoint", <id_module>, <value>}, 1, "", 

le problème existe également.

J'ai trouvé une parade pas propre au problème, donc j'aurai de l'eau chaude cet hiver (je ne dépends pas du gaz ...)

 

J'imaginais bien que tu avais peu de temps pour trouver une solution, mais valider que le problème est bien là (ce ne serait pas la première fois que je fais une stupide erreur) est rapide (créer un QA lié de type thermostat qui allume une lampe). Ainsi je saurais si j'ai déconné ou pas ...

Lien vers le commentaire
Partager sur d’autres sites

en fait avec le properties, ce n'était pas aussi simple qu'il n'y paraissait. Je m'explique :

J'avais mis mon thermostat à 50 °C, et donc je faisait un test sur la valeur 50 de la property.

Or dans le json, il avait 50.0, donc c'était 50.0 (et pas 50) qu'il fallait tester.

Et comme je voulais tester que la propriété était <> que la valeur stockée dans une variable d'un QA, j'ai dû rajouter .0 à la valeur de ma variable.

Donc ceci fonctionne :

GEA.add ({"Property!", id["CHAUF_ECS_THERMOSTAT"], "heatingThermostatSetpoint", {"VariableQuickApp", id["GESTION_CHAUFFAGE"], "ChECSEco"}}, 1*60*60, "",

 

Je vais regarder ce pm si je trouve une erreur simple, mais c'est probablement le .0 qui ?manque ? (à tester)

Lien vers le commentaire
Partager sur d’autres sites

Le souci avec la comparaison "!" c'est qu'elle n'est pas numérique, à cause de la variable globale qui est traitée comme une chaine de caractère (string) par la box.

Ton artifice de rajouter .0 a l'air de fonctionner, car du coup tostring(50.0) = "50.0"

Tandis que tostring(50) <> "50.0"

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, jojo a dit :

mais c'est probablement le .0 qui ?manque ? (à tester)

je viens de faire le test avec le .0 ajouté à la variable et ça fonctionne autant avec le ! que sans ...

 

Je pense que ce serait un "problème" général, que si une fonction compare une valeur avec une propriété (autre que "value" ?) numérique, il faudrait voir s'il y a un . dans la propriété, analyser combien de chiffres il y a après le . et modifier, si nécessaire, pour ajouter des .0 (ou .00, ou si la valeur est .5 mais que la propriété attend 2 décimales, mettre .50) à la valeur à comparer.

C'est super compliqué à faire, je viens de faire le plus simple ...

Lien vers le commentaire
Partager sur d’autres sites

J'ai pas regardé le code, mais le plus efficace serait de vérifier si les deux valeurs string à comparer ont un format numérique et si c'est le cas, comparer les nombres au lieu de comparer les valeurs string.

Un truc du genre:

function compare(a, b)
	if tonumber(a) and tonumber(b) then
		return tonumber(a) == tonumber(b)
	else
		return a == b
	end
end
		
a = "50"
b = "50.0"

if compare(a,b) then print("equal") else print("different") end

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Oui bonne idée, il faudra que je regarde si c'est intégrable facilement (sans remettre en cause les autres conditions... je me méfie des effets de bord)

Ou alors il faudrait réfléchir à ajouter un flag permettant de forcer la comparaison numérique (ou à l'inverse, sous forme de chaine de caractère), selon l'effet désiré par l'utilisateur.

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...
Le 03/07/2022 à 18:47, RS600807 a dit :

Bonsoir,

Est-ce que quelqu'un rencontre des pb avec la fonction Ask sous GEA?

GEA.add(true30"", {{"Ask"26"test notif inter""voulez-vous ouvrir ?", {"Close"3585}}, {"Repeat"}}, "test notification interactive")
 

Je reçois bien le message intercatif. Mais dès que je clique sur le "yes" (j'ai testé aussi avec le "no" au cas où !), je reçois une notif instantanément indiquant : "info: sending action "%@" failed" failed.

Je reçois également un email m'indiquant "suspicious login attempt" avec une adresse IP. J'ai vu sur le forum forum.fibaro.com que des personnes ont déjà rencontré ce pb sur des versions antérieures, mais je n'ai pas trouvé de solutions qui résoud le pb...

J'ai l'impression qu'il y a comme un filtrage et que la box ne veut pas accepter les messages entrant. Je suis en version 5.111.48 (beta).

Je précise que je n'ai aucun soucis avec les notifications push "classiques". J'ai également testé la notification interactive en mode bloc  et j'obtiens les mêmes soucis (donc a priori pas un pb lié à GEA)

Quelqu'un rencontre-t-il le même pb ? Un bug de la dernière version  ?

Merci pour vos réponses.

Désolé pour le délai de réponse... as-tu réessayé depuis, ça fonctionne, ou bien toujours le bug ?

Je viens de tester, et à priori tout est OK.
Si tu soupçonne un bug, il faut refaire le test en isolant cette ligne dans ta config, et en activant GEA.debug = true et GEA.lldebug = false dans ta fonction config(), et ensuite partager le log ici.

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...