D-GK Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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 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 2
Moicphil Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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
D-GK Posté(e) le 27 octobre 2015 Auteur Signaler Posté(e) le 27 octobre 2015 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 ?
jojo Posté(e) le 27 octobre 2015 Signaler Posté(e) le 27 octobre 2015 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 :
D-GK Posté(e) le 28 octobre 2015 Auteur Signaler Posté(e) le 28 octobre 2015 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.
jojo Posté(e) le 28 octobre 2015 Signaler Posté(e) le 28 octobre 2015 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
D-GK Posté(e) le 28 octobre 2015 Auteur Signaler Posté(e) le 28 octobre 2015 Merci jojo pour ces informations. C'est ce que je craignais c'est bien dommage.
ggpublic Posté(e) le 1 février 2016 Signaler Posté(e) le 1 février 2016 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
ggpublic Posté(e) le 1 février 2016 Signaler Posté(e) le 1 février 2016 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'))
D-GK Posté(e) le 1 février 2016 Auteur Signaler Posté(e) le 1 février 2016 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. 1
ggpublic Posté(e) le 1 février 2016 Signaler Posté(e) le 1 février 2016 ben si, il est vachement bien ton code
kioneoranga Posté(e) le 28 mars 2016 Signaler Posté(e) le 28 mars 2016 Félicitation pour ce premier et super code Mis en place chez moi super simplement
Messages recommandés