Aller au contenu

Module Virtuel Alarme Avancée


Moicphil

Messages recommandés

Salut
 
Peut tu essayer en mettant en  "commentaire" les 3 lignes 162 / 163 / 164   stp ?
 
 
Voici ma scène, j'ai supprimé mes actions :

--[[
%% 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, "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~=nil) then
local id = tonumber(doors)
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))
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© 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 == exclus[j]) then found = true end;
end
if (not found) then
table.insert(todo, doors)
fibaro:debug(doors .. " 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 = 28
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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Moicphil,

 

Encore merci pour ta scène sa fonctionne parfaitement.

 

Maintenant histoire d'être moins bête la différence entre ta scène et la mienne c'est la parti "Actions si sensors ouverts" ?

 

Encore merci mon alarme va être fonctionnel avant de partir en vacance.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

Juste pour te tenir au courant mon alarme fonctionne très bien c'est super.

 

Il y a juste une chose quand je fais un test des ouvrants et qu'une porte est ouvert j'ai erreur [ Id du détecteur ].

 

J'ai vue sur le forum que le problème avait été signalé à  Steven. Je voulais savoir si Steven avait eu le tps de le résoudre.

 

Merci de votre retour.

Lien vers le commentaire
Partager sur d’autres sites

J'ai trouvé le post ... et le soucis.

 

Derrière le bouton "Test des ouvrants", ligne 30, il y a le code suivant : 

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblResult.value", "Erreur" .. s)
Il faut juste remplacé le mot "Erreur" par quelque chose de plus parlant comme "Ouvert(s)".

 

Ou alors, plus propre :

 

Afin d'avoir "Ouvert" ou "Ouverts" selon le nombre d'ouvrants, il faut remplacer : 

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblResult.value", "Erreur" .. s)
local msg = ""
if (#stillopen == 1) then msg = msg .. "La porte " else msg = msg .. "Les portes " end
par

local msg = ""
if (#stillopen == 1) then 
   msg = msg .. "La porte " 
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblResult.value", "Ouvert " .. s)
else 
   msg = msg .. "Les portes "
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblResult.value", "Ouverts " .. s)
end
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Steven,

 

Merci pour ton retour sa marche j'ai bien Ouvert ou Ouverts en fonction des portes ou fenêtres ouvertes.

 

Maintenant ma question était plus poussé.

 

Je voulais savoir si on pouvait avoir à  la place du numéros d'Id, avoir Porte ou Fenêtre .

 

exemple:

 

Ouverts[Porte,Fenêtre]

 

Merci de ton retour.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Moicphil,

 

je reviens vers toi car je ne comprends plus rien après avoir testé ton module plus test tout fonctionné.

 

J'ai voulu rajouter un téléphone plus tout mes détecteurs et la sa ne fonctionne plus. J'ai une erreur sur ma scène.

 

 

post-3315-0-32710000-1437849453_thumb.png

 

Maintenant je n'arrive plus a déclencher ma sirène dès qu'un détecteur est ouvert.

 

J'ai redémarrer ma HC2 supprimé ma scène refait ma scène mais rien n'y fait la sirène ne se déclenche pas quand un détecteur s'ouvre.

 

Help me

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Moicphil,

 

Merci de ton retour voila ou j'en suis :

 

J'ai supprimé la scène repris nos échanges j'ai copié collé ta scène et message d'erreur sur la ligne 124 il faut la remplacé par : 

text:gsub(pattern, function(c) fields[#fields+1] = c end)

Après j'ai toujours le message comme dit au dessus du sur le forum.

 

Je me demande si se n'est pas au début de la scène

--[[
%% properties
%% globals
PA_Mode
PA_Sensors
--]]
 

Si je laisse comme sa j'ai le message d'erreur.

 

Se qui m'énerve c'est que sa marché j'ai changé des choses pour avoir OUVERT à  la place ERREUR et la sa ne marche pas.

 

Je sais pas si il y a un lien mais je pers mon latin

Lien vers le commentaire
Partager sur d’autres sites

J'ai oublié de poser une question je sais plus a quoi sert le numéro ID dans la scène vers la ligne 177

-------------------------------------------
-- Actions lorsque l'alarme est activée
-------------------------------------------

--Vos actions ici


----------------------------------------------
end
end
elseif (source["type"] == "other") then
id_declencheur = 28
isOpen = "0"
end
Lien vers le commentaire
Partager sur d’autres sites

Bonjour MoicPhil,

 

Pas de problème l'alarme fonctionne même avec l'erreur. C'est juste pour voir pourquoi j'ai une erreur sur le bouton ARRàŠT.

 

Je suis en phase de test pendant 2 semaines .

 

Passe de bonne vacance on en reparle à  la rentré si tu a un peu de tps à  me consacrer.

 

A+

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

bonjour

 

j'essaye de mettre en place ce super vd, pour l'instant j'ai mis mes capteurs, et j'ai une erreur ligne 143 dans la scène

je n'ai pas paramétré de ligne pour les actions en cas d'alarme, et tout les boutons du vd ne sont pas actifs.

 [ERROR] 17:57:59: line 143: '(' expected near char(194)

une idée ?

-- -----------------------------------------------------
-- 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© fields[#fields+1] = c end)
return fields
end
 
local source = fibaro:getSourceTrigger()
local id_declencheur = nil
local isOpen = "1"
Lien vers le commentaire
Partager sur d’autres sites

bonjour

je me remets dessus....

 

-  et que veut dire cette ligne  : déclencheur 28 ???

 

 

- dans le test des ouvrants, en mode deboguer, j'ai une erreur

[ERROR] 15:52:03: line 81: bad argument #1 to 'ipairs' (table expected, got userdataRésolu

 

 

- et malgré ligne de commande armement, rien ne s'arme....  Résolu

je m'arrache les cheveux à  essayer de comprendre car j'ai un capteur qui ne veut rien savoir....

 

 

et j'ai besoin d'aide en ce qui concerne la partie envoie de message vers le mobile,

je n'utiliser que la technique des push... comment dois je faire ?  Résolu aussi

 

merci

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...