Aller au contenu

Optimisation Script : Alertes Incendie / Innondation


D-GK

Messages recommandés

Bonsoir à  tous,

 

Depuis une semaine je découvre la HC2, après avoir installé deux dimmers, j'ai commencé à  mettre un smoke sensor et 4 flood sensor (dont un sous la baignoire). Hier soir en plein film, un bip lointain nous a agacé, en cherchant nous avons fini par nous trouver au dessus de la baignoire. En effet, il semblerait que nos travaux de rénovation ont eu un petit soucis. En checkant sous la baignoire, il y a bien une légère fuite et le détecteur a fait son job  :60:

 

Cela dit, 10 minutes à  chercher dans toutes les pièces d'ou venait ce bruit m'a semblé peu judicieux avec un système domotique de ce niveau  -_-

 

Je commence donc à  bidouiller ma première scène en LUA avec mon ami google, et j'ai pondu le code d'alerte ci-dessous pour lequel j'ai simulé des alertes en jouant sur les variables, ça fonctionne plutôt bien. Je testerai demain en live pour voir si il fonctionne correctement.

 

Cela dit, je trouve que ce script souffre de quelques limitations, j'aimerai donc avoir des avis sur les points suivants :

  • Est-ce que ma manière de détecter le déclencheur de la scène vous semble pertinent ?
  • Le tableau smartphonesId contient l'Id des périphériques sur lesquels je vais pousser la notification push (récupéré après 20 minutes de galère grâce au tuto de lionel http://www.domotique-fibaro.fr/index.php/topic/79-connaitre-lidentifiant-id-dun-module/). En revanche je trouve cela dommage de devoir repassé sur toutes les scènes le jour ou je changerai un périphérique pour modifier ces tableaux. Existe-il une fonction qui permettrait de récupérer ce tableau sans rentrer les valeurs manuellement?
  • Idem pour les mails avec le tableau mailsId?
  • Pour finir, afin de déclencher la scène, si j'ai bien compris il faut mettre les ID des devices sous properties dans l'entête. A nouveau, le jour ou l'on rajoute un flood ou un smoke sensor, il faut repasser sur les scènes. Est-ce qu'il y aurait un moyen de déclencher une scène sur un déclenchement d'un type de device? (je ne sais pas si je suis clair)

Merci d'avance pour votre avis, et pour les autres peut-être que ce code pourra servir à  quelqu'un :

--[[
%% properties
80 value
84 value
88 value
92 value
%% globals
--]]

-- Scene de notification des éléments de sécurité (Flood Sensor, Smoke Sensor,...)

-- En fonction du device ayant déclenché la scène 
-- on envoie une notification personnalisée sur les smartphones

-- On récupère parmi les déclencheurs celui qui a déclenché la scène
-- Liste des périphériques pour notification push
local smartPhonesId = {77,78,95,96}
-- Liste des adresses emails
local mailsId = {46,2}
local trigger = fibaro:getSourceTrigger()
local triggerId = trigger['deviceID']
local deviceType
local deviceName
local roomName
local valueDevice
local alertMessage

-- Fonction qui envoie des notifications push et des emails
function sendAlert(message, subject)
    fibaro:debug('Alert')

    -- Envoi de notification push sur tous les smartphones
    for i = 1, #smartPhonesId do
        fibaro:call(smartPhonesId[i], "sendPush", message)
    end
  
  	-- Envoi de notification mail sur les mails des users
    for i = 1, #mailsId do
        fibaro:call(mailsId[i], "sendEmail", subject, message)
    end
end


-- En cas de lancement manuel on teste avec un Smoke Sensor
if (triggerId==nil)
then
	fibaro:debug('Lancement Manuel')
	triggerId=92
else
  	fibaro:debug('Scene Alerte Trigger : '..triggerId)
end

-- On récupère les infos sur le device déclencheur
deviceType = fibaro:getType(triggerId);
deviceName = fibaro:getName(triggerId);
roomName = fibaro:getRoomName(fibaro:getRoomID(triggerId))
valueDevice =  tonumber(fibaro:getValue(triggerId,'value')) 

fibaro:debug(deviceType);
fibaro:debug(valueDevice)
-- Si le détecteur est en alerte on envoie l'alerte appropriée en fonction du type de device
if (valueDevice==1)
then
	if(deviceType=='com.fibaro.FGFS101')
	then 
  		fibaro:debug('Flood Sensor')
    	message = string.format("Détection Innondation : %q / %q", roomName, deviceName)
    	sendAlert(message,"Innondation")
	elseif (deviceType=='com.fibaro.FGSS001')
	then 
    	message = string.format("Détection Incendie : %q / %q", roomName, deviceName)
    	sendAlert(message,"Incendie")
    else 
    	fibaro:debug(string.format('Device Non reconnu %s : %s',deviceName, deviceType))
	end
-- Sinon on affiche un message d'information  
else
	fibaro:debug('Pas d alerte sur le détecteur '..roomName..'/'..deviceName)
end
	
  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

Bravo pour cette scène... bien complète et fonctionnelle  :)

 

Tu peux peut être utiliser le script "générateur d'id"  qui récupère automatiquement les id des devices...

 

http://www.domotique-fibaro.fr/index.php/topic/3477-g%C3%A9n%C3%A9rateur-did-pour-gea-ou-autre-script/?hl=generateur

Lien vers le commentaire
Partager sur d’autres sites

Merci moicphil, je suis assez content du résultat pour une première scène :) Je vais investiguer avec le code du générateur pour trouver ce qui m'intéresse, mais mon objectif est de ne pas retoucher le code pour rajouter des ID une fois que celui-ci est fonctionnel, ça doit être transparent. A voir si j'arriverais à  atteindre cet objectif et si c'est le cas, je vous partagerai mon retour d'expérience car je suis sà»r que ça peut intéresser du monde :)

 

Et pour la partie de l'entête avec les déclencheurs, un avis ?

Lien vers le commentaire
Partager sur d’autres sites

chapeau bas pour ce premier code en LUA, très propre.

As-tu pensé à  regarder au niveau des paramètres du/des devices pour voir si cela pourrait correspondre à  ton besoin ?

Je n'ai pas de Flood sensor, ni de smooke sensor, mais pour les sondes de température, il y a ceci :

 

post-1320-0-65290000-1445968169_thumb.png

Lien vers le commentaire
Partager sur d’autres sites

Merci jojo, c'était la première fois que je codais en LUA mais j'ai des milliers de lignes de code au compteur  ;) J'avoue que l'environnement de développement (en particulier le debug) mériterait un peu de travail de la part de Fibaro. 

 

Une de mes interrogations est de pouvoir réutiliser des fonctions d'autres scènes afin de ne pas faire le code 10 fois ... Est-ce possible ?

 

Quand tu parles de paramètres, c'est ceux tout en bas de ta capture d'écran sur l'envoi de notification ? Si oui, les notifications standards de Fibaro me semblait limitées afin de localiser l'origine du problème. A mois qu'il soit possible de mettre autre chose que du texte dans la notification, si il est possible de mettre le device et la pièce je suis preneur de l'info.

Lien vers le commentaire
Partager sur d’autres sites

on ne peut pas récupérer des fonctions d'une scène à  l'autre / d'un VD à  l'autre.

La seule chose qui est partagée sont les Variable globales.

 

Il n'est pas possible de personnaliser les notifications par défaut de Fibaro

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Salut, j'ai repris ce magnifique code en l'adaptant chez moi (en gros j'ai simplement mis à  jour les devices id)

Mon problème est que, la valeur remontée par le sensor reste à  nil (en ligne 57 on a: 

valuedevice = fibaro:getValue(triggerId,'value')

cette variable ne passe jamais à  1 (alors que je suis certain que le sensor envoie une alarme car la scene se déclenche bien quand je le mets dans l'eau)

 

En gros, quand je plonge mon sensor dans l'eau, j'ai le debug suivant:

[DEBUG] 12:54:53: Scene Alerte Trigger : 200

[DEBUG] 12:54:53: com.fibaro.FGFS101
[DEBUG] 12:54:53: nil
[DEBUG] 12:54:53: Pas d alerte sur le détecteur Salle de bain/Fuite SdB

 

Donc j'en déduit que 1/tout va bien il détecte bien quand il y a une fuite et déclenche la scène, ok il reconnait bien l'ID en question et son nom.... et puis ARGH problème, la valeur reste à  nil donc il en déduit qu'il n'y a pas d'alerte...

 

Je sèche complètement là  :( un petit coup de main serait le bienvenu

Lien vers le commentaire
Partager sur d’autres sites

Punaise, j'y ai passé des heures, j'ai fouillé les paramètres du sensor, des tests dans tous les sens, et j'ai finalement trouvé le pb.

Donc je me réponds à  moi même: 

ligne 58

-> problème de majuscules dans les variables. Remplacer valuedevice par valueDevice

-> pour pouvoir déclencher la condition de la ligne 63, il faut convertir valueDevice en nombre avec la fonction tonumber()

 

donc en gros, il faut mettre ça en ligne 58

valueDevice = tonumber(fibaro:getValue(triggerId,'value')) 

Lien vers le commentaire
Partager sur d’autres sites

Ah oui effectivement, je me souviens avoir pesté avec ces 2 problèmes également. Cela dit je ne pensais pas que mon code allait être repris :)  je vais corriger le code dans le premier message pour ne pas que ça se reproduise ! C'est d'ailleurs pour cela que dans le tuto que j'ai fait sur les modes de la maison j'ai bien précisé de faire attention aux majuscules. 

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

  • 1 mois après...
×
×
  • Créer...