rahany Posté(e) le 15 juin 2015 Signaler Posté(e) le 15 juin 2015 Bonjour, Comme conseillé par "PEPITE" je mets a dispo le VD pour activer tous les modules types FGMS / FGK en mode "armed" et remonte une info si un des modules n'est pas passé "armed" idem pour le bouton désactivé, avec push SMS. Fichier : Alarm.vfib.zip ex : ci-dessous. -- Pour info -- , J’ai créé ce module grâce au code de SPEEDY, en modifiant une infime partie. Un grand MERCI à lui et aux tutos trouvés sur ce forum qui m'ont été d’une aide précieuse ;o) -- lien du code : http://forum.fibaro.com/index.php?/topic/16666-alarm-scenes-how-to-configure-it/?hl=%2Balarm+%2Bscenes+%2Bhow+%2Bconfigure ------------------ pour avoir un retour chariot dans chaque étiquette j'ai ajouté le code suivant : nom_de_ma_variable = no_de_ma_variable .. ("\n") .. temp_ID !! WARNING !! Fonctionne ==> via la page "Home" par exemple .... Fonctionne PAS ==> en mode débug / Dans le mode avancé de la VD / App smartphone ( iOS ) ------- / Pour avoir une alert SMS sur le retour de l'etat une fois armed / disarmed. -- À ajouter dans le code du bouton "Activé". fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Armed_Devices_ID) -- À ajouter dans le code du bouton "Désactivé". fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Disarmed_Devices_ID) ------ / ci-dessous le code du bouton "Activé" HC2 = Net.FHttp("127.0.0.1",11111); local debug = false --Enable debug.. local Not_Armed_Devices_ID = "" -- Function for getting status of devices Get_Devices_Status = function() -- get response from H2 about all your devices local response ,status, errorCode = HC2:GET("/api/devices") -- Look for error if errorCode == 0 then fibaro:debug("No errors getting devices, decoding answer") else fibaro:debug("Error, code:" .. errorCode) fibaro:debug("Scene aborted") end -- Decode json string to table jsonTable = json.decode(response) end Arm_Devices = function() fibaro:debug("Arming devices") -- Loop trough table and detect sensors.. for key, id in ipairs(jsonTable) do -- If its a sensor then if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end --Enable if you want to arm sensor fibaro:call(jsonTable[key].id, "setArmed", "1") end end end Check_Armed_Devices = function() fibaro:debug("Checking armed devices") -- Loop through the updated table for key, id in ipairs(jsonTable) do if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end if debug then fibaro:debug("Armed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 0 then local temp_ID = jsonTable[key].name Not_Armed_Devices_ID = Not_Armed_Devices_ID .. ("\n") .. temp_ID -- Add your actions here if the device is not armed! end end end end Send_Email = function() --Use this info to send push about not armed devices fibaro:debug("Devices not armed=" .. Not_Armed_Devices_ID ) --Enable to send push, you have non enables sensor ID´s in variable above --fibaro:call(2, "sendEmail","SENSORS"..Not_Armed_Devices_ID) -- ID is id# of your mobile -- Affichage des Device non armé fibaro:call(fibaro:getSelfId(), "setProperty", "ui.noarmed.value", Not_Armed_Devices_ID); end -- Get current status of devices Get_Devices_Status() -- Arm devices Arm_Devices() -- Wait for everything to get in order fibaro:sleep(5*1000) -- wait a while.. -- Get current status of devices Get_Devices_Status() --Have a look if they are all armed. Check_Armed_Devices() --Send info to phone Send_Email() fibaro:debug("Done!") ci-dessous le code du bouton "Désactivé" HC2 = Net.FHttp("127.0.0.1",11111); local debug = false --Enable debug.. local Not_Disarmed_Devices_ID = "" -- Function for getting status of devices Get_Devices_Status = function() -- get response from H2 about all your devices local response ,status, errorCode = HC2:GET("/api/devices") -- Look for error if errorCode == 0 then fibaro:debug("No errors getting devices, decoding answer") else fibaro:debug("Error, code:" .. errorCode) fibaro:debug("Scene aborted") end -- Decode json string to table jsonTable = json.decode(response) end Disarm_Devices = function() fibaro:debug("Disarming devices") -- Loop trough table and detect sensors.. for key, id in ipairs(jsonTable) do -- If its a sensor then if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end --Enable if you want to arm sensor fibaro:call(jsonTable[key].id, "setArmed", "0") end end end Check_Disarmed_Devices = function() fibaro:debug("Checking Disarmed devices") -- Loop through the updated table for key, id in ipairs(jsonTable) do if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end if debug then fibaro:debug("Disarmed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 1 then local temp_ID = jsonTable[key].name Not_Disarmed_Devices_ID = Not_Disarmed_Devices_ID .. ("\n") .. temp_ID -- Add your actions here if the device is not armed! end end end end Send_Push = function() --Use this info to send push about not armed devices fibaro:debug("Devices not Disarmed=" .. Not_Disarmed_Devices_ID ) --Enable to send push, you have non enables sensor ID´s in variable above --fibaro:call(YOUR_ID_GOES_HERE, "sendPush", "SENSORS") -- ID is id# of your mobile -- Affichage des Device non armé fibaro:call(fibaro:getSelfId(), "setProperty", "ui.nodiarmed.value", Not_Disarmed_Devices_ID); end -- Get current status of devices Get_Devices_Status() -- Disarm devices Disarm_Devices() -- Wait for everything to get in order fibaro:sleep(5*1000) -- wait a while.. -- Get current status of devices Get_Devices_Status() --Have a look if they are all armed. Check_Disarmed_Devices() --Send info to phone Send_Push() fibaro:debug("Done!") Voilà , encore un grand merci à Speedy pour son code. 1
mprinfo Posté(e) le 15 juin 2015 Signaler Posté(e) le 15 juin 2015 J'ai fais un tuto a ce sujet pour les étiquettes http://www.domotique-fibaro.fr/index.php/topic/4554-module-virtuel-utilisation-dun-label-etiquette/
rahany Posté(e) le 15 juin 2015 Auteur Signaler Posté(e) le 15 juin 2015 Ok donc si j'ai bien compris, on ne peut pas custom le texte . Bon bin merci qd même pour le retour. Super tuto en tt cas .
pepite Posté(e) le 16 juin 2015 Signaler Posté(e) le 16 juin 2015 Salut, tu peux partager le code stp, ca peut peut-etre interesse quelqu'un ;-) Dont moi d'ailleurs ;-) Merciii
rahany Posté(e) le 16 juin 2015 Auteur Signaler Posté(e) le 16 juin 2015 ok pour le code je le mettrai àdispo.
jojo Posté(e) le 16 juin 2015 Signaler Posté(e) le 16 juin 2015 as-tu essayé en mettant <BR> (avec les < >) dans le texte, làoù tu veux faire ton saut de ligne. Cela fonctionne pour le debug
rahany Posté(e) le 16 juin 2015 Auteur Signaler Posté(e) le 16 juin 2015 Je teste cela demain, et vous tiens informé
rahany Posté(e) le 16 juin 2015 Auteur Signaler Posté(e) le 16 juin 2015 bon je n'ai pas pu résister à tester tt de suite .. et j'ai trouvé la solution à mon problème. Pour le retour à la ligne ou retour chariot dans un Label dans mon cas j'ai mis variable = variable .. ("\n") .. temp_ID En mettant ("\n") ==> mon texte dans le label retour à la ligne pour chaque résultat. Cependant quand on est en mode débug il n'y a pas de retour chariot. Dans le mode avancé de la VD, il y a un retour à la ligne par rapport à la taille de la fenêtre, pour voir un résultat correct il faut tester la VD directement via la page "Home" par exemple .... Voilà j'espere que ça pourra aider certain Je finis ma VD et je posterai le code un peu plus tard. 2
pilou87 Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Je te montre une autre façon de trouvé les modules à armer et désarmer que j'ai trouvé et mélangéen grattant sur le forum ( plus ma sauce) En mode scène, génial pour un tas de choses. local TousLesModules = api.get("/devices") for i = 1, #TousLesModules do local theType = TousLesModules[i].type local Var_Name = TousLesModules[i].name local Ident = TousLesModules[i].id fibaro:debug('ID ' ..Ident..' = '..Var_Name..' - Type = '..theType); end fibaro:debug("--------------------"); En mode module virtuel qui fonctionne chez moiCette méthode évite de mettre un valeur limite pour la boucle de structation des modules.Dans l'exemple que tu as donné, les détecteur de porte fonctionnait mais motion_sensor me remontait des modules qui n'avait rien à voir avec l'alarme.Exemple: RFID de mise sous alarme avec un module universel fibaro qui considère les entrées comme motion_sensoret arme cela si on ne fait pas attention... --Arrêt des portes et des fenêtres HC2 = Net.FHttp("127.0.0.1",11111); fibaro:debug('--------------------------------'); local result, status, errorCode = HC2:GET("/api/devices"); local TousLesModules = json.decode(result); local nbInactif = 0; for i = 1, #TousLesModules do local theType = TousLesModules[i].type local Var_Name = TousLesModules[i].name local Ident = TousLesModules[i].id if (theType == 'com.fibaro.doorSensor' or theType == 'com.fibaro.FGMS001') then fibaro:call( Ident, "setArmed", "0") end end Trés interressant en mode scène pour repérer les Id des téléphones et tablettes 1
pepite Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Sympa tout cela ;-) super messieurs, tu peux poster le screeshot d'un label avec le "/n" pour se faire une idee sans avoir a tester ;-) Ok j'avoue je fais le faineant ;-)
rahany Posté(e) le 17 juin 2015 Auteur Signaler Posté(e) le 17 juin 2015 Bon voilà , j'ai fini le VD que vous trouverez à dispo. Le retour à la ligne fonctionne sur les labels seulement via la page web. Via l'iPhone ( pas test sur Android) mes champs sont vides, dà» au code suivant ==> ("\n"), qui est interprété de manière différente. . Je regarderai cela un peu plus tard. Si une bonne âme peut m'aider sur cette affaire je prends. Ce module sert à activer tous les modules types FGMS / FGK en mode "armed" et me remonte une info si un des modules n'est pas passé "armed" idem pour le bouton désactivé. Je tiens à préciser que ce n'est pas mon CODE, comme déjà évoqué au début du post, il a été fait part SPEEDY, que j'ai mis à ma sauce. @Pilou, super intéressant, mais dans mon cas pas trop utile pour le moment. ( je le garde dans un coin, car il me servira quand je ferai des évolutions, merci pour ton retour ) Ci - dessous le résultat. Messieurs les ROIS du forum, apparemment je n'ai pas les droits pour upload un fichier vfib.json. une petite aide sur cette partie
pilou87 Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Fais un test avec une scène, tu verras c'est vraiment génial de voir tout ce que cela retourne. et trés pratique pour identifier les modules. J'ai trouvé un exemple similaire que j'ai un peu adapté.(Je ne sais plus qui je dois remercier) Je l'ai publié ici car cela peut servir un peu partout.J'ai utilisé cela pour faire un bouton virtuel qui test si on a toujours du courant (super),en combinant les informations échangées avec Krikroff ( super technicien et développeur),pour ne pas trop dégradé l'ensemble des pools Fibaro sur la HC2.
mprinfo Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Je reconnais un bout de mon code lol Si j'ai un peu de temps je te donnerai d'autres façon de le faire Envoyé de mon SM-G900F
MasterBT Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Yop, C'est marrant mais chez bibi le retour chariot ne semble pas s'afficher en web.
rahany Posté(e) le 17 juin 2015 Auteur Signaler Posté(e) le 17 juin 2015 je post le code des boutons. "Activé et Desactivé" en attend l'autorisation d'uploader le ficher complet. Je ne passe pas par la case création d'un VD car il y a un très bon tuto là -dessus le forum. Dans mon cas 2, boutons + 2 étiquettes pour afficher le résultat de chaque action : bouton " activé" HC2 = Net.FHttp("127.0.0.1",11111); local debug = false --Enable debug.. local Not_Armed_Devices_ID = "" -- Function for getting status of devices Get_Devices_Status = function() -- get response from H2 about all your devices local response ,status, errorCode = HC2:GET("/api/devices") -- Look for error if errorCode == 0 then fibaro:debug("No errors getting devices, decoding answer") else fibaro:debug("Error, code:" .. errorCode) fibaro:debug("Scene aborted") end -- Decode json string to table jsonTable = json.decode(response) end Arm_Devices = function() fibaro:debug("Arming devices") -- Loop trough table and detect sensors.. for key, id in ipairs(jsonTable) do -- If its a sensor then if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end --Enable if you want to arm sensor fibaro:call(jsonTable[key].id, "setArmed", "1") end end end Check_Armed_Devices = function() fibaro:debug("Checking armed devices") -- Loop through the updated table for key, id in ipairs(jsonTable) do if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end if debug then fibaro:debug("Armed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 0 then local temp_ID = jsonTable[key].name Not_Armed_Devices_ID = Not_Armed_Devices_ID .. ("\n") .. temp_ID -- Add your actions here if the device is not armed! end end end end Send_Email = function() --Use this info to send push about not armed devices fibaro:debug("Devices not armed=" .. Not_Armed_Devices_ID ) --Enable to send push, you have non enables sensor ID´s in variable above --fibaro:call(2, "sendEmail","SENSORS"..Not_Armed_Devices_ID) -- ID is id# of your mobile -- Affichage des Device non armé fibaro:call(fibaro:getSelfId(), "setProperty", "ui.noarmed.value", Not_Armed_Devices_ID); end -- Get current status of devices Get_Devices_Status() -- Arm devices Arm_Devices() -- Wait for everything to get in order fibaro:sleep(5*1000) -- wait a while.. -- Get current status of devices Get_Devices_Status() --Have a look if they are all armed. Check_Armed_Devices() --Send info to phone Send_Email() fibaro:debug("Done!") et le bouton "désactivé" HC2 = Net.FHttp("127.0.0.1",11111); local debug = false --Enable debug.. local Not_Disarmed_Devices_ID = "" -- Function for getting status of devices Get_Devices_Status = function() -- get response from H2 about all your devices local response ,status, errorCode = HC2:GET("/api/devices") -- Look for error if errorCode == 0 then fibaro:debug("No errors getting devices, decoding answer") else fibaro:debug("Error, code:" .. errorCode) fibaro:debug("Scene aborted") end -- Decode json string to table jsonTable = json.decode(response) end Disarm_Devices = function() fibaro:debug("Disarming devices") -- Loop trough table and detect sensors.. for key, id in ipairs(jsonTable) do -- If its a sensor then if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end --Enable if you want to arm sensor fibaro:call(jsonTable[key].id, "setArmed", "0") end end end Check_Disarmed_Devices = function() fibaro:debug("Checking Disarmed devices") -- Loop through the updated table for key, id in ipairs(jsonTable) do if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end if debug then fibaro:debug("Disarmed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 1 then local temp_ID = jsonTable[key].name Not_Disarmed_Devices_ID = Not_Disarmed_Devices_ID .. ("\n") .. temp_ID -- Add your actions here if the device is not armed! end end end end Send_Push = function() --Use this info to send push about not armed devices fibaro:debug("Devices not Disarmed=" .. Not_Disarmed_Devices_ID ) --Enable to send push, you have non enables sensor ID´s in variable above --fibaro:call(YOUR_ID_GOES_HERE, "sendPush", "SENSORS") -- ID is id# of your mobile -- Affichage des Device non armé fibaro:call(fibaro:getSelfId(), "setProperty", "ui.nodiarmed.value", Not_Disarmed_Devices_ID); end -- Get current status of devices Get_Devices_Status() -- Disarm devices Disarm_Devices() -- Wait for everything to get in order fibaro:sleep(5*1000) -- wait a while.. -- Get current status of devices Get_Devices_Status() --Have a look if they are all armed. Check_Disarmed_Devices() --Send info to phone Send_Push() fibaro:debug("Done!") @MasterBT : regarde à la ligne 60 il y a toutes la ligne pour le retour chariot. à‡a peut peut-être t'aider.
pilou87 Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 @mprinfo me semble bien que j'ai piqué quelques morceaux chez toi, merci encore 1
pilou87 Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 @rhani c'est bien, mais pour les néophytes...Juste une remarque, mais pas méchante. Tu testes la connexion pour voir si tout s'est bien passé ( Je l'ai vu un peu partout).A quoi cela sert-il ? Ca fonctionne àtous les coups ! et de toute façon si ca gaze pas, on a plus qu'àjeter la box.Pour un appel distant, OK...
rahany Posté(e) le 17 juin 2015 Auteur Signaler Posté(e) le 17 juin 2015 La critique est constructive du moment quelle reste positive si qui est le cas. donc je ne vois rien de mal dans ta critique. Ben pour tous dire je ne suis pas un développeur et je ne comprends pas tt dans le code. Donc si il y a moyen, apparement oui, d’optimiser le code, faut pas hésiter à le soumettre. L'intérêt que j'ai pour le check est : Si il y a pas tt les modules armed/disarmed alors ça l'indique le dans un label. Pour mes connecteurs de fenêtre par exemple cela veut dire dans mon cas, la fenêtre n'est pas fermée. c'est vraie que l'option optimisée du code serait : avant de basculer les door_senor ou window_sensor en Armed ==> vérifier s'ils sont tous en mode normal Si oui ==> bascule les tous en armed / si ce n’est pas le cas, ==> alors envoi une notification par Push ou mail. Mais je ne suis pas dev .
pepite Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 sympa le code, peut-etre tres utilse ;-) et merci le "/n" ;-) c'est tres agreable à la vue lol Pour l'optimiser, juste un "if" de plus ;-) merci beaucoup
pilou87 Posté(e) le 17 juin 2015 Signaler Posté(e) le 17 juin 2015 Si tu n'es pas développeur, alors tu as d'autant plus de mérite de 'pondre' un code comme cela 1
rahany Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 Petite mise à jour, du code avec un " SendPush" sur les 2 boutons (Activé / Desactié ) vers la ligne 75. -- À ajouter dans le code du bouton "Activé". fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Armed_Devices_ID) -- À ajouter dans le code du bouton "Désactivé". fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Disarmed_Devices_ID)
rahany Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 Le VD au complet prêt à être importé pour ce qui le souhaite. Alarm.vfib.zip
pepite Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 merci beaucoup rahany. Pour que ce soit plus simple, mets ton VD avec tes explications dans ton 1er Post et le code ;-) du beau boulot, a tester ;-)
rahany Posté(e) le 23 juin 2015 Auteur Signaler Posté(e) le 23 juin 2015 (modifié) merci beaucoup rahany. Pour que ce soit plus simple, mets ton VD avec tes explications dans ton 1er Post et le code ;-) du beau boulot, a tester ;-) Je viens de suivre ton conseil. merci Modifié le 24 juin 2015 par Moicphil Bonjour, merci de ne pas citer un message positionné juste au dessus. 1
Messages recommandés