Aller au contenu

[HC2] - Alarme sur base VD


Messages recommandés

Posté(e)

Bonjour à tous,

Je découvre petit à petit la HC2, ses différents périphériques et surtout le langage LUA. Clairement, je ne suis pas informaticien, j'ai des notions mais on en reste là.

J'ai parcouru pas mal de page de ce forum, découvert des tas de "Tutos" relativement sympa et me suis rendu compte que certains membres sont quand même super calés en programmation !

 

Bref, modestement, je partage avec vous ma programmation LUA pour gérer une Alarme fait "Maison" à partir de la HC2.

J'ai bien conscience que ce n'est absolument pas le rôle d'une box Domotique et que rien ne peut remplacer une "Vraie" alarme. (Sécurité des communications, Anti-piratage etc etc...).

On va dire que c'est donc un petit "plus" que m'offre la box HC2, en attendant que je m'attaque vraiment à la "domotisation" de mon domicile.

 

Rendons également les crédits à ma source d'inspiration,, "Moicphil" :

J'ai récupéré une partie du code pour certaines fonctions et ce tuto m'a surtout permis de mettre le pied dans le langage LUA.

Donc grand merci à lui pour son partage, mais également à tous les intervenants du topic car c'est très riche d'informations.

 

Bon passons à mon modeste code :

- Un module virtuel pour commander la mise en service, l'arrêt et la personnalisation de l'Alarme.

- Une scène pour gérer l'activation, la vérification, la désactivation et les actions à réaliser en cas d'alarme.

 

 

Création de variables :

6 au total.

Alarme_Détecteurs  :  Permet de mettre les identifiants des détecteurs déclencheur de l'alarme

Alarme_Exclus :  Permet de mettre les identifiants des détecteurs exclus de l'alarme

Alarme_Mode :  Permet de stocker la mode actif

Alarme_Zone :  Permet de stocker la zone à tester

Alarme_Etat :  Permet de stocker l'information d'état de l'alarme

Alarme_Scene :  Permet de lancer la scène Alarme associée

 

 

Pour le VD :

Rien de bien nouveau, grande inspiration venant du tuto d'origine...

Capture.thumb.JPG.488db2eeb89bd8ea152b5dc80f7c3716.JPG

 

 

 

Choix des Zones :

J'ai choisi de pouvoir paramétrer plusieurs zones au choix. Il suffit d'assigner dans chaque zone les détecteurs à inclure.

La fonction "Toutes les zones", regroupe l'ensemble des détecteurs de la maison.

C'est aussi à partir de ces touches que l'on active l'alarme.

La particularité : Si on choisit la zone "Rdc". Le VD test dans un premier temps si cette zone n'est pas déjà choisie.

Si non, le VD l'ajoute à la liste des zones précédemment choisi.

Si oui, le VD retire cette zone de la surveillance et si c'est l'unique zone surveillée, il désactive l'alarme.

Voici les codes LUA :

Pour le bouton  "Toutes les zones" :

Citation

 

--Lister ci dessous le N° des modules de la zone
local Detecteur = {xx,xx,xx,xx,xx,xx,xx,xx,xx}

-- Encode dans les tables les détecteurs à tester
fibaro:setGlobal("Alarme_Detecteurs", json.encode(Detecteur))

-- Anulation de toutes les autres zones et set à "Toutes les zones"
local Zone = "Toutes Zones"
fibaro:setGlobal("Alarme_Zone", Zone)

-- Forçage en mode complet pour sirène
local Mode = "Complet"
fibaro:setGlobal("Alarme_Mode", Mode)

-- Forçage aucune exclusion
local Exclus = ""
fibaro:setGlobal("Alarme_Exclus", Exclus)   -- Vide la table Exclus
local Exclus = "Aucun"      -- Pour affichage propre dans le VD

-- Information d'état
local Etat = "Demande armement"
fibaro:setGlobal("Alarme_Etat", Etat)


-- Affiche les états de l'alarme dans le VD pour info utilisateur
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatActive.value", Zone)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ModeActif.value", Mode)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.SensExclus.value", Exclus)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatAlm.value", Etat)

-- Trigger de lancement de la scène
local compteur=fibaro:getGlobal("Alarme_Scene")
compteur = compteur+1
fibaro:setGlobal("Alarme_Scene", compteur)

--Option
--pour armer un ou des détecteurs
--fibaro:call(25, "setArmed", "1")  armer un sensor

 

 

Pour les boutons "Zones" :

Citation

 

--Lister ci dessous le N° des modules de la zone sans espace
local DetecteurToAdd = {xx,xx,xx,xx}

-- Déclaration de variable locale pour stocker les tableaux
local Zone = fibaro:getGlobal("Alarme_Zone")
local Mode = fibaro:getGlobal("Alarme_Mode")
local Detecteur = fibaro:getGlobal("Alarme_Detecteurs")
local Exclus = fibaro:getGlobal("Alarme_Exclus")
local Etat = fibaro:getGlobal("Alarme_Etat")
local ZoneSet = "Rdc"


if ZoneSet ~= Zone then  -- Compare si la zone n'est pas déjà sélectionnée. Si oui on arrête l'alarme
fibaro:debug("Zone non présente, process d'ajout")
 if Zone == "" or Zone == "Toutes Zones" then    -- Si aucune zone n'est sélectionnée on charge en direct
 fibaro:debug("Ajout direct") 
 Zone = ZoneSet
    Detecteur = DetecteurToAdd
    else
    fibaro:debug("Recherche si zone est déjà activée...")
     if string.find(Zone, ZoneSet) ~= nil then  -- La zone n'est pas encore sélectionnée
   fibaro:debug("Zone activée, retrait de la zone")
   Zone = string.gsub(Zone, ZoneSet, "")   -- Retrait du nom de la zone
   if string.find(Zone, ",,") ~= nil then Zone = string.gsub(Zone, ",,", ",") end   -- On remplace les double ,, par une simple.
  if string.find(Zone, ",") == 1 then Zone = string.gsub(Zone, ",", "", 1) end        -- On remplace si la chaine commence par une vigule par rien
  Zone = string.reverse(Zone)               -- On reverse la chaine pour tester si virgule seule à la fin
  if string.find(Zone, ",") == 1 then Zone = string.gsub(Zone, ",", "", 1) end        -- On remplace si la chaine commence par une vigule par rien
  Zone = string.reverse(Zone)
       Detecteur = json.decode(Detecteur)     -- Charge les détecteurs déjà actifs  
       DetecteurToAdd = json.encode(DetecteurToAdd)  -- Encode la table des détecteurs à retirer
        DetecteurToAdd = string.gsub(DetecteurToAdd, "[%[%]]", "")..","  --Suprrime les [ et ] de la chaine et ajoute une virgule à la fin
        while DetecteurToAdd ~= "" do
        local Sensor = string.sub(DetecteurToAdd, 1, string.find(DetecteurToAdd, ",")-1)  -- On prend le 1er détectuer
         DetecteurToAdd = string.gsub(DetecteurToAdd, Sensor..",", "")      -- On le supprime de la chaine pour le prochain passage
         local exist = 0  -- variable d'index
          for i,v in ipairs(Detecteur) do  -- Recherche de la position dans la table si detecteur existe
          if (v == Sensor*1) then exist = i end 
          end
         if exist ~= 0 then     -- Si détecteur exist, on le supprime
        table.remove(Detecteur, exist)
           end
        end
     else
    fibaro:debug("Zone non activée, ajout en cours")
        Zone = ZoneSet..","..Zone      -- Ajout de nom de la zone
        Detecteur = json.decode(Detecteur)    -- Charge les détecteurs déjà actifs
       DetecteurToAdd = json.encode(DetecteurToAdd)  -- Encode la table des détecteurs à ajouter               ne
        DetecteurToAdd = string.gsub(DetecteurToAdd, "[%[%]]", "")..","  --Suprrime les [ et ] de la chaine et ajoute une virgule à la fin         
         while DetecteurToAdd ~= "" do
        local Sensor = string.sub(DetecteurToAdd, 1, string.find(DetecteurToAdd, ",")-1)  -- On prend le 1er détectuer
         DetecteurToAdd = string.gsub(DetecteurToAdd, Sensor..",", "")      -- On le supprime de la chaine pour le prochain passage
         local exist = 0  -- variable d'index
          for i,v in ipairs(Detecteur) do  -- Recherche de la position dans la table si detecteur existe
          if (v == Sensor*1) then exist = i end 
          end
         if exist == 0 then     -- Si détecteur exist, on le supprime
        table.insert(Detecteur, Sensor*1)
        end
         end     
    end
   end
if Mode == "" then Mode = "Complet" end
if Exclus == "" then Exclus = "Aucun" end
Etat = "Demande armement" 
else
fibaro:debug("Mise en arrêt")
Zone = ""
Mode = ""
Detecteur = "Aucun"
Exclus = ""
fibaro:setGlobal("Alarme_Exclus", Exclus)
Etat = "Demande désarmement" 
end 

-- Charge les variables d'état
fibaro:debug("Chargement des variables")
fibaro:setGlobal("Alarme_Zone", Zone)
fibaro:setGlobal("Alarme_Mode", Mode)
fibaro:setGlobal("Alarme_Etat", Etat)
if Detecteur == "Aucun" then fibaro:setGlobal("Alarme_Detecteurs", Detecteur) else fibaro:setGlobal("Alarme_Detecteurs", json.encode(Detecteur)) end


-- Affiche les états de l'alarme dans le VD pour info utilisateur
fibaro:debug("Actualisation des status")
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatActive.value", Zone)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ModeActif.value", Mode)
if Exclus == "Aucun" or Exclus == "" then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.SensExclus.value", Exclus) end
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatAlm.value", Etat)
fibaro:debug("Terminé")

-- Trigger de lancement de la scène
local compteur=fibaro:getGlobal("Alarme_Scene")
compteur = compteur+1
fibaro:setGlobal("Alarme_Scene", compteur)

 

 

 

 

 

Choix du mode :

Ici c'est plus de choisir quelles vont être les actions qui se réaliserons lors du déclenchement de l'alarme.

Complet : Sirène Intérieur + Sirène Extérieur + Appel VoIP

Silence : Juste l'appel VoIP

Intérieur : Juste la sirène intérieur

Extérieur : Juste la sirène extérieur

Voici les codes LUA :

Citation

 

-- Encode le mode de fonctionnement choisi
local Mode = fibaro:getGlobal("Alarme_Mode")
local Zone = fibaro:getGlobal("Alarme_Zone")

if Zone ~= "" then
Mode = "Complet"
else
Mode = ""
end 
fibaro:setGlobal("Alarme_Mode", Mode)
 
-- Affiche les états de l'alarme dans le VD pour info utilisateur
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ModeActif.value", Mode)

 

 

 

 

 

Arrêt de l'alarme :

Simple, désactiver l'alarme.

Voici les codes LUA :

Citation

 

--Annulation de tous les détecteurs & Zones

-- Annulation des détecteurs à tester
local Detecteur = "Aucun"
fibaro:setGlobal("Alarme_Detecteurs", Detecteur)

-- Annulation de toutes les autres zones
local Zone = ""
fibaro:setGlobal("Alarme_Zone", Zone)

-- Annulation des modes de fonctionnement
local Mode = ""
fibaro:setGlobal("Alarme_Mode", Mode)

-- Annulation des exclusions
local Exclus = ""
fibaro:setGlobal("Alarme_Exclus", Exclus)

-- Mise à jour du statut de fonctionnement
local Etat = "Demande désarmement"
fibaro:setGlobal("Alarme_Etat", Etat)


-- Affiche les états de l'alarme dans le VD pour info utilisateur
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatActive.value", Zone)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ModeActif.value", Mode)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.SensExclus.value", Exclus)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatAlm.value", Etat)

-- Trigger de lancement de la scène
local compteur=fibaro:getGlobal("Alarme_Scene")
compteur = compteur+1
fibaro:setGlobal("Alarme_Scene", compteur)

 

 

 

 

 

Exclusion Dect. :

Pourvoir exclure un détecteur de l'alarme... Par exemple si on souhaite laisser une fenêtre ouverte à l'étage ou autre...

Un appui exclus le détecteur, un nouvel appui l'inclus à nouveau.

Voici les codes LUA :

Citation

 

local sensor = xx
local exclus = fibaro:getGlobal("Alarme_Exclus")
local jExclus = ""
local nExclus = ""
local Zone = fibaro:getGlobal("Alarme_Zone")

------------------------------
function exist(t, s)
   for i,k in ipairs(t) do
     if (k == s) then return i end
    end
 return nil
end
------------------------------

if Zone ~= "" then
 if (exclus and exclus ~= "") then
   fibaro:debug(exclus)
    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

  if (#exclus > 0) then
  jExclus = json.encode(exclus)
     for i = 1, #exclus do
   nExclus = nExclus .. fibaro:getName(exclus) .. ", "
      end
    nExclus = nExclus:sub(1, nExclus:len()-2) 
  else
  jExclus = ""
  nExclus = "Aucun"
  end
fibaro:setGlobal("Alarme_Exclus", jExclus)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.SensExclus.value", nExclus)

local Etat = "Demande armement"
fibaro:setGlobal("Alarme_Etat", Etat)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.EtatAlm.value", Etat)
 
end

-- Trigger de lancement de la scène
local compteur=fibaro:getGlobal("Alarme_Scene")
compteur = compteur+1
fibaro:setGlobal("Alarme_Scene", compteur)

 

 

 

Scène :

Et voici enfin la scène qui gère la mise en service, l'arrêt et le déclenchement de l'alarme
 

Citation

 

--[[
%% properties
xx value
xx value
xx value
xx value
%% events
%% globals
Alarme_Scene
--]]

fibaro:debug("Début de la scène, nombre d'instance: "..fibaro:countScenes())
-- Limitation à une seule scène en même temps.
if (fibaro:countScenes() > 1) then
fibaro:abort()
end

-- Déclaration des portable recevant les messages Push
local portables = {xx} 

-- Chargement dans variables locales des états d'alarme
local DeclencheurType = fibaro:getSourceTrigger() -- Déclaration de la source de lancerment de la scène
local id_declencheur = nil       -- Chargmeent de l'ID du détecteur déclencheur
local Etat = fibaro:getGlobal("Alarme_Etat")  -- Chargement de l'état de l'alarme
local Mode = fibaro:getGlobal("Alarme_Mode")  -- Chargement du mode de l'alarme
local Zone = fibaro:getGlobal("Alarme_Zone")  -- Chargement des zones de l'alarme
local Detecteurs = fibaro:getGlobal("Alarme_Detecteurs") -- Chargement des détecteurs
local Exclus = fibaro:getGlobal("Alarme_Exclus")   -- Chargement des détecteurs exclus

 

--************************************
--* Fonction d'envoi de message PUSH *
--************************************
function SendMessage(message)
for i=1, #portables do
fibaro:call(portables, "sendPush", message)   
end
fibaro:debug(message.." [envoyé]")
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


--*********************************************
--* Fonction d'état des ILS / Test des portes *
--*********************************************
function Check(capteurs, capteurexclus)
local stillopen = {}   --variable local d'état d'ouverture
capteurabsent = 1    --variable de détection d'aucun capteur à activer -> 1 = aucun capteur présent

Etat = "Test des capteurs"         --Initalisation de la variable état
fibaro:setGlobal("Alarme_Etat", Etat)      -- Mise à jour de l'état
fibaro:call(67, "setProperty", "ui.EtatAlm.value", Etat) -- Actualisation du statut Etat dans le VD

  for i = 1, #capteurs do    -- Boucle de test sur l'ensemble des capteurs
 fibaro:debug("Test du capteur :"..capteurs.." de type :"..fibaro:getValue(capteurs, "userDescription"))
 if (capteurs~=nil) and (capteurs~="Aucun" and fibaro:getValue(capteurs, "userDescription") == "ILS") then  -- Test des capteurs du type ILS (ouverture)
  local id = tonumber(capteurs)
  local name = fibaro:getName(id) or "Inconnu"  
       if string.match(capteurexclus, id) == nil or capteurexclus == "" then   -- Ne lance le test que si le détecteur n'est pas exclu
   capteurabsent = 0
   if (tonumber(fibaro:getValue(id, "value")) == 1) then
   table.insert(stillopen, id)
   fibaro:debug(name.." est ouvert")
   else
   fibaro:debug(name.." est fermé")
   end
  end 
 
 elseif (capteurs~=nil) and (capteurs~="Aucun" and fibaro:getValue(capteurs, "userDescription") == "IR") then  -- Test des capteurs du type IR (mouvement)
  local id = tonumber(capteurs)
  local name = fibaro:getName(id) or "Inconnu"  
       if string.match(capteurexclus, id) == nil or capteurexclus == "" then   -- Ne lance le test que si le détecteur n'est pas exclu
   capteurabsent = 0
   if (tonumber(fibaro:getValue(id, "value")) == 1) then
   table.insert(stillopen, id)
   fibaro:debug(name.." mouvement détecté")
   else
   fibaro:debug(name.." est ok")
   end
  end 
 else
    Etat = "Problème capteur"
 fibaro:debug(Etat..": L'id #"..i.." n'existe pas")
    end      
  end

if (stillopen and #stillopen > 0) then
 fibaro:debug("Gestion de l'avertissement détecteur en défaut") 
 fibaro:debug("Des portes sont ouvertes") 
    local msg = "Attention : "
 for i = 1, #stillopen do
    msg = msg .." ".. fibaro:getName(tonumber(stillopen))
    end
 if (#stillopen == 1) then msg = msg.." est ouverte." else msg = msg.." sont ouvertes." end   
 -- Actions si portes ouvertes
 SendMessage(msg) -- envoi du message en Push
 Etat = "Vérifiez les détecteurs"
 fibaro:debug(Etat)   
else
fibaro:debug("Aucune porte n'est ouverte") 
if capteurabsent == 1 then Etat = "Aucun capteur sélectionné" end
if (Etat ~= "Problème capteur" and Etat ~= "Aucun capteur sélectionné") then Etat = "Détecteurs Ok" end
fibaro:debug(Etat)
end

fibaro:setGlobal("Alarme_Etat", Etat)      -- Mise à jour de l'état
fibaro:call(67, "setProperty", "ui.EtatAlm.value", Etat) -- Actualisation du statut Etat dans le VD
 
end

 

--*****************************************************************************
--*****************************************************************************

fibaro:debug(DeclencheurType["type"])
fibaro:debug(DeclencheurType["Name"])
fibaro:debug(Etat.."/"..Mode.."/"..Zone)


--******************************************************
--* MASTER / Mise en route et Action sur déclenchement *
--******************************************************
if DeclencheurType["type"] == "global" then   -- GESTION DU CHANGEMENT DE MODE DE FONCTIONNEMENT
fibaro:debug("Modification d'état utilisateur")
 if Etat == "Demande armement" and Zone ~= "" and Mode ~= "" and Detecteurs ~= "" then      -- PROCEDURE D'ARMEMENT DE L'ALARME
  fibaro:debug("Procédure de mise en service")
  fibaro:debug("Verification des détecteurs")
  fibaro:debug("Detecteurs: "..Detecteurs)
  fibaro:debug("Sont exclus: "..Exclus)
  local capteurs = split(string.gsub(Detecteurs, "[%[%]]", ""), ",")
  local capteurexclus = Exclus
  Check(capteurs, capteurexclus)
  
  Etat = fibaro:getGlobal("Alarme_Etat") -- Récupère l'état suite au test des ouvrant
   
  if Etat == "Détecteurs Ok" and Zone ~= "" and Mode ~= "" then
  Etat = "Armée"
  else
  Etat = "Erreur armement: "..Etat 
  end
      
 elseif Etat == "Demande désarmement" then               -- PROCEDURE DE DESARMEMENT DE L'ALARME
  fibaro:debug("Procédure de désarmement de l'alarme") 
  Etat = "Désarmée"
 end
fibaro:setGlobal("Alarme_Etat", Etat)      -- Mise à jour de l'état
fibaro:call(67, "setProperty", "ui.EtatAlm.value", Etat) -- Actualisation du statut Etat dans le VD
 
 

 

 
elseif DeclencheurType["type"] == "property" and Etat == "Armée" then -- GESTION DU MODE ALARME
id_declencheur = tonumber(DeclencheurType["deviceID"]) -- Récupère l'id du déclencheur

fibaro:debug("Id du déclencheur "..id_declencheur)
fibaro:debug("Sont exclus :"..Exclus)
fibaro:debug("Controle de déclenchement.")
 
  if string.match(Detecteurs, id_declencheur) ~= nil and (string.match(Exclus, id_declencheur) == nil or Exclus == "") then
  fibaro:debug("Alarme déclenchée")
    Etat = "Déclencheur "..id_declencheur      -- Information sur l'état du déclencheur
 fibaro:call(67, "setProperty", "ui.EtatAlm.value", Etat) -- Actualise l'infomration dans le VD pour l'utilisateur
   fibaro:setGlobal("Alarme_Etat", Etat)      -- Actualisation de l'état
    fibaro:debug("Notification d'alarme")      -- Envoi de notification
 messAlarme = "Alarme déclenchée!"
 SendMessage(messAlarme)  
 
     -- *********************************************
 -- *     ACTION A REALISER EN CAS D'ALARME     *
 -- *********************************************
  if Mode == "Complet" then   -- Action à réaliser en mode Complet
  fibaro:debug("Lancement appel VoIP")
       local http = net.HTTPClient()
       http:request(xxxxxxxxxxxxxxxx)


  
  elseif Mode == "Silence" then  -- Action à réaliser en mode Silence
 
  elseif Mode == "Interieur" then  -- Action à réaliser en mode Interieur
 
  elseif Mode == "Exterieur" then  -- Action à réaliser en mode Exterieur
 
 
  end
 

   else
    fibaro:debug("Capteur non présent dans l'activation ou exclu")
    end

 
end

 

 

 

Voilà, à mon avis c'est loin d'être parfait ou optimisé, mais pour le moment ceci à l'air de fonctionner.

Je suis preneur de critique de spécialistes, d'améliorations etc...

 

J'ai encore des idées pour faire évoluer tout ceci, mais le temps et le compétences me manquent parfois.

A+

 

 

  • Like 3
Posté(e)

Bonjour, pouvez-vous rendre le VD complet disponible sur le forum?
Merci

Le 29/08/2019 à 18:15, Yorino a dit :

Bonjour à tous,

Je découvre petit à petit la HC2, ses différents périphériques et surtout le langage LUA. Clairement, je ne suis pas informaticien, j'ai des notions mais on en reste là.

J'ai parcouru pas mal de page de ce forum, découvert des tas de "Tutos" relativement sympa et me suis rendu compte que certains membres sont quand même super calés en programmation !

 

Bref, modestement, je partage avec vous ma programmation LUA pour gérer une Alarme fait "Maison" à partir de la HC2.

J'ai bien conscience que ce n'est absolument pas le rôle d'une box Domotique et que rien ne peut remplacer une "Vraie" alarme. (Sécurité des communications, Anti-piratage etc etc...).

On va dire que c'est donc un petit "plus" que m'offre la box HC2, en attendant que je m'attaque vraiment à la "domotisation" de mon domicile.

 

Rendons également les crédits à ma source d'inspiration,, "Moicphil" :

J'ai récupéré une partie du code pour certaines fonctions et ce tuto m'a surtout permis de mettre le pied dans le langage LUA.

Donc grand merci à lui pour son partage, mais également à tous les intervenants du topic car c'est très riche d'informations.

 

Bon passons à mon modeste code :

- Un module virtuel pour commander la mise en service, l'arrêt et la personnalisation de l'Alarme.

- Une scène pour gérer l'activation, la vérification, la désactivation et les actions à réaliser en cas d'alarme.

 

 

Création de variables :

6 au total.

Alarme_Détecteurs  :  Permet de mettre les identifiants des détecteurs déclencheur de l'alarme

Alarme_Exclus :  Permet de mettre les identifiants des détecteurs exclus de l'alarme

Alarme_Mode :  Permet de stocker la mode actif

Alarme_Zone :  Permet de stocker la zone à tester

Alarme_Etat :  Permet de stocker l'information d'état de l'alarme

Alarme_Scene :  Permet de lancer la scène Alarme associée

 

 

Pour le VD :

Rien de bien nouveau, grande inspiration venant du tuto d'origine...

Capture.thumb.JPG.488db2eeb89bd8ea152b5dc80f7c3716.JPG

 

 

 

 

Bonjour, pouvez-vous rendre le VD complet disponible sur le forum?
Merci

  • 2 semaines après...
×
×
  • Créer...