Je ne sais pas comment ça fonctionne chez vous, mais ici avec tous les dispositifs disponibles, j’ai beaucoup de contrôles de fonctionnement possibles. Au fil du temps, j’ai créé des scripts pour contrôler la fermeture de la porte du garage, l’éclairage extérieur ou l’alimentation des congélateurs. Mais à chaque fois c’était un nouveau script, pas tout à fait le même que le précédent et avec des notifications variables. Las de la multiplication des scripts, j’ai décidé de tous les regrouper dans un seul lua que je fais évoluer au fil des besoins.
J’ai choisi de mettre 3 types de messages d’alerte (sms, mail et notification) afin de ne pas rater un problème ! et comme mes alertes sont conçues pour être génériques, je n’y touche plus, j’ai juste le contenu des messages à changer en fonction du contexte.
Ce qui est fonctionnel aujourd’hui :
- Détecteur de fuites d’eau au sol dans la cuisine et le cellier
- Détection de coupure d’alimentation électrique pour les congélateurs
- Détecteur d’eau dans les regards devant le garage et la véranda + activation des pompes
- Eclairage extérieur allumé et/ou éclairage de l’entrée depuis plus de 20 minutes + extinction des feux
- Alarme jour activée alors que la porte du garage est ouverte + fermeture de la porte
- Porte du garage et/ou portail ouvert alors qu’il est 21h15 + fermeture des portes
- Porte du garage et/ou portail ouvert depuis plus de 10 minutes alors qu’il fait nuit + fermeture des portes
Ce que j’ai encore dans les tuyaux :
- Prises des congélateurs opérationnelles mais consommation anormale (porte ouverte)
- Température anormale dans les congélateurs
- Température supérieure à 40° dans la maison (pré-incendie)
Si vous avez d’autres idées, je suis preneur 🙂
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
--[[ script d'alerte générique pour de nombreux cas d'anomalies (fuite d'eau, coupure d'alimentation, garage ouvert, ...) qui envoie un sms, un mail et une notification pushbullet 10/09/2018 : Fusion des scripts cellier/cuisine et congel blanc/gris en un seul script + suppression pushover et normalisation des envois sms/mail/pushbullet 11/05/2020 : Ajout des pompes pour les regards du garage et de la véranda 24/10/2020 : Ajout du contrôle de l'éclairage extérieur et de celui de l'entrée 02/11/2020 : Ajout du contrôle de l'ouverture du garage si l'alarme est activée Ajout du contrôle de l'ouverture du garage et du portail à 21h15 Ajout du contrôle de l'ouverture du garage et du portail pendant plus de 10 minutes la nuit à rajouter : contrôle par rapport à la consommation électrique habituelle contrôle de hausse anormale des températures (pré incendie) --]] -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') -- Adresses mail à utiliser pour l'envoi des mails local mail = uservariables["mail"] -- Nom qui identifie la maison où sont détectées les anomalies local nom = uservariables["nom"] -- index des commandArray local i = 1 commandArray = {} if ((devicechanged['Detecteur d’Eau Cellier'] == 'On') or (devicechanged['Detecteur d’Eau Cuisine'] == 'On') or (devicechanged['Prise Congel Gris'] == 'Off') or (devicechanged['Prise Congel Blanc'] == 'Off') or (devicechanged['Detecteur Pompe Garage'] == 'On') or (devicechanged['Detecteur Pompe Veranda'] == 'On')) or ((otherdevices['Eclairage Exterieur'] == 'On') and (lastSeen('Eclairage Exterieur') > 1200)) or ((otherdevices['Entree Prise on/off'] == 'On') and (lastSeen('Entree Prise on/off') > 1200)) or ((otherdevices['Alarme jour'] == 'On') and (otherdevices['Garage'] == 'Open')) or ((otherdevices['Garage'] == 'Open') and ((heures == 21) and (minutes == 15))) or ((otherdevices['Portail'] == 'Open') and ((heures == 21) and (minutes == 15))) or ((otherdevices['Garage'] == 'Open') and nightTime and (lastSeen('Garage') > 600 and lastSeen('Garage') < 660)) or ((otherdevices['Portail'] == 'Open') and nightTime and (lastSeen('Portail') > 600 and lastSeen('Portail') < 660)) then if otherdevices['Detecteur d’Eau Cellier'] == 'On' then objet = "Attention Fuite d'Eau dans le Cellier de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention il y a une fuite d'eau dans le cellier de "..nom.." " end if otherdevices['Detecteur d’Eau Cuisine'] == 'On' then objet = "Attention Fuite d'Eau dans la Cuisine de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention il y a une fuite d'eau dans la Cuisine de "..nom.." " end if otherdevices['Prise Congel Gris'] == 'Off' then switchOn('Prise Congel Gris') objet = "Attention Alimentation du Congélateur Gris de "..nom.." arrêtée depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention Alimentation du Congélateur Gris de "..nom.." arrêtée, une commande d'activation a été envoyée. " end if otherdevices['Prise Congel Blanc'] == 'Off' then switchOn('Prise Congel Blanc') objet = "Attention Alimentation du Congélateur Blanc de "..nom.." arrêtée depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention Alimentation du Congélateur Blanc de "..nom.." arrêtée, une commande d'activation a été envoyée. " end if otherdevices['Detecteur Pompe Garage'] == 'On' then switchOnFor('Prise Pompe Garage', 60) switchOff('Detecteur Pompe Garage') objet = "Attention l'eau monte dans le regard du garage de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention l'eau monte dans le regard du garage de "..nom.." " end if otherdevices['Detecteur Pompe Veranda'] == 'On' then switchOnFor('Prise Pompe Veranda', 60) switchOff('Detecteur Pompe Veranda') objet = "Attention l'eau monte dans le regard de la veranda de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention l'eau monte dans le regard de la veranda de "..nom.." " end if otherdevices['Eclairage Exterieur'] == 'On' then switchOff('Eclairage Exterieur') objet = "Attention Eclairage extérieur de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention l'éclairage extérieur de "..nom.." est allumé depuis plus de 20 minutes, il vient d'être éteint." end if otherdevices['Entree Prise on/off'] == 'On' then switchOff('Entree Prise on/off') objet = "Attention Eclairage de l'entrée de "..nom.." depuis le "..date_jour.." à "..heure_verif.." " corps = "Attention l'éclairage de l'entrée de "..nom.." est allumé depuis plus de 20 minutes, il vient d'être éteint." end if ((otherdevices['Alarme jour'] == 'On') and (otherdevices['Garage'] == 'Open')) then switchOff('Garage') objet = "Attention le garage de "..nom.." est ouvert le "..date_jour.." à "..heure_verif.." " corps = "Attention le garage de "..nom.." est ouvert alors que l'alarme jour est activéée, il vient d'être refermé." end if ((otherdevices['Garage'] == 'Open') and ((heures == 21) and (minutes == 15))) then switchOff('Garage') objet = "Attention le garage de "..nom.." est ouvert le "..date_jour.." à "..heure_verif.." " corps = "Attention le garage de "..nom.." est ouvert alors qu'il est 21h15, il vient d'être refermé." end if ((otherdevices['Portail'] == 'Open') and ((heures == 21) and (minutes == 15))) then switchOff('Portail') objet = "Attention le portail de "..nom.." est ouvert le "..date_jour.." à "..heure_verif.." " corps = "Attention le portail de "..nom.." est ouvert alors qu'il est 21h15, il vient d'être refermé." end if ((otherdevices['Garage'] == 'Open') and nightTime and (lastSeen('Garage') > 600 and lastSeen('Garage') < 660)) then switchOff('Garage') objet = "Attention le garage de "..nom.." est ouvert le "..date_jour.." à "..heure_verif.." " corps = "Attention le garage de "..nom.." est ouvert depuis plus de 10 minutes alors qu'il fait nuit, il vient d'être refermé." end if ((otherdevices['Portail'] == 'Open') and nightTime and (lastSeen('Portail') > 600 and lastSeen('Portail') < 660)) then switchOff('Portail') objet = "Attention le portail de "..nom.." est ouvert le "..date_jour.." à "..heure_verif.." " corps = "Attention le portail de "..nom.." est ouvert depuis plus de 10 minutes alors qu'il fait nuit, il vient d'être refermé." end -- Corps du sms à envoyer positionné dans la variable sms_texte -- Type de traitement indiqué dans la variable sms_traitement -- Mise à On du switch virtuel d'envoi des sms commandArray[tonumber(i)]={['Variable:sms_texte']= tostring(objet)} i = i + 1 commandArray[tonumber(i)]={['Variable:sms_traitement']= 'Anomalie'} i = i + 1 switchOn('sms') -- Envoi du mail commandArray[tonumber(i)]={['SendEmail']=''..objet..'#'..corps..'#'..mail..''} i = i + 1 -- Envoi pushbullet (possiblité d'envoyer à plusieurs destinataires) -- Valorisation des variables pour l'envoi de la notification pushbullet systeme = 'pushbullet' -- Envoi de la notification par Domoticz avec les paramètres valorisés (clé utilisateur + clé API) commandArray[tonumber(i)]={['SendNotification']=''..objet..'#'..corps..'####'..systeme..''} i = i + 1 print (corps) end return commandArray |
A noter dans le script : la gestion des commandArray avec index pour éviter que des commandes soient perdues et l’envoi des sms via ma passerelle.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
-- Script pour l'envoi d'un sms à un ou plusieurs destinataires -- 10/06/18 : Ajout de plusieurs types de traitement (Alarme/Intrusion jour/Intrusion nuit) -- pour différencier les destinataires -- 17/09/2019 : Ajout d'un traitement de type Help avec 3 destinataires possibles -- 15/05/2020 : Ajout de l'origine dans les sms (nom) commandArray = {} -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') -- Variables locales à utiliser -- Les variables locales sont valorisées grace aux variables utilisateurs -- Adresse IP de la passerelle sms local ip = uservariables["ip_sms_passerelle"] -- Type de traitement à réaliser (Alarme ou Intrusion jour ou Intrusion nuit) local tr = uservariables["sms_traitement"] -- nom de la machine pour identifier l'origine des sms local nom = uservariables["nom"] -- Mise en forme de l'horodatage pour le sms + texte du sms -- Le contenu du sms est stocké dans la variable "sms_texte" horo_sms = '['..nom..'] '..date_jour..' à '..heure_sms..'\n' -- Texte à envoyer texte_sms = uservariables["sms_texte"] reponse = horo_sms..' '..texte_sms if (devicechanged['sms'] == 'On') then print ('sms traitement : '..tr..'') -- Traitement Alarme if tr == 'Alarme' then sms1 = uservariables["sms-1"] sms2 = uservariables["sms-2"] end -- Alarme -- Traitement Anomalie if tr == 'Anomalie' then sms1 = uservariables["sms-1"] -- sms2 = uservariables["sms-2"] end -- Anomalie -- Traitement Intrusion jour if tr == 'Intrusion jour' then sms1 = uservariables["sms-intrusion-jour-1"] sms2 = uservariables["sms-intrusion-jour-2"] end -- Intrusion jour -- Traitement Intrusion nuit if tr == 'Intrusion nuit' then sms1 = uservariables["sms-intrusion-nuit-1"] sms2 = uservariables["sms-intrusion-nuit-2"] end -- Intrusion nuit -- Traitement Help if tr == 'Help' then sms1 = uservariables["help-sms-1"] sms2 = uservariables["help-sms-2"] sms3 = uservariables["help-sms-3"] end -- Help if sms1 ~= nil and sms1 ~= "" then commandArray[1]={['OpenURL']='http://'..ip..'/send.html?smsto='..sms1..'&smsbody='..url_encode(reponse)..'&smstype=sms'} end -- if sms1 if sms2 ~= nil and sms2 ~= "" then commandArray[2]={['OpenURL']='http://'..ip..'/send.html?smsto='..sms2..'&smsbody='..url_encode(reponse)..'&smstype=sms'} end -- if sms2 if sms3 ~= nil and sms3 ~= "" then commandArray[3]={['OpenURL']='http://'..ip..'/send.html?smsto='..sms3..'&smsbody='..url_encode(reponse)..'&smstype=sms'} end -- if sms3 end -- if sms on return commandArray |
Là aussi, un seul script pour plusieurs types de traitement.
