Contrôle de l’état des Fenêtres

  J’ai d’abord créé cette scène pour avoir l’information vocale d’ouverture/fermeture d’une fenêtre  en temps réél, mais aussi le positionnement d’un module virtuel « Une Fenêtre Ouverte ». Ce module virtuel apparait sur mes interfaces ImperiHome et MyVera pour m’indiquer l’état de mes fenêtres, mais aussi sert à invalider la commande d’activation de l’alarme. Pour cela, chaque capteur de fenêtre est un double déclencheur, à l’ouverture et à la fermeture de la fenêtre, de la nouvelle scène.

controleFenetre11
UI5
SAM_3567
ImperiHome
controleFenetre10bis
MyVera
controleFenetre01
Declencheurs de la Scene Controle Ouverture Fenetre
controleFenetre02
Declencheur Capteur Fenetre Ouverte (Fenetre Anais)
controleFenetre03
Declencheur Capteur Fenetre Fermée (Fenetre Anais)
controleFenetre04
Declencheur Evenement Luup

Par la suite, entendre un message à chaque ouverture ou fermeture de fenêtre peut devenir agaçant. J’ai donc décidé de lancer uniquement la vocalisation que sur demande, soit par Sarah ou lors de la demande de mise en service de l’alarme. La scène étant activée à chaque ouverture/fermeture de fenêtre, pour avoir en temps réel l’état de mes fenêtres, j’ai positionné une variable EvtFenetre à 1 dans Événements Luup de chaque déclencheurs.
Voici le Code Luup de la Scène:
Ce code est assez simple à comprendre, il aurait pu être plus compact en utilisant des tables.

Une première partie Initialise les variables.

une seconde partie lit l’etat des capteurs de fenêtres et postionne les messages vocaux, plus une variable flag (une fenêtre au moins ouverte)

une troisieme partie teste la variable flag pour mettre à jour le VirtuelSwitch « Une Fenêtre Ouverte »

une quatrième partie teste la variable EvtFenetre ,

– si 1 la scène a été déclenchée par l’ouverture/fermeture d’une fenêtre donc pas de vocalisation

– si 0 la scène a été appelée de l’extérieur, soit Sarah, soit la demande d’Activation de l’alarme, on lance la vocalisation.

[pastacode lang= »javascript » message= »Contrôle des Fenêtres » highlight= » » provider= »manual »]
-- Controle de l'etat des ouvertures
--

-- Initialisation des variables
local msg01 = "Controle%20Fenaitre%20...%20"
local msg02 = ""
local msg03 = ""
local msg04 = ""
local msg05 = ""
local msg06 = ""
local msg07 = ""
local msg08 = ""
local msg09 = ""
local flag = 0
local url_sarah = "http://192.168.1.40:8080/sarah/parle?phrase="

-- Lecture de l'etat des capteurs de fenêtre
local SID_SS = "urn:micasaverde-com:serviceId:SecuritySensor1"
local Etat = "Tripped"
local etatfenetreA = luup.variable_get(SID_SS, Etat, SEC_CAP_ANAIS)
local etatfenetreB = luup.variable_get(SID_SS, Etat, SEC_CAP_BRIGITTE)
local etatfenetreC = luup.variable_get(SID_SS, Etat, SEC_CAP_CEDRIC)
local etatfenetreS = luup.variable_get(SID_SS, Etat, SEC_CAP_SALON)
local etatfenetreST = luup.variable_get(SID_SS, Etat, SEC_CAP_SALON_TV)
local etatfenetreKD = luup.variable_get(SID_SS, Etat, SEC_CAP_CUISINE_D)
local etatfenetreKG = luup.variable_get(SID_SS, Etat, SEC_CAP_CUISINE_G)

-- Positionnement du/des messages en fonction de l'etat de chaque fenêtre
-- la variable flag sera mis à 1 si au moins une fenêtre est ouverte
if (etatfenetreA == "1") then 
    msg03 = "Fenaitre%20Anaïs%20.%20"
    flag = "1" 
end 
if (etatfenetreB == "1") then 
    msg04 = "Fenaitre%20Brigitte%20.%20"
    flag = "1"
end
if (etatfenetreC == "1") then 
    msg05 = "Porte%20Fenaitre%20Cédric%20.%20"
    flag = "1"
end
if (etatfenetreS == "1") then 
    msg06 = "Porte%20Fenaitre%20Salon%20.%20"
    flag = "1"
end
if (etatfenetreST == "1") then 
    msg07 = "Porte%20Fenaitre%20Salon%20Tailai%20.%20"
    flag = "1"
end
if (etatfenetreKD == "1") then
    msg08 = "Fenaitre%20Cuisine%20:%20ventail%20droit%20.%20"
    flag = "1"
end
if (etatfenetreKG == "1") then 
    msg09 = "Fenaitre%20Cuisine%20:%20ventail%20gauche.%20"
    flag = "1"
end

-- Contrôle etat flag 
if flag == "1" then 
    -- flag positionné à 1 --> mise à jour VirtualSwitch 
    --                         et message vocal "Attention! Fenêtre ouverte"
   luup.call_action("urn:upnp-org:serviceId:VSwitch1","SetTarget",{newTargetValue="1"},156) 
   luup.variable_set("urn:upnp-org:serviceId:VSwitch1", "Text1", "Au Moins Une", 156)
   luup.variable_set("urn:upnp-org:serviceId:VSwitch1", "Text2", "Fenêtre Ouverte", 156)
   msg02 = "Attention!!!%20Fenaitre%20ouverte%20...%20"
else
    -- sinon --> mise à jour VirtualSwitch
    --           et message vocal "Toutes les fenêtres sont fermées"
   luup.call_action("urn:upnp-org:serviceId:VSwitch1","SetTarget",{newTargetValue="0"},156) 
   luup.variable_set("urn:upnp-org:serviceId:VSwitch1", "Text1", "Toutes Fenêtres", 156)
   luup.variable_set("urn:upnp-org:serviceId:VSwitch1", "Text2", "Fermées", 156)
   msg02 = "Toutes%20les%20fenaitre%20sont%20fermai%20."
end

-- EvtFenetre est mis à 1 si c'est un evenement fenetre qui a lancé cette scene pour invalider le message vocal
-- Si la scène est lancée par la demande d'activation d'alarme, ou par Sarah --> le message vocal est envoyé
if EvtFenetre == 0 then
    local varmsg_sarah = url_sarah .. msg01 .. msg02 .. msg03 .. msg04 .. msg05 .. msg06 .. msg07 .. msg08 .. msg09
    luup.inet.wget(varmsg_sarah,1)
end

EvtFenetre = 0
return true
[/pastacode]