Aller au contenu

Module Virtuel Alarme Avancée


Moicphil

Messages recommandés

Merci pour vos explications!

Pour moi qui est un novice de programmation Fibaro j’entraperçois une lueur!

ton exemple m'a beaucoup fais avancer dans la compréhension du principe fonctionnement.

pour ma pars ça ne fonctionne pas encore mais je m'y attache.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

C'est ca, moi j'ai mis "jour/nuit" mais ça peut être des zones physiques, garage, extérieur, étage, total, etc...

Et d’être averti par mail, push, etc...si un détecteur est ouvert lors de la sélection de la zone.

 

Et aussi, la possibilité d'armer ou non les détecteurs. ( Pour l'alarme Fibaro, l'armement est obligatoire )

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Je ne pense pas ...

Le module alarme natif active systématiquement l' armement des sensors...

 

Dans ce module virtuel, les conditions sont infinies car un peut spécifier l'armement oui/non  +  une variable.

 

Peut être que dans le futur Fibaro nous donnera la possibilité de gérer des zones, je trouve que c'est vraiment utile...

Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...

Bonjour Moicphil,

 

super tuto mais voila je me pose quelque question.

 

J'ai bien compris que ce module nous permet de choisir la zone, de sélectionner les ouvrants à  exclure et savoir l'état de nos sensors mais il y a quelque chose que j'ai loupé.

 

Ce module nous permet pas d'activer l'alarme avec si l'un des détecteurs se déclenche il active la sirène.

 

Question bête mais pouvez vous m'éclaircir.

 

D'avance merci

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil

 

Tout d'abord merci pour ton retour . Bon accord une fois je vois que je ne suis pas trop à  l'aise mais , fort de persévérance on y arrive.

 

Donc si je comprends bien avec le module on peut :

 

Sélectionner une zone pour armer les sensor

 

On peux désactiver un sensor (exemple détecteur de fenêtre car il fait chaud en se moment)

 

Par contre je ne vois pas ou on déclare notre sirène et comment on la gère.

 

Je m'explique :

 

Alarme Jour :

 

J'arme mes sensor et mes détecteurs de portes et de fenêtre.

 

J'attend xx seconde histoire de me laisser le temps de sortir de chez moi. ( je ne vois pas dans le module si on peut le faire)

 

Puis alarme activé.

 

Intrusion :

 

Si il y a une détection d'un des détecteurs alors j'active ma sirène. ( je ne vois pas dans le module si on peut le faire)

 

Voila en quelque ligne ce que je souhaiterais faire.

 

Est que se module me permet de faire ceci ou je suis complètement à  coté de la plaque. (tu as le droit de me le dire  :D

 

merci de ton retour.

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Il faut modifier tout  ca directement dans la scéne dédiée.

 

j'ai mis un exemple au dessus, selon 2 états ( zone nuit et silence ) > http://www.domotique-fibaro.fr/index.php/topic/1527-module-virtuel-alarme-avancée/?p=20034

 

Il faut donc insérer tes lignes ( en LUA ) selon tes zones

 

Prend le temps de bien regarder le fonctionnement de la scene.

Tu peux ajouter des actions : des l'armement des capteurs, des arlarme d'un sensor si armé ou pas, etc

 

( pour mettre en route une sirène :

fibaro:call(xx, "turnOn")

)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

Effectivement avec toute tes explication j'arrive à  déclencher ma sirène des qu’un détecteur est ouvert.

 

Par contre je n'arrive pas à  faire une tempo de 20s , le temps de sortir de chez moi .

 

Je suis partie sur ce code si dessous.

 

   elseif (mode == "Jour" and not armed) then
-- vos actions ici
    
    fibaro:sleep(20000)--Attente de 20s
    fibaro:call(100, "setValue", "30")--Sirène 30%

Mais après 20s si le détecteur à  était ouvert alors la sirène s'allume.

 

Pourrais tu encore me donner un cout de pousse.*

 

Encore merci.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Soulac

 

La scene n'est pas prévue pour le moment pour gerer un retard avant armement.

 

Le module virtuel, selon la zone séléctionnée envoi dans une "table" la liste des id.

 

Le moyen le plus simple pour toi étant de temporiser directement dans le code du bouton de zone juste avant l'envoi de la variable.

Et l'avantage, tu pourras de plus temporiser que certaines zones ou avec un temps différent   ;)

 

Voilà  un exemple ou tu peux mettre la tempo, directement dans le code du ou des boutons...

local sensors = {523, 305, 232, 103, 527, 525, 132, 229, 228, 495, 131, 326}
--"Porte escalier","Porte salon 1(25)","Porte entrée","Porte salon 2","Fenetre garage","Fenetre buanderie","Fenetre cuisine","Porte de garage","Chambre grise","Fenetre chambre","Fenetre salon 3","volets"}
-- ---------------------------------------
-- Ne pas toucher
-- ---------------------------------------

local mode = "Jour"
fibaro:sleep(60x1000)
fibaro:setGlobal("PA_Sensors", json.encode(sensors))  
fibaro:call(fibaro:getSelfId(), "pressButton", "27")--test des ouvrant
fibaro:setGlobal("PA_Mode", mode)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

Encore merci pour tout les renseignements, effectivement tout fonctionne comme je le veux.

 

J'ai encore des questions sur deux trois choses.

 

Sur le module virtuel quand j'active le mode JOUR, j'ai bien ma tempo de 20s et après mon alarme est activé.

 

Il y a une chose qui me perturbe le TEST DES OUVRANTS ce fait après le mode sélectionné .

Si j'ai des portes qui sont ouvert et je met mon alarme pas de problème, mais l'alarme ne sonne pas alors que j'ai des portes ouvertes.

Pour moi on devrait faire un TEST DES OUVRANTS voir l'état des portes et des fenêtres ouvert.

Si on veux laisser une porte ou/et une fenêtre on les inhibes .

Puis on fait le choix d'une zone.  

 

Question :

 

Est ce que c'est un fonctionnement normal ?

Est ce qu'on peut faire un fonctionnement comme décrit si dessus ?

 

Merci de ton retour

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Soulac

 

Je crois qu'on a a peut prés les memes attentes au niveau de l'alarme.

 

Si j'ai bien compris, ce que tu veux ( et c'est ce que je fais hormis la tempo ) :

 

- appui sur le BP selection de zone > test des ouvrants

                                                             > si ouvrants OK : On temporise puis on arme 

                                                             > si ouvrant(s) KO : On passe en arret puis push pour spécifier quel sensor est ouvert

 

Dans ce cas, comme dans mon message au dessus, dans chaque bouton de zone rajouter un appui sur le bouton test :

local mode = "Jour"
fibaro:setGlobal("PA_Sensors", json.encode(sensors))  
fibaro:call(fibaro:getSelfId(), "pressButton", "27")--test des ouvrant

Dans la scène maintenant :

 

Vers la ligne 239

Pour etre notifié lors d'un test des ouvrants :

Modifier selon ton besoin ( moi j'utilise "Pushover" ) :

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
		-- on averti
		sendMessage(msg)
        fibaro:sleep(2000)
		fibaro:setGlobal("pushover", msg)
		fibaro:sleep(2000)
		fibaro:call(198, "pressButton", "1") --pushover lua 

Toujours dans la scène ( vers ligne 317 ) tu peux aussi choisir des actions à  effectuer uniquement quand le test des ouvrants est ok et que l'alarme est en route 

 

Dans mon exemple, j'eteint par sécurité des lampes et clignoter les leds des sirenes, mais tu peux mettre un push de confirmation par exemple...

 -------------------------------------------
  --  Actions lorsque l'alarme est activée
 -------------------------------------------    
       
        fibaro:setGlobal("ETATALARME", "Active")
        fibaro:call(11, "turnOff")--lampes salon
        fibaro:call(13, "turnOff")--rgbw
        fibaro:call(122, "turnOff")--rgbw
        fibaro:call(186, "turnOff")--rgbw
        fibaro:call(558, "turnOff")--rgbw cuisine sol
        fibaro:call(261, "turnOff")--lampes bar
        fibaro:call(618, "turnOff")--halogènes exterieurs
        fibaro:call(201, "turnOff");--tablette
        fibaro:call(316, "pressButton", "2");--hue tablette
        fibaro:call(317, "pressButton", "2");--hue lampe haute
        fibaro:call(323, "pressButton", "2");--hue lampe bloom
        fibaro:call(289, "pressButton", "2");--select param sirene
        fibaro:sleep(2000);--pause 2 sec
        fibaro:call(289, "pressButton", "4");--select param sirene
        fibaro:sleep(2000)
        fibaro:call(325, "turnOn");--sirene garage
        fibaro:call(291, "turnOn");--sirene salon
        

Bon courage  ;)

 

Si tu galère toujours, je t'enverrais par MP mon module et scène...

Lien vers le commentaire
Partager sur d’autres sites

@moicphil : tu eteins les lampes même si elles le sont déjà  ? tu ne les testes pas ? 

 

Vivement que j'ai une alarme, j'aime beaucoup ton module ;-)

 

Petite parenthese, j'essaierais bien de faire la meme avec GEA.. ;-). toujours dans l'idee de n'avoir a maintenir qu'une scene ;-)

Lien vers le commentaire
Partager sur d’autres sites

Non, pas de testeur l'état des lumières, même si elles sont déjàéteintes, cela n'est pas gênant.

GEA...pas sûr que tu puisses tout faire identique, notement l'envoi des id dans une table selon la zone mais le contrôle des ouvrants, variables push etc , je pense que c'est jouable. ;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

Bon voici mon code sur le bouton Mode "JOUR"

 

local sensors = {134,152,25,40,121,34,28,42,95,142}

-- Ne pas toucher
-- ---------------------------------------
local mode = "Jour"
fibaro:call(100, "setValue", "30")--Sirène flash on
fibaro:sleep(20000)
fibaro:setGlobal("PA_Sensors", json.encode(sensors))
fibaro:call(fibaro:getSelfId(), "pressButton", "8") --test des ouvrant
fibaro:setGlobal("PA_Mode", mode)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode)
fibaro:call(100, "turnOff");--Sirène flash off

Première question je ne suis pas sur du numéros de bouton qui correspond à  "test des ouvrants" ou puis je le trouver de manière sur ?

 

Désoler de la question bète je sais mais bon il faut bien démarrer un jour.

 

Merci de ton retour. 

 

Lien vers le commentaire
Partager sur d’autres sites

OK sa fonctionne :

 

Quand j'appuis sur le mode JOUR sa appuis sur le TEST DES OUVRANTS 

 

Si une porte est ouvert sa m'envois un Push porte ouvert (Normal) .

 

Par contre le mode JOUR s'active alors qu'il devrait rester sur ARRET ( Pas Normal).

 

Si tout est fermer alors pas d’envois  (Normal).

 

Encore un truc que j'ai loupé.

 

Une ptite idée??

Lien vers le commentaire
Partager sur d’autres sites

Dans la scene, Il faut que tu fasses un "pressButton" sur Arret si une porte est ouverte, vers la ligne 247

 

Voici mon passage de code pour info , mais j'utilise GEA et les variables ...

-- on averti
		sendMessage(msg)
                fibaro:sleep(2000)
		fibaro:setGlobal("pushover", msg)
		fibaro:sleep(2000)
		fibaro:call(198, "pressButton", "1") --pushover lua 
    
        local mode = "Arret"
        fibaro:setGlobal("PA_Mode", mode)
        fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", mode)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

j'ai testé mais toujours le même problème. Je récapitule depuis le début.

 

Activation du mode JOUR 

Tempo de 20s avec la sirène qui flache histoire de savoir qu'il nous reste 20s pour sortir.

Puis activation de l'alarme en mode jour.

 

SI l'un des détecteurs est ouvert alors la sirène sonne (mal à  la tête tu auras).

 

Mon seul problème c'est si j'ai un détecteur déjà  ouvert lors de la mise en alarme je dois repassé en ARRàŠT et avoir dans le résultat du test les détecteurs qui sont en défaut.

 

Je pense que j'ai un problème dans ma scène c'est même sur.

--[[
%% properties
152 value
25 value
110 value
40 value
121 value
34 value
28 value
42 value
95 value
142 value
%% globals
--]]

local portables = {16} 
local id_module_virtuel = 110
 
 
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
    -- vos actions ici
    
    
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Jour" and not armed) then
	-- vos actions ici
	fibaro:call(100, "setValue", "30")--Sirène 30%
       
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Nuit" and armed) then
    -- vos actions ici
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Nuit" and not armed) then
	-- vos actions ici
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Silence" and armed) then
   
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Silence" and not armed) then
	-- vos actions ici
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    elseif (mode == "Panic") then
	-- vos actions ici
    -----------------------------------------------------------------
    -----------------------------------------------------------------
    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 (tonumber(fibaro:getValue(doors[i], "value")) == 1) then
			table.insert(stillopen, doors[i])
			fibaro:debug(fibaro:getName(doors[i]) .. " est ouverte") 
		else
			fibaro:debug(fibaro:getName(doors[i]) .. " est fermée")
		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
		-- on averti
		sendMessage(msg)
        fibaro:sleep(2000)
		fibaro:setGlobal("pushover", msg)
		fibaro:sleep(2000)
		fibaro:call(110, "pressButton", "4") --pushover lua 
     local mode = "Arret"
        fibaro:setGlobal("PA_Mode", mode)
        fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", mode)
    	fibaro:call(110, "pressButton", "4") --pushover lua
		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
			--fibaro:call(id_module_virtuel, "pressButton", "4")
            local mode = "Arret"
            fibaro:setGlobal("PA_Mode", mode)
            fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", mode)
		else
 -------------------------------------------
  --  Actions lorsque l'alarme est activée
 -------------------------------------------    
 
		-- vos actions ici si nécessaire  
    fibaro:call(100, "setValue", "30")--Sirène 30%
    fibaro:call(60, "startProgram", "5") --PROGRAMME RGBW salon
 
  ----------------------------------------------      
		end
	end
elseif (source["type"] == "other") then
	id_declencheur = 152
	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



Peux tu jeter un coup d’Å“il afin de finaliser mon alarme avec  ton super module qui est pour moi le plus finalisé.

 

Merci encore de ta patience. 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...