Moicphil Posté(e) le 13 juillet 2014 Signaler Posté(e) le 13 juillet 2014 Module Virtuel Alarme Avancée Voici un module virtuel qui va vous permettre de gérer une " alarme " avec sélection de la zone à contrôler. Ce module est couplé à une seule et unique scène. Avant d'activer la zone choisie, vous aurez préalablement renseigné les sensors à contrôler. Possibilité, pour chaque zone, d'exclure temporairement un ou plusieurs sensors de la zone. Possibilité de lancer un test de l'ensemble des sensors déclarés dans la HC2. Ceci pour vérifier leur état ( ouvert ou fermé ) Un mode "Panic" fonctionnant sur un double-clic (paramétrable) Principe de fonctionnement : Appui sur la zone souhaitée...si les sensors déclarés sont dans l'état "fermé", on active le mode choisi (via une variable) puis push pour confirmer la mise en route. Si un ou des sensors sont ouverts, on reste en mode "arrêt", puis push pour nous signaler quel(s) sensor est ouvert(s). La scène contrôle en continu l'état des variables et des sensors. si passage en "ouvert" pendant qu'une zone est active, les actions se feront selon votre choix selon si votre sensor est "ouvert" ou "ouvert et armé" Nous avons donc 7 scènes en une . Dans ce module, pour "regrouper", j'ai intégré le pilotage de mes automatismes, mais vous pouvez bien évidement supprimer les boutons et labels dédiés. Avant toute chose, créer 3 variables : PA_Sensors (stocke les ID a contrôler) PA_Mode (stocke le mode en cours) PA_Exclus (stocke les ID a exclure) Sur les 3 premiers boutons (dans mon cas, c'est Jour, Nuit, Silence), il faut remplacer la ligne local sensors = {21, 28, 91, 82} par les détecteurs que vous souhaitez vérifier selon le mode : . Si vous souhaitez "armer" les sensor dans un mode vous pouvez saisir le code ci-dessous pour chaque sensor à armer : . local sensors = {133, 25, 232, 103, 28, 31, 132, 229, 228, 29, 30, 131} --"Porte escalier","Porte salon 1","Porte entrée","Porte salon 2","Fenetre garage","Fenetre buanderie","Fenetre cuisine","Porte de garage","Chambre grise","Fenetre chambre","velux","Fenetre salon 3"} -- --------------------------------------- -- Ne pas toucher -- --------------------------------------- local mode = "Jour" fibaro:setGlobal("PA_Sensors", json.encode(sensors)) fibaro:setGlobal("PA_Mode", mode) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode) --pour armer un ou des sensors : --fibaro:call(25, "setArmed", "1") armer un sensor --fibaro:call(232, "setArmed", "1") armer un sensor . Les boutons d'exclusion sensor: Derrière chaque bouton, renommer le Label ( dans mon cas "Fen.1" ... "Fen.2" ), puis copier le code ci-dessous et changer l'ID de l'ouvrant concernée ..ID 25 dans mon cas car 25 est l'ID de mon détecteur de fenêtre 1 local sensor = 25 . Code à insérer sur chaque bouton : local sensor = 25 -- --------------------------------------- -- Ne pas toucher -- --------------------------------------- function exist(t, s) for i,k in ipairs(t) do if (k == s) then return i end end return nil end local exclus = fibaro:getGlobal("PA_Exclus") if (exclus and exclus ~= "") then exclus = json.decode(exclus) else exclus = {} end local index = exist(exclus, sensor) if (index) then table.remove(exclus, index) else table.insert(exclus, sensor) end local jExclus = "" local nExclus = "" if (#exclus > 0) then jExclus = json.encode(exclus) for i = 1, #exclus do nExclus = nExclus .. fibaro:getName(exclus[i]) .. ", " end nExclus = nExclus:sub(1, nExclus:len()-2) end fibaro:setGlobal("PA_Exclus", jExclus) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblExclus.value", nExclus) Vous pouvez, si vous souhaitez, supprimer ou ajouter des boutons supplémentaires. Bouton "test des ouvrants" : Pour le bouton "test des ouvrants", spécifier le ou les Id des smartphones qui recevront une notification : (Dans mon cas : 239 ) . Voici la scène qui gère tout ça : Ce que vous avez à faire : Au début du code... - Renseigner l'ensemble des id des sensors associé à la HC2 sous l'entète "properties" - Renseigner l'Id du ou des smartphones - Renseigner l'Id du module virtuel précédemment créé. - Renseigner les actions selon le mode choisi et si le(s) sensor(s) et armé ou non : . --[[ %% properties %% globals PA_Mode PA_Sensors --]] local portables = {xx, xx} local id_module_virtuel = xxx function doIt(mode, armed, id) fibaro:debug(mode) if (armed) then fibaro:debug("armé") else fibaro:debug("désarmé") end ----------------------------------------------------------------- if (mode == "Jour" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Jour" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Nuit" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Nuit" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Manuel" and armed) then ----------------------------------------------------------------- elseif (mode == "Manuel" and not armed) then ----------------------------------------------------------------- elseif (mode == "Arret" and armed) then ----------------------------------------------------------------- elseif (mode == "Arret" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Panic") then ----------------------------------------------------------------- ----------------------------------------------------------------- end end -- ----------------------------------------------------- -- Envoi le message PUSH -- ----------------------------------------------------- function sendMessage(message) for i = 1, #portables do fibaro:call(portables[i], "sendPush", message) end fibaro:debug(message .. " [envoyé]") end -- ----------------------------------------------------- -- Vérifie si les portes sont bien fermées -- ----------------------------------------------------- function check(doors) local stillopen = {} -- On vérifie l'état des portes -- for i = 1, #doors do if (doors[i]~=nil) then local id = tonumber(doors[i]) local name = fibaro:getName(id) or "unknown" if (tonumber(fibaro:getValue(id, "value")) == 1) then table.insert(stillopen, id) fibaro:debug(name .. " est ouverte") else fibaro:debug(name .. " est fermée") end else fibaro:debug("ID #"..i.." n'existe plus") end end if (stillopen and #stillopen > 0) then -- au moins une porte n'est pas fermée local msg = "" if (#stillopen == 1) then msg = msg .. "Attention : " else msg = msg .. "Attention : " end for i = 1, #stillopen do msg = msg .. " " .. fibaro:getName(tonumber(stillopen[i])) end if (#stillopen == 1) then msg = msg .. " est toujours ouverte." else msg = msg .. " sont toujours ouvertes." end -- -------------------------------------------- -- Actions si sensor(s) ouvert(s) ----------------------------------------------- -- on averti par push sendMessage(msg) -- Passage en mode Arret local mode = "Arret" fibaro:setGlobal("PA_Mode", mode) fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", mode) return false end return true end -- ----------------------------------------------------- -- Transforme une châine en tableau en utilisant -- un délimiteur -- ----------------------------------------------------- function split(text, sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) text:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end local source = fibaro:getSourceTrigger() local id_declencheur = nil local isOpen = "1" fibaro:debug(source["type"]) if (source["type"] == "property") then id_declencheur = tonumber(source["deviceID"]) elseif (source["type"] == "global") then fibaro:debug( source["name"]) local gName = fibaro:getGlobal(source["name"]) if ( gName == "Panic") then doIt( "Panic", false, 0 ) elseif (source["name"] == "PA_Sensors") then fibaro:debug(gName) local doors = fibaro:getGlobal("PA_Sensors") local exclus = fibaro:getGlobal("PA_Exclus") doors = split(string.gsub(doors, "[%[%]]", ""), ",") if (exclus and exclus ~= "") then exclus = split(string.gsub(exclus, "[%[%]]", ""), ",") else exclus = {} end todo = {} for i = 1, #doors do local found = false for j = 1, #exclus do if (doors[i] == exclus[j]) then found = true end; end if (not found) then table.insert(todo, doors[i]) fibaro:debug(doors[i] .. " doit être vérifiée") end end fibaro:debug("Checking doors") if (not check(todo)) then else ------------------------------------------- -- Actions lorsque l'alarme est activée ------------------------------------------- --Vos actions ici ---------------------------------------------- end end elseif (source["type"] == "other") then id_declencheur = nil isOpen = "0" end if (not id_declencheur) then return end fibaro:debug("Déclencheur " .. id_declencheur) local actif = fibaro:getGlobal("PA_Sensors") local exclus = fibaro:getGlobal("PA_Exclus") if (actif and actif ~= "") then fibaro:debug(actif) actif = string.gsub(actif, "[%[%]]", ",") local exist = string.find(actif, ","..id_declencheur) if (exist) then fibaro:debug("exist") end local todo = exist if (exclus and exclus ~= "") then fibaro:debug(exclus) exclus = string.gsub(exclus, "[%[%]]", ",") if (string.find(exclus, ","..id_declencheur)) then fibaro:debug("ID Excluded") todo = false end else fibaro:debug("Exclus empty") end if (todo and fibaro:getValue(id_declencheur, "value")==isOpen ) then doIt( fibaro:getGlobal("PA_Mode"), fibaro:get(id_declencheur, 'armed')=="1", id_declencheur ) end end -- J'ai testé ce module pendant 15 jours, sans aucuns soucis, très fiable et réactif. Pour télécharger le Vfid, c'est ici : >> Alarme_Avancée.vfib J’espère ne rien avoir oublié et que c'est assez clair... Un grand merci à Steven pour son aide si précieuse . . 6
Maximin Posté(e) le 17 juillet 2014 Signaler Posté(e) le 17 juillet 2014 Super module virtuel, super taff bravo!
Moicphil Posté(e) le 17 juillet 2014 Auteur Signaler Posté(e) le 17 juillet 2014 Merci, la reconnaissance revient aussi et surtout à Steven surnommé dans l'ouest " l'homme qui code plus vite que son ombre"
DeuxG Posté(e) le 18 juillet 2014 Signaler Posté(e) le 18 juillet 2014 Merci phil, je vais tester ton alarme, histoire de voir ce que ça donne.
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 bonjour, J'essaie de le mettre en place l'alarme, mais j'éprouve quelque difficultés! - ou et comment créer ton les 3 variables ? - ou trouve ton l'id des smartphone ? - ou trouve ton l'id du module virtuel ? merci d'avance
Moicphil Posté(e) le 23 juillet 2014 Auteur Signaler Posté(e) le 23 juillet 2014 Bonsoir Pour les variables >> panneaux >>panneau variable, Puis cliquer sur "ajouter" Pour connaitre l'id d'un module virtuel, l'ouvrir dans l'interface puis relever l'id dans la barre du navigateur: Pour l'id du téléphone, comme pour l'id du module virtuel, le plus simple est d'utiliser le toolkit: >>http://www.domotique-fibaro.fr/index.php/topic/239-hc2-toolkit-application-v1020-rc1/
TonyC Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 Dès que Je rentre de vacances je me l'installe directement! Merci beaucoup pour ce super boulot!!
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 Merci j'ai réussi àtout renseigné mais lors du test des ouvrants une erreur 70 apparaît dans resultat. cordialement
Moicphil Posté(e) le 23 juillet 2014 Auteur Signaler Posté(e) le 23 juillet 2014 As-tu renseigné l'intégralité de tes sensors dans la scène ? Peut-tu donner les erreurs écrites dans "debug" ?
Steven Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 Si tu es en mode "Arret" ou que tu n'as pas de mode de sélectionner, le test des ouvrants plante àla ligne 70 (c'est ma faute).
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 j'ai renseigné uniquement mes capteurs d'ouverture. Debug : https://imagizer.imageshack.us/v2/1035x647q90/539/4ed655.png https://imagizer.imageshack.us/v2/1035x647q90/674/51f149.png
Steven Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 Tu as un détecteur avecl'ID 70 qui s'appelle Fenètre ?
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 oui ID 70 capteur ouverture fenêtre F B
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 erreur ça veut juste dire qu'elle est ouverte peut être ? parce que c'étais le cas! lol
Steven Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 C'est vrai que Erreur[70] c'est pas parlant, c'est même un peu nul, je pense que @Moicphil va me taper sur les doigts
jeremyp452 Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 peut être possible d’indiquer le nom du capteur et son statut plutôt ;-)
Steven Posté(e) le 23 juillet 2014 Signaler Posté(e) le 23 juillet 2014 Oui, je vais corriger cela àl'occasion
Moicphil Posté(e) le 23 juillet 2014 Auteur Signaler Posté(e) le 23 juillet 2014 Oui, c'est pas une erreur ! désolé, j'ai pas pércuté !
jeremyp452 Posté(e) le 28 juillet 2014 Signaler Posté(e) le 28 juillet 2014 bonjour, je ne sais pas vraiment quelles sont les actions à mettre dans : elseif (mode =="jour" and armed) then--vos action ici dans mon cas çà serai : quand un des détecteurs de porte est en alerte alors la sirène sonne, et l'envoie d'un message. est cela à mettre dans vos action ? si oui comme cela ce traduit il en lua ? faut il énumérer tout les détecteurs de porte ? si c'est pas ça que faut il mettre ? avec un belle exemple svp cordialement Jérémy
Moicphil Posté(e) le 28 juillet 2014 Auteur Signaler Posté(e) le 28 juillet 2014 Bonjour Jeremy Tu n'as pas à mettre tes détecteurs vu que c'est géré dans le module virtuel ( tu dois les déclarer pour chaque zone ) Pour la scène, tu as juste à mettre tes actions si justement un détecteur est en alerte et/ou armé, etc... Pour exemple voici un "extrait" de ma scène en mode nuit et silence : elseif (mode == "Nuit" and not armed) then fibaro:call(13, "setColor", "0", "255", "0", "0") -- vert fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", "En Alerte Nuit!") fibaro:setGlobal("pushover", "Intrusion Nuit") fibaro:sleep(2000) fibaro:call(198, "pressButton", "2") --pushover lua fibaro:call(138, "pressButton", "1");--ftp fibaro:call(138, "pressButton", "3"); --ftp fibaro:call(138, "pressButton", "5");--ftp fibaro:call(11, "turnOn");--lampes salon fibaro:call(261, "setValue", "100");--lampes bar fibaro:call(13, "startProgram", "5") --PROGRAMME RGBW salon fibaro:call(122, "startProgram", "5") --PROGRAMME RGBW automatismes fibaro:call(186, "startProgram", "5") --PROGRAMME RGBW cuisine fibaro:call(241, "turnOn");--halogenes ext fibaro:sleep(120000); fibaro:call(11, "turnOff");--lampes salon fibaro:call(261, "turnOff");--lampes bar fibaro:call(13, "turnOff");--rbbw salon fibaro:call(241, "turnOff");--halogenes ext fibaro:call(122, "turnOff");--rgbw automatismes fibaro:call(186, "turnOff");--rgbw cuisine ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and not armed) then fibaro:call(13, "setColor", "0", "0", "255", "0") -- bleu fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", "En Alerte Silence!") fibaro:setGlobal("pushover", "Intrusion Silence") fibaro:sleep(2000) fibaro:call(198, "pressButton", "5") --pushover lua fibaro:call(138, "pressButton", "1");--ftp fibaro:call(138, "pressButton", "3"); --ftp fibaro:call(138, "pressButton", "5");--ftp fibaro:call(13, "startProgram", "5") --PROGRAMME RGBW salon fibaro:call(122, "startProgram", "5") --PROGRAMME RGBW automatismes fibaro:call(186, "startProgram", "5") --PROGRAMME RGBW cuisine fibaro:call(11, "turnOn");--lampe salon fibaro:call(261, "setValue", "100");--lampes bar fibaro:call(241, "turnOn");--halogènes exterieure fibaro:call(24, "pressButton", "10");--sms fibaro:sleep(180000);--pause 3minutes fibaro:call(122, "turnOff");--PROGRAMME RGBW automatismes fibaro:call(13, "turnOff");--PROGRAMME RGBW salon fibaro:call(186, "turnOff"); --PROGRAMME RGBW cuisine fibaro:call(11, "turnOff");--lampe salon fibaro:call(261, "turnOff");--lampes bar fibaro:call(241, "turnOff");--halogènes exterieure
biboun Posté(e) le 29 juillet 2014 Signaler Posté(e) le 29 juillet 2014 Question naive, vous désactivez l'alarme fibaro , ou elle reste effective en parallèle ? Le seul truc que je trouvais intéressant dans la leur c'est de protéger l'alarme par code pin. En l'état si on vous vole le smartphone ou gagne accès à la box sans etre admin, peut-on jouer avec ce module virtuel et enlever l'alarme ?
Fredric Posté(e) le 29 juillet 2014 Signaler Posté(e) le 29 juillet 2014 effectivement, tu as raison, c'est pour cela que je ne donne pas accès à mon épouse au VD sur son profil et pour activer et désactivé l'alarme, on utilise des télécommande Satel. On peut quand même désactiver pas le smartphone, mais il faut le code pin pour ma par j'ai un I-truc 5S avec reconnaissance de l'empreinte digital, donc je suis en admin
Moicphil Posté(e) le 29 juillet 2014 Auteur Signaler Posté(e) le 29 juillet 2014 @ Biboun, Oui, même si tu te fais voler ton smartphone, faudra le déverrouiller...à moins que tu le laisse sans protection. Sinon pour répondre à ta question, il n'y pas de code pin, c'est juste des actions sur des boutons du module sans confirmation car on est "isolé" du mode alarme Fibaro. Mais si vraiment tu veux un code Pin pour confirmer tes actions, tu as juste à coupler ca avec le module Krikroff : >> http://www.domotique-fibaro.fr/index.php/topic/1475-d%C3%A9clenchement-par-code-pin-security-virtual-keyboard/
biboun Posté(e) le 30 juillet 2014 Signaler Posté(e) le 30 juillet 2014 Oui je me fais l'avocat du diable En effet la sécurité des appareils mobiles doit resider dans l'accès à ces appareils ( sauf vol à l'arracher ou il pourrait être déjà delocké, mais le voleur doit savoir précisément ce qu'il fait pour ne jamais le relocker). En revanche ce qui reste franchement possible c'est le virus sur le pc qui vient chopper les identifiants de la HC2 et les transmet au vilain méchant pirate, et le fait que l'interface ne soit pas en httpS , ce qui fait que sur un réseau public wifi, depuis un appareil mobile ou non, on doit pouvoir voir passer les identifiants en clair... Ca va devenir une question clé de l'avenir, la sécurité de tous ces bidules connectés qui prennent de plus en plus d'importance dans nos vies... 1
Messages recommandés