pepite Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Bonjour, Tu n'as pas l'air d'utiliser les modes de depart. Tu as declare tes propres variables au milieu de JOUR and armed et autre Ta scene fonctionne en l'etat ? De même tu fait le test des ouvrants directement. Tu as l'air de refaire une scene alors que @Moicphil a tout prevu en couplant le VD et la scene. Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Bonjour pépite, j'utilise bien l'ensemble VD/scene de Moicphil. j'ai un autre VD, une télécommande, avec les boutons Marche / Arrêt de l'alarme qui change l'état de ma variable prédéfinie Etat_Alarme. Si cette variable Etat_Alarme reste sur ON, la scène fonctionne tel que programmé.. Si Etat_alarme ON alors j’appuie sur l'un des modes Jour, nuit ou silence. Si Etat_alarme OFF alors j’appuie sur Arrêt. J'ai l'impression, que ça se mort la queue. Quand la scène est lancée, si je met sur OFF la variable Etat_alarme, je bascule dans le mode arrêt alors que la séquence du mode jour n'est pas terminée. J'ai donc deux instances en cours de la scène. Je me trompe peut-être... En gros je souhaiterais avoir le même fonctionnement que mon alarme Diagral. Avec les capteurs 60/388/390 et 392, je temporise de 30 sec le déclenchement de la sirène (alternance de marche/arret) Si pendant ces 30secondes je désactive l'alarme (VD Etat_Alarme == "OFF") , la sirène ne doit pas sonner. Avec les autres capteurs, je déclenche directement la sirène (alternance de marche/arret) Quand je désactive l'alarme, si la sirène sonne, elle se coupe. Dans mon fonctionnement de ce VD, en tant qu'alarme, je ne pense pas avoir besoin de la condition "not armed" Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Ce que je comprends : - Ton VD met la variable Etat_Alarme à ON ou OFF, il ne fait que ca ? - tu utilises le VD/scene de moicphil complet donc : --> tu as bien crée les 3 variables - tu utilises les 3 modes dans lesquels tu as declarés les IDs de tes capteurs. - as tu armé tes sensors dans les boutons de mode ? - ETAT Alarme = ON : mode jour, nuit ou silence - ETAT Alarme OFF : ARRET 2 fonctionnements : - Avec 60/388/390 et 392, tempo de 30 secs, si dans ces 30 sec : arret, pas de sirene - les autres capteurs : sirene, si ETAT ALRME : OFF, sirene OFF c'est ca ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Mon VD arme et désarmé les modules J'ai suivi le tuto de moicphil donc je pense avoir créé les 3 variables. De mémoire pa-sensor, pa-mode et.... Dans les trois modes j'ai déclaré les sensors. j'ai dès actions différentes àchaque mode. Par exemple, positionnement d'une caméra, désactivation du wifi,etc... Mais pour l'instant je travail que sur le mode jour Pour le fonctionnement, c'est bien ca. Je te remercie pour ton aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 pourquoi desarme et arme les modules avec un autre VD alors que c'est prévu dans les boutons mode jour, nuit et silence ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Dans la scène de moicphil, il y la condition armé ou non armé pour chaque mode. C'est pour cela que j'utilise un autre VD. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 8 mars 2016 Signaler Partager Posté(e) le 8 mars 2016 Essaie juste ceci peut-etre, avant d'en rajouter pour la tempo,de 30 secs pour les capteurs "particuliers", il faut que tu mettes le mode arret dans les 30 secs, enfin je crois --[[ %% properties %% globals PA_Mode PA_Sensors --]] ------------------------ local portables = {xx, xx} local id_module_virtuel = xxx ------------------------- local AlarmeMaison = fibaro:getGlobal("Etat_Alarme") local AlarmeCabane = fibaro:getGlobal("Cabane_Alarme") local VGJourNuit = fibaro:getGlobal("Jour_Nuit") local capteurs = {388, 390, 392, 60} ----------------------------------- 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 ----------------------------------------------------------------- if AlarmeMaison == "ON" then for i=1, #capteurs do if (fibaro:getValue(capteurs[i], "value") > 0) then local lastmodif = fibaro:getModificationTime(capteurs[i], "value") if (((os.time() - lastmodif) <= 30) and (mode == "Arret")) then fibaro:call(339, "turnOff") --Sirene interieure OFF end end end end ----------------------------------------------------------------- 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 -- Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 9 mars 2016 Signaler Partager Posté(e) le 9 mars 2016 Quelquechose comme ceci peut-etre mais lorsque tu bascules en mode arret par exemple, PA_Mode etant un trigger ca relance une scene c'est pour ca que tu te mords la queue je pense... je t'ai mis un limitation à 1 seule scene en cours Qu'as tu mis derriere le bouton arret ? --[[ %% properties %% globals PA_Mode PA_Sensors --]] ------------------------ local portables = {xx, xx} local id_module_virtuel = xxx ------------------------- -- Limitation à 1 seule instance en cours ----- if (fibaro:countScenes() > 1) then fibaro:abort() end -------------------------------- local AlarmeMaison = fibaro:getGlobal("Etat_Alarme") local AlarmeCabane = fibaro:getGlobal("Cabane_Alarme") local VGJourNuit = fibaro:getGlobal("Jour_Nuit") -- liste des capterus "sensibles" local capteurs = {388, 390, 392, 60} -- recuperation de l'etat des capteurs sensibles au lancement de la scene local Statut = { portegaragekevin = fibaro:getValue(388, "value") > 0, portegarageflo = fibaro:getValue(390, "value") > 0, entreegaragekevin = fibaro:getValue(392, "value") > 0, porteentree = fibaro:getValue(60, "value") > 0, etat = 0 } ----------------------------------- 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 ----------------------------------------------------------------- -- SI 1 des capteurs sensibles est =1 alors variable etat = 1 if (Statut["portegaragekevin"] or Statut["portegarageflo"] or Statut["entreegaragekevin"] or Statut["porteentree"]) then Statut["etat"] = 1 end -- Si alarmemaison =ON et variable etat = 1 if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then fibaro;debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles if (fibaro:getValue(capteurs[i], "value") > 0) then local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification if (((os.time() - lastmodif) <= 30) and (mode == "Arret")) then --si dans les 30 secs et mode arret fibaro:call(339, "turnOff") --Sirene interieure OFF end end end elseif ((AlarmeMaison == "ON") and (Statut["etat"] == 0)) then Fibaro:debug("Alarme MAISON : ON, Aucun capteur sensible") fibaro:call(309, "pressButton", "2") --envoi SMS fibaro:call(339, "turnOn") --Sirene interieure ON fibaro:sleep(6*1000) fibaro:call(339, "turnOff") --Sirene interieure OFF end Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 10 mars 2016 Signaler Partager Posté(e) le 10 mars 2016 pour l'instant je n'ai rien dans le bouton arrêt. Par contre dans le bouton qui désactive l'alarme, celui-ci désarme tous les capteurs et appuie sur le bouton arrêt du VD de Moicphil. Je n'ai pas encore eu le temps de tester ton script, ce weekend je l’espère... Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 11 mars 2016 Signaler Partager Posté(e) le 11 mars 2016 bonjour kinou, J'ai tout de même l'impresson que ton VD fait la même chose que les boutons du VD d'origine, je m'explique : - tu mets à jour ta variable globale ALARME en on ou off - tu armes tes modules - tu les desarmes tu pourrais tout faire depuis le VD d'origine : - sur le bouton jour par exemple : --> mettre à jour ta variable ALARME --> armer les modules comme prévus par le VD - sur le bouton arret : --> desarmer tes modules Lien vers le commentaire Partager sur d’autres sites More sharing options...
Moicphil Posté(e) le 11 mars 2016 Auteur Signaler Partager Posté(e) le 11 mars 2016 Salut Désolè, j'arrive un peu tard sur ce post... Pepite est dans la place, ca m'arrange, j'ai pas tout compris de ce que tu souhaitais faire Kinou.69 ... Temporiser le déclenchement de l'alarme sur certains capteurs, c'est ca ? Je ne vois pas pourquoi tu utilise 2 VD, un seul devrais suffir méme si tu n'utilise que certaines fonctions de la scène ( armé ou non, etc... ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 12 mars 2016 Signaler Partager Posté(e) le 12 mars 2016 je suis tous a fait d'accord avec vous, tout est faisable dans le VD Alarme Avancée. J'utilisais mon VD plus comme une télécommande d'alarme car j'envisage de domotiser mon alarme Diagral. Moicphil, c'est tout a fait cela, je souhaite temporiser le déclenchement de l'alarme et de la sirène si certains capteurs sont en alerte. Ensuite je souhaiterais que la sirène fonctionne cycliquement (marche arrêt avec tempo de 30secondes). J'en profite pour vous raconter ce qui nous est arrivé cette semaine. Ma femme est rentrée a la maison et a oublié de désactiver l'alarme Diagral. La sirène extérieure a fonctionné une 20aine de minutes par intermittence. Les voisins sont sortis dans la rue pour voir ce qui se passait. Ils n'ont pas osés rentrer dans le terrain inspecter la maison car c'était en pleine journée. Gênée par la sirène, ma femme s'est décidée, au bout de 20minutes, d'aller voir dehors; elle pensait que c'était l'alarme d'une voiture : c'est alors qu'elle a compris... Merci Chérie... Vivement que cette alarme (HC2) soit enfin opérationnelle. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 12 mars 2016 Signaler Partager Posté(e) le 12 mars 2016 La sirène intérieure (intégrée àla centrale) Diagral n'a pas sonné ? Parce qu'avec ça, ta femme n'aurait pas tenu 30 secondes (je le sais bien, ça arrive régulièrement àla mienne) Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 13 mars 2016 Signaler Partager Posté(e) le 13 mars 2016 c'est vrai, j'y avais pas pensé. alors je ne sais pas, je lui poserais la question. Même si la centrale est cachée dans un placard, elle est quand même du bruit. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Moicphil Posté(e) le 13 mars 2016 Auteur Signaler Partager Posté(e) le 13 mars 2016 Salut Concernant les tempos selon différents "id" , as-tu essayé la modif de @pepite ? Ca devrait le faire je pense. Par contre tu dis "désarmer" via un bouton autre que celui du VD, pense bien donc à "vider" l'encodage des sensors et changer le "mode" fibaro:setGlobal("PA_Mode","arret") fibaro:setGlobal("PA_Exclus", "") Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 15 mars 2016 Signaler Partager Posté(e) le 15 mars 2016 J'ai finalement abandonné mon VD. Par contre j'ai essayé le dernier script de pépite, mais j'ai un message d'erreur : [DEBUG] 21:39:26: line 26: attempt to compare number with string ligne dans la déclaration des capteurs sensibles de la variable local statut Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 17 mars 2016 Signaler Partager Posté(e) le 17 mars 2016 Bonjour, Désolé, en formation en ce moment, pas trop devant la bete et sur le forum Essaie ceci alors, mais bizarre J'ai rajoute des "tonumber" dans la declaration delocal statut ;-) Ce n'est peut-etre que le début des BUGS ;-) --[[ %% properties %% globals PA_Mode PA_Sensors --]] ------------------------ local portables = {xx, xx} local id_module_virtuel = xxx ------------------------- -- Limitation à 1 seule instance en cours ----- if (fibaro:countScenes() > 1) then fibaro:abort() end -------------------------------- local AlarmeMaison = fibaro:getGlobal("Etat_Alarme") local AlarmeCabane = fibaro:getGlobal("Cabane_Alarme") local VGJourNuit = fibaro:getGlobal("Jour_Nuit") -- liste des capterus "sensibles" local capteurs = {388, 390, 392, 60} -- recuperation de l'etat des capteurs sensibles au lancement de la scene local Statut = { portegaragekevin = tonumber(fibaro:getValue(388, "value")) > 0, portegarageflo = tonumber(fibaro:getValue(390, "value")) > 0, entreegaragekevin = tonumber(fibaro:getValue(392, "value")) > 0, porteentree = tonumber(fibaro:getValue(60, "value")) > 0, etat = 0 } ----------------------------------- 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 ----------------------------------------------------------------- -- SI 1 des capteurs sensibles est =1 alors variable etat = 1 if (Statut["portegaragekevin"] or Statut["portegarageflo"] or Statut["entreegaragekevin"] or Statut["porteentree"]) then Statut["etat"] = 1 end -- Si alarmemaison =ON et variable etat = 1 if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then fibaro;debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles if (fibaro:getValue(capteurs[i], "value") > 0) then local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification if (((os.time() - lastmodif) <= 30) and (mode == "Arret")) then --si dans les 30 secs et mode arret fibaro:call(339, "turnOff") --Sirene interieure OFF end end end elseif ((AlarmeMaison == "ON") and (Statut["etat"] == 0)) then Fibaro:debug("Alarme MAISON : ON, Aucun capteur sensible") fibaro:call(309, "pressButton", "2") --envoi SMS fibaro:call(339, "turnOn") --Sirene interieure ON fibaro:sleep(6*1000) fibaro:call(339, "turnOff") --Sirene interieure OFF end Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 17 mars 2016 Signaler Partager Posté(e) le 17 mars 2016 Merci pepite, ligne 57 , j'ai remplacé ==0 par <1 ligne 58 j'ai mis un f minuscule. ligne 50 j'ai rajouté un tonumber la 2eme partie "aucun capteur sensible" du code semble fonctionner. je ne comprend pas ton code sur les capteurs sensible mais cela ne fonctionne pas. Je ne voit pas comment est géré l'activation de la sirène après la tempo de 30secondes. Dans les propriétés de la scène, j'ai comme déclencheur tous les capteurs : xxx value Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 20 mars 2016 Signaler Partager Posté(e) le 20 mars 2016 Saut kinou, Ben j'ai peut-etre mal compris, mais l'idee etait que si tes 4 capteurs sensibles sont ON, alors tu voulais pouvoir dans les 30 secs,passer ta sirene en OFF et non en ON ? -- SI 1 des capteurs sensibles est =1 alors variable etat = 1 if (Statut["portegaragekevin"] or Statut["portegarageflo"] or Statut["entreegaragekevin"] or Statut["porteentree"]) then Statut["etat"] = 1 end fibaro:debug("Statut Etat" : ..Statut["etat"]) -- Si alarmemaison =ON et variable etat = 1 if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then -- Si 1 des capteurs sensibles est concernes par l'alerte et ALARME MAISON Active fibaro:debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles if (fibaro:getValue(capteurs[i], "value") > 0) then -- on recupere les capteurs qui sont en alerte local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation du moment de la derniere modification, de 0 à 1 donc if (((os.time() - lastmodif) <= 30) and (mode == "Arret")) then -- si on est dans les 30 secs et que tu passe en mode arret, si le temps actuel - dernier modif inf à 30 secs fibaro:call(339, "turnOff") -- alors on met la Sirene interieure en OFF end end end J'ai rajoute des commentaires. Dans ma tete ca parait logique, mais de la à etre sur du code Heuuuu.. On va y arriver, pas de soucis ;-) cherchons ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 20 mars 2016 Signaler Partager Posté(e) le 20 mars 2016 Bonjour Pépite, je te remercie vraiment pour ton aide. dans le principe, quand mon alarme est active, je souhaite que sur détection d'un capteur la sirène sonne. Sauf pour 4 capteurs sensible pour lesquels la sirène 30secondes apres la détection de ces capteurs. Si dans ces 30secondes, j’arrête l'alarme, la sirene ne doit pas sonner sur détection d'un de ces 4 capteurs sensible. Plus tard, la box sera couplée a mon alarme diagral. Je veux pouvoir rentrer chez moi (porte d'entrée ou portes de garages), et avoir le temps de desactiver l'alarme diagral (moins de 30 secondes). en désactivant l'alarme diagral, sui sera domotisée, l'alarme HC2 sera automatiquement désactvée. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 20 mars 2016 Signaler Partager Posté(e) le 20 mars 2016 j'ai rajoute tes modifs dans le code ajout d'un else pour les capteurs sensibles, si pas de passage en mode arret, alors sirene interieure sonne ;-) --[[ %% properties %% globals PA_Mode PA_Sensors --]] ------------------------ local portables = {xx, xx} local id_module_virtuel = xxx ------------------------- -- Limitation à 1 seule instance en cours ----- if (fibaro:countScenes() > 1) then fibaro:abort() end -------------------------------- local AlarmeMaison = fibaro:getGlobal("Etat_Alarme") local AlarmeCabane = fibaro:getGlobal("Cabane_Alarme") local VGJourNuit = fibaro:getGlobal("Jour_Nuit") -- liste des capterus "sensibles" local capteurs = {388, 390, 392, 60} -- recuperation de l'etat des capteurs sensibles au lancement de la scene local Statut = { portegaragekevin = tonumber(fibaro:getValue(388, "value")) > 0, portegarageflo = tonumber(fibaro:getValue(390, "value")) > 0, entreegaragekevin = tonumber(fibaro:getValue(392, "value")) > 0, porteentree = tonumber(fibaro:getValue(60, "value")) > 0, etat = 0 } ----------------------------------- 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 ----------------------------------------------------------------- -- SI 1 des capteurs sensibles est =1 alors variable etat = 1 if (Statut["portegaragekevin"] or Statut["portegarageflo"] or Statut["entreegaragekevin"] or Statut["porteentree"]) then Statut["etat"] = 1 end -- Si alarmemaison =ON et variable etat = 1 if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then fibaro;debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles if tonumber((fibaro:getValue(capteurs[i], "value")) > 0) then local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification if (((os.time() - lastmodif) <= 30) and (mode == "Arret")) then --si dans les 30 secs et mode arret fibaro:call(339, "turnOff") --Sirene interieure OFF else fibaro:call(339, "turnOn") --Sirene interieure ON end end end elseif ((AlarmeMaison == "ON") and (Statut["etat"] < 1)) then fibaro:debug("Alarme MAISON : ON, Aucun capteur sensible") fibaro:call(309, "pressButton", "2") --envoi SMS fibaro:call(339, "turnOn") --Sirene interieure ON fibaro:sleep(6*1000) fibaro:call(339, "turnOff") --Sirene interieure OFF end Lien vers le commentaire Partager sur d’autres sites More sharing options...
kinou.69 Posté(e) le 20 mars 2016 Signaler Partager Posté(e) le 20 mars 2016 Bonsoir pepite, ligne 50 j'ai déplacé la première parenthèse avant tonumber. quand un des capteurs sensibles est en alerte, la sirene sonne de suite. la scène passe directement dans le else ligne 55. j'ai compris le principe des lignes 51 et 52, mais je ne vois ce qu'il faut faire... Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 21 mars 2016 Signaler Partager Posté(e) le 21 mars 2016 Salut kinou, Bon ben alors pourquoi dans le else direct ;-) J'ai mis des debug un peu partout pour voir où on est ;-) J'ai enleve la sirene et mis aussi des debugs pour eviter de la faire sonner, plus sympa pour les tests. Je me demande si on ne devrait pas faire avec un while --[[ %% properties %% globals PA_Mode PA_Sensors --]] ------------------------ local portables = {xx, xx} local id_module_virtuel = xxx ------------------------- -- Limitation à 1 seule instance en cours ----- if (fibaro:countScenes() > 1) then fibaro:abort() end -------------------------------- local AlarmeMaison = fibaro:getGlobal("Etat_Alarme") local AlarmeCabane = fibaro:getGlobal("Cabane_Alarme") local VGJourNuit = fibaro:getGlobal("Jour_Nuit") -- liste des capterus "sensibles" local capteurs = {388, 390, 392, 60} -- recuperation de l'etat des capteurs sensibles au lancement de la scene local Statut = { portegaragekevin = tonumber(fibaro:getValue(388, "value")) > 0, portegarageflo = tonumber(fibaro:getValue(390, "value")) > 0, entreegaragekevin = tonumber(fibaro:getValue(392, "value")) > 0, porteentree = tonumber(fibaro:getValue(60, "value")) > 0, etat = 0 } ----------------------------------- 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 ----------------------------------------------------------------- -- SI 1 des capteurs sensibles est =1 alors variable etat = 1 if (Statut["portegaragekevin"] or Statut["portegarageflo"] or Statut["entreegaragekevin"] or Statut["porteentree"]) then Statut["etat"] = 1 end fibaro:debug("Valeur Statut[Etat] : " ..Statut["etat"]) -- Si alarmemaison =ON et variable etat = 1 if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then fibaro:debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles local value = tonumber(fibaro:getValue(capteurs[i], "value")) fibaro:debug("Capteurs num : " ..capteurs[i].. "a pour valeur " ..value) local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification fibaro:debug("Capteurs num : " ..capteurs[i].. " lastModif : " ..lastmodif) if (value > 0) then local diff = tonumber(os.difftime(os.time(), lastmodif)) fibaro:debug("Difference : " ..diff.. "pour capteurs num : " ..capteurs[i]) if (diff <= 30) then --si difference < 30 secs fibaro:debug("Sirene turnOff") --Sirene interieure OFF else fibaro:debug("Sirene turnOn") --Sirene interieure ON end end end elseif ((AlarmeMaison == "ON") and (Statut["etat"] < 1)) then fibaro:debug("Alarme MAISON : ON, Aucun capteur sensible") fibaro:call(309, "pressButton", "2") --envoi SMS fibaro:call(339, "turnOn") --Sirene interieure ON fibaro:sleep(6*1000) fibaro:call(339, "turnOff") --Sirene interieure OFF end Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 21 mars 2016 Signaler Partager Posté(e) le 21 mars 2016 ou comme ceci peut-etre if ((AlarmeMaison == "ON") and (Statut["etat"] > 0)) then fibaro:debug("Alarme Maison : ON, Capteurs sensibles") for i=1, #capteurs do --pour les capteurs sensibles local value = tonumber(fibaro:getValue(capteurs[i], "value")) fibaro:debug("Capteurs num : " ..capteurs[i].. "a pour valeur " ..value) local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification fibaro:debug("Capteurs num : " ..capteurs[i].. " lastModif : " ..lastmodif) if (value > 0) then local diff = tonumber(os.difftime(os.time(), lastmodif)) fibaro:debug("Difference : " ..diff.. "pour capteurs num : " ..capteurs[i]) while (diff <= 30) do if (mode == "Arret") then fibaro:debug("Sirene turnOff") --Sirene interieure OFF end end else fibaro:debug("Sirene turnOn") --Sirene interieure ON end end elseif ((AlarmeMaison == "ON") and (Statut["etat"] < 1)) then fibaro:debug("Alarme MAISON : ON, Aucun capteur sensible") fibaro:call(309, "pressButton", "2") --envoi SMS fibaro:call(339, "turnOn") --Sirene interieure ON fibaro:sleep(6*1000) fibaro:call(339, "turnOff") --Sirene interieure OFF end Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 21 mars 2016 Signaler Partager Posté(e) le 21 mars 2016 Juste pour info local value = tonumber(fibaro:getValue(capteurs[i], "value")) fibaro:debug("Capteurs num : " ..capteurs[i].. "a pour valeur " ..value) local lastmodif = fibaro:getModificationTime(capteurs[i], "value") -- recuperation modification fibaro:debug("Capteurs num : " ..capteurs[i].. " lastModif : " ..lastmodif) Peut être optimisé pas local value, lastmodif = fibaro:get(465, "value") fibaro:debug("Capteurs num : " ..capteurs[i].. "a pour valeur " ..value .. " lastModif : " ..lastmodif) Après, à vue d'oeil, je vois pas comment tu vas sortir de ta boucle : while (diff <= 30) do if (mode == "Arret") then fibaro:debug("Sirene turnOff") --Sirene interieure OFF end end Voici une proposition avec une durée maximum pour éviter la crise cardiaque if (diff <= 30) then fibaro:debug("Sirene turnOn") --Sirene interieure ON local start = 0 local dureemax = 180 -- 3 minutes maximum while (mode ~= "Arret" and start <= dureemax) do fibaro:sleep(1000) start = start + 1 end fibaro:debug("Sirene turnOff") --Sirene interieure OFF end 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés