Gestionnaire d’Evénements Automatique (GEA)

Paru sur domotique-info.fr et domotique-fibaro.fr

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.

Voici quelques exemples concrets d’utilisation en lieu et place de long discours soporifique.

  • Éteindre automatiquement la TV après 1 heure d’utilisation entre 16h30 et 18h30
  • Être informé si la porte du garage est ouverte depuis plus de 10mn
  • Allumé automatiquement les lampes extérieur sur détection de mouvement mais uniquement entre le couché et le lever du soleil et seulement les jours de semaine

Historique

A l’origine de ce script, je désirais juste savoir si la porte de mon garage était toujours ouverte. La plupart des scripts capturent l’ouverture de la porte puis 10mn après vérifie si cette porte est toujours ouverte. Mais que ce passe t-il si la porte a été fermée pendant ces 10mn … rien. Cela n’est donc pas satisfaisant. La solution est donc d’aller vérifier à intervalle régulier (toutes les 30 secondes) si la porte est toujours ouverte et au bout de 10 minutes envoyer un message.

 

Evolutions

Suite à la mise à disposition de mon petit script pleins de demandes sont arrivées : « le script peut-il directement fermer la porte », « je n’utilise pas de détecteur mais une variable global », « entre 12h et 16h c’est normale qu’il soit ouvert mais pas après », « uniquement le week-end », …

Plein de questions, plein de réponses qui ont fait grossir le code de ce petit script pour en faire à ce jour un script de 1000 lignes qui permet de piloter vos volets selon la température/luminosité, fermer une porte, allumer une lumière, recevoir des notifications si surconsommation, … en bref, de quoi s’amuser.

 

Comment cela fonctionne

Très simplement. Vous écrivez des commandes (pas toujours aisé, j’en conviens), GEA va vérifier toutes les 30 secondes (paramétrable) si votre commande doit être exécutée ou non.

Exemple simple de commande :

GEA.add(9, 10*60, "", {{"turnOff"}})
-- Si la lampe du local (id 9) est allumée depuis plus de 
-- 10 minutes (10*60 secondes) on l'éteint.
GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}})
-- Si la porte du garage (id 28) est ouvertes plus de 10 minutes 
-- on averti (message push) et on répète toutes les 10 minutes 
-- jusqu'à ce que la porte soit fermée.

Plus compliqué

GEA.add(66, 10*60, "Chambre Kendra allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}})
GEA.add(66, 20*60, "Chambre Kendra extinction", {{"Time", "22:00", "06:00"}, {"turnOff"}})
--Si la lumière de ma fille (id 66) est allumée plus de 10mn 
-- entre 22.00 et 06:00 alors je diminue son intensité sur 20% 
-- et j'envoi un message push. 
-- Après 20mn, toujours entre 22.00 et 06:00, j'éteint automatiquement la lampe.

Autre usage plus basé sur la sécurité

GEA.add({"Sensor+", 19, 100}, 1*60, "Consommation excessive de la WMC #value#",{{"turnOff"}})
-- Si la consommation électrique de ma VMC est supérieure à 100W 
-- j'envoi un message push et je l'éteint

Vous l’aurez compris, le but est de pouvoir faire un scénario compliqué .. en une ligne seulement.

D’ailleurs imaginez comment écrire un tel scénario : « Fermer les volets 1, 2 et 3 de 50%,  si la luminosité extérieur (capteur id 21) est supérieur à 400lux plus de 20mn, le lundi et vendredi, entre 12:00 et 14:00 ou entre 16:00 et 18:00, seulement en été et pour finir m’envoyer un email (utilisateur 2) pour me dire à quel heure cela c’est produit. Bonne chance 🙂 Allez, je vous aide, avec GEA, cela nous donne :

GEA.add({"Value+", 21, 400}, 20*60, "",{{"Close", 1, 50},{"Close", 2, 50},{"Close", 3, 50}, {"Days", "Monday, Friday"}, {"Time", "12:00", "14:00"}, {"Time", "16:00", "18:00"}, {"DST"}, {"Email", 2, "Fermeture des volets de 50% à #time#, le #date#"}})

 

Performance

Au lieu d’avoir X scénarios que votre box doit gérer, GEA regroupe la plupart de ceux-ci en un seul. GEA ne contient pas de code inutile, les conditions sont vérifiées avec priorités et la mémoire est gérée correctement. En 3 centièmes de secondes ma box contrôle l’intégralité de mes 40 lignes de codes. Les erreurs sont aussi contrôlées. C’est-à-dire que si par malheur vous insérer une commande provoquant une erreur, l’exécution de cette dernière ne va arrêter le script. Vous pouvez donc dormir tranquille.

 

Installation

Ajouter une nouvelle scène en mode LUA, copiez le contenu de ce fichier GEA directement à la place de votre scène.

Tout à la fin vous trouverez ce code, c’est là que vous devez intervenir.

-- ==================================================
-- A VOUS DE JOUER
-- ==================================================
GEA.checkEvery = 30 -- On vérifie toutes les X secondes
GEA.portables = {99} -- Liste des portables devant recevoir une notification {70, 71}

..

-- NE PAS OUBLIER - Démarrage du scénario 
GEA.run()

Insérer votre code, enregistrer … et regarder la magie opérer.

 

Tutoriel et Support

Le support est ici : domotique-fibaro.fr Support GEA

Les futures mise à jour et la documentation complète sont ici : domotique-fibaro.fr – GEA

 

Un cas concret

Pour finir, voici un cas concret et complet de l’usage de GEA … le mien, 40 lignes de code en tout et pour tout pour domotiser l’ensemble de ma maison :

-- ==================================================
-- A VOUS DE JOUER
-- ==================================================
GEA.checkEvery = 30 -- On vérifie toutes les X secondes
GEA.portables = {99} -- Liste des portables devant recevoir une notification {70, 71}
GEA.debug = false -- Affichage des traces dans la console

local id = {
 DETECTEUR = 85,
 DETECTEUR_GARAGE= 28, 
 LAMPE_LOCAL = 69,
 LAMPE_NOLAN = 27,
 LAMPE_KENDRA = 31,
 LAMPE_NORA = 32,
 WMC = 19,
 TEMP_SALON = 86,
 TV = 82,
 LAMPE_ESCALIER = 66,
 LAMPE_ENTREE = 65,
 PORTE_ENTREE = 108,
 PORTE_NORA = 5,
 PORTE_NOLAN = 26,
 PORTE_KENDRA = 6,
 PORTE_TERRASSE = 9,
 PORTE_LOCAL = 91,
 POELE = 33,
 SECHE_SERVIETTE = 39,
 SIRENE = 30,
 SMOKE_SENSOR = 16,
 SURPRESSEUR = 107,
 LUX = 87,
 VD_SALON = 22,
 VD_KAROTZ = 29,
 VD_SENSE = 93
}

-- Le scénario enverra un push toutes les 10mn tant que la porte sera ouverte et fait parler mon lapin
GEA.add( id["DETECTEUR_GARAGE"], 10*60, "La porte du garage est ouverte depuis plus de #duration#", {{"Global", "Karotz", "La porte du garage est ouverte depuis #durationfull#"},{"VirtualDevice", id["VD_KAROTZ"],"1"},{"Repeat"}})
-- Usage immédiat. La porte du garage s'ouvre, mon Karotz m'averti et ses oreilles basculent en direction du garage
GEA.add( id["DETECTEUR_GARAGE"], -1, "", {{"If", {{"Global", "GEA_Garage", "ON"}}},{"Global", "Karotz", "La+porte+du+garage+est+ouverte"},{"VirtualDevice", id["VD_KAROTZ"],"1"},{"Slider", id["VD_KAROTZ"], "4", "65"},{"Slider", id["VD_KAROTZ"], "5", "65"}})
-- reset des oreilles à la fermeture du garage
GEA.add( id["DETECTEUR_GARAGE"], -1, "", {{"Inverse"}, {"VirtualDevice", id["VD_KAROTZ"], "7"}})
-- Avertissement push si la porte du garage s'ouvre à des heures non souhaitée
GEA.add ( id["DETECTEUR_GARAGE"], -1, "Ouverture de la porte du garage à #time#", {{"Time", "09:00", "16:00"}, {"Days", "Monday, Tuesday, Thursday, Friday"}})

-- Eteindre automatiquement le local technique après 10mn pas de message push
GEA.add( id["LAMPE_LOCAL"], 10*60, "", {{"turnOff"}})
-- Allumage et éxtinction automatique de la lumière du local à l'ouverture de la porte
GEA.add( id["PORTE_LOCAL"], -1, "", {{"turnOn", id["LAMPE_LOCAL"]}})
GEA.add( id["PORTE_LOCAL"], -1, "", {{"Inverse"},{"turnOff", id["LAMPE_LOCAL"]}})
-- Chambre enfants ... uniquement si la lumière des escaliers est éteinte
-- Si une chambre d'enfant est allumée entre 22h et 6h, après 10mn on diminue l'intensité à 20% et
-- après 20mn on éteint.
local lampeEscalierEteinte = {"If", {{"Value-", id["LAMPE_ESCALIER"], 1}}}
GEA.add( id["LAMPE_NOLAN"], 10*60, "Chambre Nolan allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}})
GEA.add( id["LAMPE_NOLAN"], 20*60, "Chambre Nolan extinction", {lampeEscalierEteinte, {"Time", "22:00", "06:00"}, {"turnOff"}})
GEA.add( id["LAMPE_KENDRA"], 10*60, "Chambre Kendra allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}})
GEA.add( id["LAMPE_KENDRA"], 20*60, "Chambre Kendra extinction", {lampeEscalierEteinte, {"Time", "22:00", "06:00"}, {"turnOff"}})
GEA.add( id["LAMPE_NORA"], 10*60, "Chambre Nora allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}})
GEA.add( id["LAMPE_NORA"], 20*60, "Chambre Nora extinction", {lampeEscalierEteinte, {"Time", "22:00", "06:00"}, {"turnOff"}})

-- Si la température du salon est trop basse depuis plus de 30mn
GEA.add({"Value-", id["TEMP_SALON"], 18}, 30*60, "Il fait froid au salon #value# à #time#")
-- Gestion de la VMC --
GEA.add({"Sensor+", id["WMC"], 100}, 1*60, "Consommation excessive de la WMC #value#")

-- Si la température du salon est inférieur à 23° on arrète la VMC pour éviter un rafraîchissement excessif --
GEA.add({"Value-", id["TEMP_SALON"], 23}, 10*60, "", {{"turnOff", id["VMC"]}, {"Time","23:00","06:00"}})
-- On rallume la VMC si elle est éteinte.
GEA.add(id["VMC"], 1*60, "", {{"Inverse"},{"turnOn"},{"Time","06:00", "06:05"}})

-- Les lundis et jeudi, je souhaite savoir quand la de ménage arrive
GEA.add( id["PORTE_ENTREE"], -1, "Porte entrée ouverte à #time#", {{"Days","Monday,Thursday"}, {"Time","16:00","19:30"}})
-- Eteindre la lampe d'entrée si pas de présence plus de 10 mn.
GEA.add(id["LAMPE_ENTREE"], 10*60, "", {{"turnOff",65}, {"If",{{"Value-",id["DETECTEUR"],1}}}})

-- Vérification quotidienne des piles de tout les équipements 
GEA.add({"Batteries", 60}, 24*60*60, "", {{"Repeat"}})

-- Vérification des modules parfois "dead"
GEA.add({"Dead", id["POELE"]}, 5*60, "", {{"WakeUp", id["POELE"]}}) -- Poêle
GEA.add({"Dead", id["SECHE_SERVIETTE"]}, 5*60, "", {{"WakeUp", id["SECHE_SERVIETTE"]}}) -- Sèche-serviette 
GEA.add({"Dead", id["LAMPE_LOCAL"]}, 5*60, "", {{"WakeUp", id["LAMPE_LOCAL"]}}) -- Plafonnier local technique

-- Karotz
-- On se réveille à 7h00
GEA.add({"Global", "", ""}, 30, "", {{"VirtualDevice", id["VD_KAROTZ"], "21"},{"Time", "07:00", "07:06"}, {"Days", "Monday, Tuesday, Thursday, Friday, Weekend"}})
-- On se réveille à 9h00 le mercredi afin qu'il n'annonce pas l'ouverture du garage quand Madame va travailler
GEA.add({"Global", "", ""}, 30, "", {{"VirtualDevice", id["VD_KAROTZ"], "21"},{"Time", "09:00", "09:06"}, {"Days", "Wednesday"}})
-- On éteint la led quand on regarde la TV
GEA.add(id["TV"], 5*60, "", {{"Slider", id["VD_KAROTZ"], "9", "0"},{"Slider", id["VD_KAROTZ"], "10", "0"},{"Slider", id["VD_KAROTZ"], "11", "0"}, {"Repeat"}})
-- On rallume après la TV
GEA.add(id["TV"], 60, "", {{"Inverse"}, {"VirtualDevice", id["VD_KAROTZ"], "14"}})
-- On s'endort à 23h30
GEA.add({"Global", "", ""}, 30, "", {{"VirtualDevice", id["VD_KAROTZ"], "20"},{"Time", "23:30", "23:35"}})
-- Eteindre TV pour aller à l'école
GEA.add(id["TV"], 30, "", {{"turnOff"},{"Time", "08:10", "08:15"},{"Days","Monday,Tuesday,Thursday,Friday"}})

-- Surpresseur
GEA.add({"Sensor+", id["SURPRESSEUR"], 400}, 5*60, "Supresseur éteint, vérifiez le niveau du puit", {{"turnOff", id["SUPRESSEUR"]},{"Global", "Karotz", "Vérifier l eau du puit. Surpresseur éteint"},{"VirtualDevice", id["VD_KAROTZ"],"1"}})

-- NE PAS OUBLIER - Démarrage du scénario
GEA.run()

N’hésitez pas à demander du support si besoin.

Banner Fibaro My Domotique

Laisser un commentaire