Aller au contenu
Moicphil

Module Virtuel Alarme Avancée

Recommended Posts

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.

 

gallery_2_5_43450.jpggallery_2_5_672.jpg

 

 

 

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 :

 

 

gallery_2_5_19785.jpg

.

 

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

 

 

gallery_2_5_17084.jpg

 

 

.

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 )

 

gallery_2_5_53076.jpg

 

 

.

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 .

 

.

  • Upvote 6

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci, la reconnaissance revient aussi et surtout à  Steven surnommé dans l'ouest " l'homme qui code plus vite que son ombre"   ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci phil,

je vais tester ton alarme, histoire de voir ce que ça donne.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

 

Pour les variables >> panneaux >>panneau variable,

Puis cliquer sur "ajouter"

 post-2-0-93273400-1406143120_thumb.jpg

 

Pour connaitre l'id d'un module virtuel, l'ouvrir dans l'interface puis relever l'id dans la barre du navigateur:

post-2-0-45383100-1406143118_thumb.jpg

 

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/

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Dès que Je rentre de vacances je me l'installe directement! Merci beaucoup pour ce super boulot!!

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci j'ai réussi àtout renseigné mais lors du test des ouvrants une erreur 70 apparaît dans resultat.

cordialement

Partager ce message


Lien à poster
Partager sur d’autres sites

As-tu renseigné l'intégralité de tes sensors dans la scène ?

 

Peut-tu donner les erreurs écrites dans "debug" ?

post-2-0-40969200-1406146615_thumb.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

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).

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as un détecteur avecl'ID 70 qui s'appelle Fenètre ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, je vais corriger cela àl'occasion :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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  :D

 

cordialement

 

Jérémy

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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  ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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  :)

Partager ce message


Lien à poster
Partager sur d’autres sites

@ 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 :

 

gallery_3_20_3140.png

 

>> http://www.domotique-fibaro.fr/index.php/topic/1475-d%C3%A9clenchement-par-code-pin-security-virtual-keyboard/

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×