Aller au contenu
Steven

Gestionnaire d'Evénements Automatique (GEA) – version 6.04

Recommended Posts

1f384.png

Gestionnaire d'Evénements Automatique (GEA) – version 6.04

Version précédente

(BROUILLON en cours de rédaction)
 

Remerciements (commençons par le plus important) :

 

But :
Ce script a pour but de contrôler, à  intervalle régulier, l'état de votre environnement pendant une durée déterminée afin de vous avertir d'éventuel soucis et si nécessaire d'effectuer automatiquement certaines actions.

 

Exemple :

  • Etre informé si la porte du garage est restée ouverte plus de 10 minutes
  • Recevoir une notification et allumer le radiateur s'il fait trop froid depuis 30 minutes
  • Eteindre automatiquement la lumière des WC si cette dernière est allumée plus de 5 minutes
  • Eteindre le frigo et recevoir une notification si ce dernier consomme trop d'électricité ou pas assez

 

Installation :

  • Première installation
    • Créer un scénario en mode LUA
    • Insérer le script ci-joint (gea_6_00.lua))
    • Adapter les dernières lignes à  vos besoins (en dessous de la ligne "CONFIGURATION GENERAL")
  • Passage de GEA 5.x à GEA 6.x
    • Copier le nouveau script dans un nouveau scénario LUA
    • Copier vos anciennes lignes de paramétrage dans la fonction "config()"
    • Copier vos lignes GEA.add(…) dans la fonction "setEvents()"
    • Désactiver votre ancien GEA
  • Mise à jour de GEA 6.x à GEA 6.x
    • Ouvrir la nouvelle version et copié de la ligne "if (not GEA) then " jusqu'à la fin
    • Ouvrir votre version et remplacer de la même ligne "if (not GEA) then" jusqu'à la fin.

 

Configuration :

 

  • Définir l'intervalle de contrôle en secondes
    GEA.checkEvery = <nb secondes> (30 par défaut)
    Exemple : GEA.checkEvery = 30
     
  • Indique la liste des portables par défaut devant recevoir une notification {70, 71}
    GEA.portables = {<id portable> [, <id portable>][, ...]
    Exemple : GEA.portables = {70, 71} 
     
  • Bascule en mode de débogage pour obtenir plus de traces
    GEA.debug = true | false (false par défaut)
    Exemple : GEA.debug = true
     
  • Permet un débogage fort de GEA, chaque erreur provoque l'arrêt de GEA si cette option est à  false (anciennement GEA.catchError)
    GEA.secureAction = true | false (true par défaut)
    Exemple : GEA.secureAction = false -- va afficher les erreurs et stopper GEA
     
  • GEA utilise 3 variables globales. Il est conseillé de laisser leurs noms par défaut mais si vous souhaiter les modifier, voici les paramètres à adapter
    GEA se charge de leur création, ne les créer par manuellement svp.
    GEA.globalvariables   = "GEA_Tasks"
    GEA.pluginsvariables  = "GEA_Plugins"
    GEA.historyvariable = "GEA_History"
     

  

Nouveautés :

 

  • Détection automatique de la langue
  • Création automatique des variables globales nécessaires au fonctionnement de GEA
  • Plus de contrôle (vérification des ID, des actions, …)
  • Plus de 30 nouvelles conditions/actions *
  • Durée à 0 autorisée et exploitée : 
    GEA.add(true, 0, "Démarrage de GEA à #time# le #date#") 
    permet de lancer l'action au démarrage de GEA
     
  • Dans les actions, l'id peut être multiple
    GEA.add(true, 30, "", {"TurnOn", {100, 101, 102}})
    Allumera donc les 3 modules
     
  • Dans les actions, les variables globales peuvent être multiple
    GEA.add(true, 30, "", {"Global", {"VG1", "VG2"}, "Texte"}) 
    VG1 et VG2 prendront donc "Texte" comme valeur
     
  • Sous-commande acceptée : 
    GEA.add( {"Global", "Test1", {"Global", "Test2"}}, 30, "Variable identique si Test1 = Test2" ) 
    GEA.add( true, 30, "On copie la valeur dans une variable globale la valeur du module 101", {"Global", "Test", {"Value", 101}} )

     

  • Pour les développeurs, simplicité d'ajout de nouvelle condition/action
  • Paramètre supplémentaire pour afficher votre message dans la console au lieu du message par défaut GEA.add(condition, durée, message, actions, "<A afficher dans la console>")
  • Scénario Plugin. Moyennant quelques petites lignes de code, vos scénarios peuvent devenir compatibles avec GEA.

 

 

Structure :

  • Pour reprendre la structure du code de Tibahut, nous avons décidé de modifier légèrement la structure de GEA.

    Une fonction "config()" doit / contient  vos paramètres de GEA
    Une fonction "setEvents()" contient vos lignes GEA.add

    Cette modification vous demande donc de modifier votre ancienne version de GEA afin de s'adapter à cette structure.

 

 

Modifications

  • Réécriture complète du code (diminution de plus de 30% du nombre de ligne)
  • GEA.add(…, 30, """", {{""Time"", ""12:00"", ""12:00""}}) 
    devient 
    GEA.add({..., {""Time"", ""12:00"", ""12:00""}}, 30 , """") 
    les conditions Time, Days, Dates, DST, NODST passe au début dans les conditions et non plus dans les actions comme auparavant.
    Cette modification est automatique vous n'avez pas besoin de modifier votre code.
  • La gestion des regex a été modifiée, si vous souhaité utilisé un regex, il vous faudra le préfixé par "#r#"
    Exemple, si la météo est rain ou cloudy  
    GEA.add({"Weather", "#r#rain|cloudy"}, 30, "Pas beau")
  • Lors de déclenchements immédiat, GEA va maintenant vérifier l'ID de TOUTES les conditions pour savoir s'il doit traiter ou non la donnée (anciennement seule la 1ère condition était contrôlée)
  • Détection automatique de la version V4+ ou V3
  • Le nom des modules n’apparaît plus dans la console pour éviter les soucis de performance de la v4, utilisé #name# dans le message pour l'obtenir si besoin
    GEA.add(73, -1, "Le module #name# dans la pièce #room# vient de s'allumer")
    #value[1]# ..#value[9]# n'ont plus de limite (9 maximum sur l'ancienne version)
  • Utilisation du setTimeout au lieu d'un sleep pour le fonctionnement de GEA
  • La fonction userCode() a été modifiée pour correspondre au code de Tibahut soit scindée en config() et setEvents()
  • Possibilité d'utilisé {"Dates", …} avec un format de date par langue
    Exemple : {"Dates", "10/31/2017"}
    Voir GEA.traduction[<lang>].input_date_format ou de préciser directement son propre format dans setEvents() en mettant
    GEA.trad.input_date_format = "mm/dd/yyy"
  • {"Days",…} Prend dorénavant les autres langues que l'anglais et le français. Voir GEA.trad.week_short, GEA.trad.weekend et GEA.trad.weekdays

 

 

Modifications des options

Modifié

{"TurnOn"[, <id>][, <durée>]}

Allume un module puis l'éteint automatiquement après la durée, il peut aussi etre une condition

Modifié

{"TurnOff"[, <id>][, <durée>]}

Eteint un module puis l'allume automatiquement après la durée, il peut aussi estre une condition

Modifié

{"Time", <debut>[, <fin>]}

Si l'heure de fin n'est pas renseignée, on prend la même heure que celle de début

Modifié

{"Dates", <debut>[, <fin>]}

Si la date de fin n'est pas renseignée, on prend la même date que celle de début

Modifé

{"Weather"[, <propriété>], <value>}

Possibilité de préciser une autre propriété (Wind, Temperature, Pressure, Humidity, …)

Modifié

{"Inverse"[, <no condition>]}

Permet de spécifier le numéro de la condition a inverser (1ère par défaut)

Ajouté

{"Switch"[, <id>]}

Allume ou éteint un module selon son état

Ajouté

{"Value2"[, <id>], <valeur>}

Idem à {"Value", …} mais pour la valeur2 (stores vénitiens)

Ajouté

{"setArmed"[, <id>]}

Arme un module

Ajouté

{"setDisarmed"[, <id>]}

Désarme un module

Ajouté

{"Killscenario", <id>}

Tue un scénario selon son identifiant

Ajouté

{"PictureToEmail", <id cam>, <email>}

Envoi l'image de la caméra à une adresse e-mail

Ajouté

{"ApiPut", <url>, <properties>}

Effectue un put

Ajouté

{"ApiPost", <url>, <properties>}

Effectue un post

Ajouté

{"ApiGet", <url>}

Effectue un get de l'url

Ajouté

{"Sleep", <secondes>, <action>}

Effectue une action dans X secondes {"Sleep", 2, {"TurnOn", 73}} utilise setTimeout

Ajouté

{"EnableScenario", <id>}

Active le scénario ou savoir si le scénario est activé

Ajouté

{"DisableScenario", <id>}

Désactive le scénario ou savoir si le scénario est désactivé

Ajouté

{"SetRunConfigScenario, <id>, <runconfig>}

Permet de connaitre/changer le mode d'exécution d'un scénario

Ajouté

{"CountScenes", <id>}

Retourne le nombre de scènes en cours d'exécution

Ajouté

{"DebugMessage", <id>, <elementid>, <message>, <type>}

Ecrit dans la console de l'objet précisé

Ajouté

{"Popup", <titre>, <message>}

Ajoute une popup dans le gestionnaire de notification

Ajouté

{"Filters", <"lights"|"blind">, <action>}

Effectue l'action sur tout les modules de type light ou blind (turnon, turnoff, close, open, …)

Ajouté

{"CentralSceneEvent", <id>, <key>, <attribute>}

Retourne vrai si le CentralSceneEvent déclencheur correspond à ces critères

Ajouté

{"Frequency", <jour>, <frequence>}

Exemple, tous les dimanches ou un dimanche sur 2 {"Frequency", "Sunday", 2}

Ajouté

{"RebootHC2"}

Redémarre la box

Ajouté

{"ShutDownHC2"}

Eteint la box

Ajouté

{"Depend", <taksid>}

Dépend d'une autre tâche, ne sera exécuté que si la "taskid" a préalablement été exécutée

Ajouté

{"VariableCache", <nom variable>, <valeur>}

Permet de stocker une valeur et de la récupérer plus tard (uniquement dans la scène principale)

Ajouté

{"Info", <propriété>}

Retourne la propriété contenu dans /settings/info

Ajouté

{"Hue", <propriété>, <valeur>}

Permet de piloter une ampoule Philips Hue

Ajouté

{"ThermostatLevel", <id>, <valeur>}

Modifie la valeur de votre thermostat

Ajouté

{"ThermostatTime", <id>, <valeur>}

Modifie la durée de votre thermostat

Ajouté

{"Ask", <portable>, <message>, <scenario>}

Affiche une notification demandant l'exécution d'un scénario

Ajouté

{"Doorlock", <id>, <valeur>}

Permet de sécurisé ou non une serrure électronique

Ajouté

{"Or", <condition1>, <condition2>[,…]

Permet de faire un OU sur plusieurs conditions

Ajouté

Ajouté

Ajouté

{"Xor", <condition1>, <condition2>[,…]

{"RoomLights", <nom pièce>, "turnOn"|"turnOff"}

{"SectionLights", <nom sect>, "turnOn"|"turnOff"}

Permet de faire un OU exclusif sur plusieurs conditions

Allume ou éteint une pièce entière selon son nom

Allume ou éteint une section entière selon son nom

Supprimé

{"Groupe", <id groupe>}

Supprimé

Supprimé

{"IF", …}

Supprimé

Attention

{"Global", "", ""}

Devient définitivement "true" (sans les guillemets)

 

 

 

 Vous trouverez ci-joint un fichier syntaxe_GEAV6.lua (écrit par @pepite) qui regroupe toutes les commandes et leurs utilisations. Télécharger le et garder le sous la main, c'est votre bible GEA.

 

Le wiki est en cours de modification ce qui va prendre beaucoup de temps GEA Wiki

 

 

Historique :

 

v.6.01 - 15 décembre 2017

  • fix : vd GEA Alarm
  • fix : Dead - remplacement de wakeUpDeadDevce par wakeUpAllDevices
  • fix : {"Time": "Sunset+10>08:00"}
  • fix : Option "Portable" is missing
  • fix : multiple dates provoquant un table missing
  • fix : correction du Or et XOr en mode instantané
  • fix : fichier syntaxe_GEAV6.lua (ci-joint)
  • add : {"Deads"} pour réveillé tous les noeux morts

 

v.6.02 20 décembre 2017

  • fix : vd GEA Alarm -- double push
  • fix : "Sleep" en conjonction avec un Plugin
  • mod : getMessage pour les plugins et arguments de scénario (traitement des variables #time#, #value#, ...)

 

v.6.03 29 décembre 2017

  • add : #datefull# dans les messages pour obtenir "dimanche 23 décembre 2017"
  • fix : Correction du code pour {"Weather"}
  • add : {"WeatherLocal"} ... identique à {"Weather"} mais retourne les conditions météos selon votre langue

 

v.6.04 7 janvier  2018

  • add : Roomlights ... {"RoomLights", <nom de la pièce>, "turnOn"|"turnOff"}
  • add : Sectionlights ... {"SectionLights", <nom de la séction>, "turnOn"|"turnOff"}
  • mod : correct Weather, erreur ajoutée en V6.03
  • mod : #datefull# erreur sur le dimanche
  • mod : correction déclenchement instantané qui stop la mauvaise tache
  • mod : correction déclenchement instantané avec plusieurs conditions
  • add : Slider
  • mod : Close 100 = tout fermé, 0 tout ouvert
  • mod : Open et Close peuvent recevoir plusieurs ids {"Open", {id1, id2}, valeur}
  • mod : optimisation des déclenchements immédiats (1ère passe)

 

syntaxe_GEAV6.lua

 

 

 

 

gea_6_04.lua

  • Like 15
  • Thanks 3
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

GEA - Vos propres conditions / actions

 

Nous avons tous des idées/besoins différents et cette version de GEA permet d'ajouter (partager) vos propres conditions/actions

 

Condition

Prenons un cas d'école : "Je souhaite être avisé d'une détection de mouvement mais uniquement si je suis en vacances"

Dans ce cas, ce qui m'importe est donc de créer une condition basé sur l'état de mon détecteur et une variable globale qui me dit si je suis en vacances ("StatusPresence").

 

En GEA, on écrirait cela ainsi :

GEA.add( {{"Value+", <id_detecteur>, 0}, {"Global", "StatusPresence", "Vacances"}}, -1, "Détection lors de mes vacances")

 

Mais comme c'est un cas d'école, nous allons rajouter l'option {"Detection", ...} a GEA

function config() 
   ...
   GEA.options.detection = {name="DetectionVacances",
           getValue = function(id_detecteur)
             return fibaro:getGlobalValue("StatusPresence") == "Vacances" and fibaro:getValue(id_detecteur, "value") ~= "0"
           end,
         }
end

Et voilà, maintenant dans je peux utiliser 

GEA.add( {"Detection", <id_detecteur>}, -1, "Détection lors de mes vacances")

 

Action

Prenons un autre cas d'école : "Je souhaite mettre à jour une variable globale et appuyer sur un bouton d'un VD qui va m'envoyer un SMS avec le message"

 

En GEA, on écrirait cela ainsi :

GEA.add( ..., 30, "Détection lors de mes vacances", {{"Global", "Notification", "Mon Message"}, {"VirtualDevice", 30, 1}})

 

Mais comme c'est toujours un cas d'école, nous allons rajouter l'option {"Notification", ...} a GEA

function config() 
   ...
   GEA.options.notification = {name="MaNotification",
           action = function(message)
      			fibaro:setGlobal("Notification", message)
                fibaro:call(30, "pressButton", 1)
           end,
         }
end

Et voilà, maintenant dans je peux utiliser 

GEA.add( ..., 30, "Ma nouvelle notification", {"Notification", "Mon message"})

 

Il est tout à fait possible d'avoir une nouvelle option capable de géré une condition et une action 

function config() 
   ...
   GEA.options.monoption = {name="MonOption",
           getValue = function()
               ...
           end, 
           action = function()
               ...
           end, 
         }
end

 

  • Like 7

Partager ce message


Lien à poster
Partager sur d’autres sites

GEA - Plugin scénario

 

Rendre un scénario compatible GEA 6.x


Pour transformer n'importe quel scénario afin de le rendre compatible avec GEA, il vous suffit de coller au début de votre scénario le code suivant :

if not GEAPlugin then GEAPlugin={}GEAPlugin.version=6.00;local a=fibaro:args()if a then for b,c in ipairs(a)do for d,e in pairs(c)do GEAPlugin[d]=e end end else fibaro:debug("nothing to do")fibaro:abort()end;GEAPlugin.retour=function(f)if GEAPlugin.geamode=="action"then return end;fibaro:startScene(GEAPlugin.geaid,{{gealine=GEAPlugin.gealine},{result=f}})end end

 

Envoyer des infos de GEA vers votre script - Pour exploité votre plugin comme “action” dans GEA

Pour pouvoir exploité les paramètres reçus de GEA voici un exemple à suivre :

Dans GEA :

GEA.add(..., 30, "", {<nom_scenario_sans_espace_ni_caracteres_speciaux>[, <param1>, <param2>, ...]})

Exemple

GEA.add( true , 120, Test de plugin”, {“monscenario”, MonNom”, MonPrenom”, MonAdresse”})

Dans votre scénario, vous pouvez récupéré les paramètres ainsi :

local nom = GEAPlugin.param1 
local prenom = GEAPlugin.param2 
local adresse = GEAPlugin.param3

Envoyer une info de votre script vers GEA - gestion du retour- Pour exploité votre plugin comme “condition” dans GEA

Dans GEA :

GEA.add({<nom_scenario_sans_espace_ni_caracteres_speciaux>[, <param1>, <param2>, ...], <valeur attendue>}, 30, "Retour du plugin #value#")

Exemple

GEA.add( {“monscenario”, MonNom”, MonPrenom”, MonAdresse”, OK”}, 30, Retour = #value#”)

Dans votre scipt, il suffit de mettre à la fin de votre traitement

local nom = GEAPlugin.param1 
local prenom = GEAPlugin.param2 
local adresse = GEAPlugin.param3

if (nom == "MonNom") then 
   GEAPlugin.retour(“OK”)
else
   GEAPlugin.retour(“INCONNU”)
end

Si GEA reçoit en retour de votre script “OK”, la condition sera considérée comme valable.

A l'état actuelle, si votre script met plus de 2.5 secondes à traiter l'information, GEA ignorera le retour de ce dernier. Ceci afin de ne pas trop pénaliser les performances.

 

Attention
N'oubliez pas que GEA va vérifier votre script toutes les 30 secondes (valeur par défaut) 
Si votre script met plus de 2.5 secondes à traiter l'information, GEA ignorera le retour de ce dernier.

 

squelette.lua

  • Like 6

Partager ce message


Lien à poster
Partager sur d’autres sites

GEA - Virtual Device - GEA Alarm (voir ici)

 

GEA - Virtual Device - GEA Status

 

9678700812.png

Voici un petit Virtual Device pour connaître le status de GEA, voir les 5 dernières actions effectuées, stopper/redémarrer GEA.

 

Installation : importer le fichier ci-joint

 

GEA_Status.vfib

  • Like 6

Partager ce message


Lien à poster
Partager sur d’autres sites

GEA - Questions / réponses - FAQ

 

<réservé> en cours de rédaction

Partager ce message


Lien à poster
Partager sur d’autres sites

Yeah, du bon gros boulot ;-) Merci encore @Steven

 

Attention : peut-etre préciser : Pas de support sur ce fil, on sait que GEA génère des pages et des pages ;-)

Modifié par pepite

Partager ce message


Lien à poster
Partager sur d’autres sites

Le principe du GEAPlugin pour interagir avec une autre scène est juste une tuerie... :16:

  • Like 1
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

 Merci au père @Steven et ses lutins @pepite et @tibahut. :13::bravo::13::bravo::13:

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oh @Steven !

Si tu savais

Tout le bien

Que tu nous fais

Avec ton code

Si parfait

 

.D

 

Pour l'air de la chanson... demandez à dieu :P

  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, BenjyNet a dit :

Oh @Steven !

Si tu savais

Tout le bien

Que tu nous fais

Avec ton code

Si parfait

 

.D

 

Pour l'air de la chanson... demandez à dieu :P

C'est dans des moments pareils qu'on regrette nos actes :2: 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Hey les gars, c'est pas @Steven qui a codé.... c'est AlphaZéro.... mais il ose pas le dire :D

Modifié par BenjyNet
Comprendront ceux qui suivent l'actu :)
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ca y'est, j'ai mal à la tête :o

Bon, je vais y aller doucement et garder mon GEA qui fonctionne...

Car je sent que je vais tout pété :lol:

 

En tout cas, vl'a le boulot !!!

C'est clair que certaines actions dans la même ligne vont supprimer des lignes chez moi :lol:

 

Félicitations !!

Partager ce message


Lien à poster
Partager sur d’autres sites

Toutes tes lignes sont 100% compatible avec cette version, tu n'es pas obligé de changer quoi que ce soit.

Partager ce message


Lien à poster
Partager sur d’autres sites

Gros gros boulot là, bravo @Steven et ton équipe de dev et de betas-testeurs :60:

 

Pas mal de nouveautés inédites, c'est top ça !

 

Le VD Alarm est toujours valable ? Ca serait peut-être bien de le remettre dans le fil ?

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Excellent @steven et tous

Merci de vos partage qui nous font tous évoluer dans le bon sens

merci a tous  et vive ce forum

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, Lazer a dit :

Gros gros boulot là, bravo @Steven et ton équipe de dev et de betas-testeurs :60:

 

Pas mal de nouveautés inédites, c'est top ça !

 

Le VD Alarm est toujours valable ? Ca serait peut-être bien de le remettre dans le fil ?

Il est toujours valable mais en cours de réécriture @drboss a eu l'idée de le rendre plus "traduisible". L'actuel fonctionne parfaitement.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

encore une tuerie ! Qui me revend sa HC2 ?

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×