Aller au contenu

Messages recommandés

Posté(e)

Est ce que quelqu'un peut m'expliquer plus précisément cette fonction ? :

 

 fibaro:countScenes(sceneID) > 1 then fibaro:abort(sceneID)

 

Pour info, voila mon script :

(Je viens de le passer de "block" en "lua")

--[[
%% properties
133 value
25 value
26 value
27 value
28 value
29 value
30 value
31 value
132 value
103 value
131 value
104 value
133 armed
25 armed
26 armed
27 armed
28 armed
29 armed
30 armed
31 armed
132 armed
103 armed
131 armed
104 armed
%% globals
VAR
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0)  or  (tonumber(fibaro:getValue(25, "value")) > 0 and tonumber(fibaro:getValue(25, "armed")) > 0)  or  (tonumber(fibaro:getValue(26, "value")) > 0 and tonumber(fibaro:getValue(26, "armed")) > 0)  or  (tonumber(fibaro:getValue(27, "value")) > 0 and tonumber(fibaro:getValue(27, "armed")) > 0)  or  (tonumber(fibaro:getValue(28, "value")) > 0 and tonumber(fibaro:getValue(28, "armed")) > 0)  or  (tonumber(fibaro:getValue(29, "value")) > 0 and tonumber(fibaro:getValue(29, "armed")) > 0)  or  (tonumber(fibaro:getValue(30, "value")) > 0 and tonumber(fibaro:getValue(30, "armed")) > 0)  or  (tonumber(fibaro:getValue(31, "value")) > 0 and tonumber(fibaro:getValue(31, "armed")) > 0)  or  (tonumber(fibaro:getValue(132, "value")) > 0 and tonumber(fibaro:getValue(132, "armed")) > 0)  or  (tonumber(fibaro:getValue(103, "value")) > 0 and tonumber(fibaro:getValue(103, "armed")) > 0)  or  (tonumber(fibaro:getValue(131, "value")) > 0 and tonumber(fibaro:getValue(131, "armed")) > 0)  or  (tonumber(fibaro:getValue(104, "value")) > 0 and tonumber(fibaro:getValue(104, "armed")) > 0) )
and
 ( tonumber(fibaro:getGlobalValue("VAR")) == tonumber("3") )
or
startSource["type"] == "other"
)
then
	fibaro:call(5, "pressButton", "5");
	fibaro:call(82, "pressButton", "1");
	fibaro:call(138, "pressButton", "1");
	fibaro:call(7, "pressButton", "5");
	fibaro:call(7, "pressButton", "7");
	fibaro:sleep(15000);
	fibaro:call(42, "setValue", "100");
	fibaro:call(38, "setValue", "100");
	fibaro:call(43, "setValue", "100");
	fibaro:sleep(135000);
	fibaro:call(82, "pressButton", "2");
	fibaro:sleep(30000);
	fibaro:call(42, "turnOff");
	fibaro:call(38, "turnOff");
	fibaro:call(43, "turnOff");
end

Mon problème est le suivant :

 

Cette scène concerne la gestion d'une intrusion si une porte passe en alerte.

 

Elle fonctionne bien, néanmoins, quand cette scène se déclenche, je reçois des push en continu tant que la porte n'est pas refermée!

 

La fonction push vient d'un VD ( fibaro:call(5, "pressButton", "5") avec le service "Pushover"

 

D’où ma question, est ce que je peux utiliser la fonction "fibaro:countScenes(sceneID) > 1 then fibaro:abort(sceneID)" ?

 

Si oui, ou dois je la positionner dans mon code ?

 

Merci d'avance

Posté(e)

Désolé, je n'ai pas le temps de regarder.... je peux juste t'indiquer que tu n'as pas àcontourner le problème que tu rencontres avec une fonction

A mon avis, il y a un bug dans ton code : le changement d'état d'un détecteur de porte ne devant générer qu'une seule alerte (sauf àvouloir la traiter dans une boucle)

Posté(e)

En fait le bug que tu as, c'est que tu as as mis dans ton code:

(tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0)

Ce qui signifie que tant que ta  porte est ouverte et qu'il est armé il fera ....

 

 

Essaye plutot un truc comme:

(trigger['deviceID']= 113 and tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0)

Ce qui signifira que si on ouvre la porte  et que c'est armé il fera ...

(trigger['deviceID']= 113 and tonumber(fibaro:getValue(133, "value")) == 0 and tonumber(fibaro:getValue(133, "armed")) > 0)

Ce qui signifira que si on ferme la porte  et que c'est armé il fera ...

 

et pour faire encore plus simple

 

if (trigger['deviceID']==tostring(doorID)) then

 

PS: J'ai pas essayer c'est juste de tête ^^

 

edit:

Tu peux aussi essayer un truc comme sa:

--[[
%% properties
133 value
25 value
26 value
27 value
28 value
29 value
30 value
31 value
132 value
103 value
131 value
104 value
133 armed
25 armed
26 armed
27 armed
28 armed
29 armed
30 armed
31 armed
132 armed
103 armed
131 armed
104 armed
%% globals
VAR
--]]

local doorID = {133,25,26,27,28,29,30,132,103,131,104};

if (trigger['type']=='property') then
  for i =1, #doorID do
    --Porte s'ouvre
    if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "value")) > 0 and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
          fibaro:call(5, "pressButton", "5");
          fibaro:call(82, "pressButton", "1");
          fibaro:call(138, "pressButton", "1");
          fibaro:call(7, "pressButton", "5");
          fibaro:call(7, "pressButton", "7");
          fibaro:sleep(15000);
          fibaro:call(42, "setValue", "100");
          fibaro:call(38, "setValue", "100");
          fibaro:call(43, "setValue", "100");
          fibaro:sleep(135000);
          fibaro:call(82, "pressButton", "2");
          fibaro:sleep(30000);
          fibaro:call(42, "turnOff");
          fibaro:call(38, "turnOff");
          fibaro:call(43, "turnOff");
    --Porte se ferme
    elseif (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "value")) == 0 and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
    
    end
  end
end
Posté(e)

Derient ;)

 

sinon plus simple

if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then

Chaque fois que la porte s'ouvre ou se ferme et qu'elle est armé. ;)

Posté(e)

Je viens de faire un essais, mais ca ne fonctionne pas.

J'ai ça comme erreur : [ERROR] 17:10:13: line 34: attempt to index global 'trigger' (a nil value)

 
Mon script :

 
--[[
%% properties
133 value
25 value
26 value
27 value
28 value
29 value
30 value
31 value
132 value
103 value
131 value
104 value
133 armed
25 armed
26 armed
27 armed
28 armed
29 armed
30 armed
31 armed
132 armed
103 armed
131 armed
104 armed
%% globals
VAR
--]]
 
local doorID = {133,25,26,27,28,29,30,132,103,131,104};
 
if (trigger['type']=='property') then
  for i =1, #doorID do
    --Porte s'ouvre
if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
          fibaro:call(5, "pressButton", "5");
         -- fibaro:call(82, "pressButton", "1");
       --   fibaro:call(138, "pressButton", "1");
       --   fibaro:call(7, "pressButton", "5");
       --   fibaro:call(7, "pressButton", "7");
      --    fibaro:sleep(15000);
        --  fibaro:call(42, "setValue", "100");
       --   fibaro:call(38, "setValue", "100");
       --   fibaro:call(43, "setValue", "100");
       --   fibaro:sleep(135000);
       --   fibaro:call(82, "pressButton", "2");
       --   fibaro:sleep(30000);
       --   fibaro:call(42, "turnOff");
       --   fibaro:call(38, "turnOff");
       --   fibaro:call(43, "turnOff");
    --Porte se ferme
    elseif  (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
    
    end
  end
end
Posté(e)

lol oui, rajoute ça a côté de l'autre local

local trigger = fibaro:getSourceTrigger();

Je t'ai dis que j'avais de tête comme sa ^^.

Posté(e)

Ok, merci, j'ai rajouté et je n'ai plus de message d'erreur mais j'ai plus de push !

 
--[[
%% properties
133 value
25 value
26 value
27 value
28 value
29 value
30 value
31 value
132 value
103 value
131 value
104 value
133 armed
25 armed
26 armed
27 armed
28 armed
29 armed
30 armed
31 armed
132 armed
103 armed
131 armed
104 armed
%% globals
VAR
--]]
 
local doorID = {133,25,26,27,28,29,30,132,103,131,104};
local trigger = fibaro:getSourceTrigger();

if (trigger['type']=='property')
   and
 ( tonumber(fibaro:getGlobalValue("VAR")) == tonumber("3") )
  then
  
  for i =1, #doorID do
    --Porte s'ouvre
if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
          fibaro:call(5, "pressButton", "5");
         -- fibaro:call(82, "pressButton", "1");
       --   fibaro:call(138, "pressButton", "1");
       --   fibaro:call(7, "pressButton", "5");
       --   fibaro:call(7, "pressButton", "7");
      --    fibaro:sleep(15000);
        --  fibaro:call(42, "setValue", "100");
       --   fibaro:call(38, "setValue", "100");
       --   fibaro:call(43, "setValue", "100");
       --   fibaro:sleep(135000);
       --   fibaro:call(82, "pressButton", "2");
       --   fibaro:sleep(30000);
       --   fibaro:call(42, "turnOff");
       --   fibaro:call(38, "turnOff");
       --   fibaro:call(43, "turnOff");
       --Porte se ferme
    elseif  (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then
  
    end
  end
end
Posté(e)

Ta modifier mon code. Enleve le elseif car c est la meme condition que le if.

En theorie sa devrais fonctionner sans probleme.

Je regarde des que je suis devanr mon pc.

Posté(e)

Non il te manque des valeurs :D.

 

Mais par contre il correspond à  quoi le VAR :/

 

Mais si sa bloque encore met des fibaro:debug pour voir ou.

  • 2 ans après...
Posté(e)

@Moicphil, tu as toujours ton "bug" ?

 

J'ai une scène:

 

J'ai un FGS221:

S1 à  OFF et S2 à  OFF: ETAT 1

S1 à  ON et S2 à  OFF: ETAT 2

S1 à  ON et S2 à  OFF: ETAT 3

--[[
%% properties
386 value
388 value
215 value
217 value
410 value
%% events
%% globals
--]]

-- id sorties FGS221 Myfox
local idS1 = 386;
local idS2 = 388;
-- id des WallPlug
local WPCamEntree = 215; 
local WPCamCuisine = 217;
-- id VD serveur SMS PAW
local idPAW = 410;
-- Etats S1 et S2
local EtatS1 = fibaro:getValue(idS1, "value");
local EtatS2 = fibaro:getValue(idS2, "value");

if (EtatS1 == "0") and (EtatS2 == "0")
  then EtatMyfox = "desactivee"
       fibaro:call(WPCamEntree, "turnOff")
       fibaro:call(WPCamCuisine, "turnOff")
       fibaro:debug("Alarme désactivée et caméras éteintes")  
       -- sms via SERVEUR PAW  
       message = ("Bonjour, l'alarme est désactivée et les caméras éteintes")
       fibaro:setGlobal("sms", message);
       fibaro:debug(message)
       -- activation du VD et bouton ad hoc
       fibaro:call(idPAW, "pressButton", "1");
    
elseif

  (EtatS1 == "1") and (EtatS2 == "0")
  then EtatMyfox = "partielle"
       fibaro:call(WPCamEntree, "turnOn")
       fibaro:call(WPCamCuisine, "turnOn")
       fibaro:debug("Alarme partielle et caméras allumées")
       -- sms via SERVEUR PAW  
       message = ("Bonjour, l'alarme est activée PARTIELLE et les caméras allumées")
       fibaro:setGlobal("sms", message);
       fibaro:debug(message)
       -- activation du VD et bouton ad hoc
       fibaro:call(idPAW, "pressButton", "1");


elseif
  (EtatS1 == "1") and (EtatS2 == "1")
  then EtatMyfox = "totale"
       fibaro:call(WPCamEntree, "turnOn")
       fibaro:call(WPCamCuisine, "turnOn")
       fibaro:debug("Alarme totale et caméras allumées")
       -- sms via SERVEUR PAW  
       message = ("Bonjour, l'alarme est activée TOTALE et les caméras allumées")
       fibaro:setGlobal("sms", message);
       fibaro:debug(message)
       -- activation du VD et bouton ad hoc
       fibaro:call(idPAW, "pressButton", "1");





end


et le VD SMS Paw (que le "main process"):

------------------------------------------------------------------------------------------- 
-- Main process 
------------------------------------------------------------------------------------------- 
function SendSMS(number, message) 
  local uri = "/actions/sms.xhtml"; 
  local params = "?numero=" .. number .. "&message=" .. urlencode(tostring(message or "empty")); 
  Tk.Net.isTraceEnabled = false; 
  local HttpClient = Tk.Net.HttpRequest("192.xxx.xxx.xxx", 8080); 
  HttpClient:setReadTimeout(500); 
  local response, status, errorCode = HttpClient:request("GET", 
    uri..params, { 
      "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0", 
      "Accept: text/html,application/xhtml+xml,application/xml;q=0.9" 
    }); 
  HttpClient:disconnect(); 
  HttpClient:dispose(); 
  HttpClient = nil; 
end 
local message = fibaro:getGlobalValue("sms")
-- numéro de tel, message... 
SendSMS("06xxxxxxxx", message); 


L'état m'est envoyé à  chaque fois que la box redémarre (lors d'une mise à  jour de firmware par exemple).

 

Et je reçois 3 SMS à  chaque fois ???

 

Une idée ?

Posté(e)

Salut ,

 

Je n'utilise plus cette scène ( punaise ça date de janvier 2014 )

 

Pour ton pb, c'est bizarre la redondance des push au démarrage car tu n'as pas d' autostart dans l’entête à  ce que je vois.

Les 5 id dans properties correspondent à  des capteurs ? car il n'y a qu'eux qui puissent déclencher ta scène normalement.

Posté(e)

Les ID dans l'entête:

2 wall plug, un VD (sms serveur PAW) et les bornes S1 et S2 du FGS221 ...

 

C'est indispensable de mettre ces ID dans l'entête ?

Et pour l'histoire de 'scène active' ? son utilité ?

Posté(e)

Je viens de supprimer les 5 id de l'entête ... plus qu'un seul sms

Par contre "scène active" coché ou décoché, toujours un DEBUG et SMS lors de l'enregistrement de la scène ...

Posté(e)

Dans l’entête, il faut mettre ce qui va déclencher ta scene,.

 

Si tu décoche "scène active", normalement celle ci ne pourra être lancer que manuellement

Bizarre donc qu'au moment de sauvegarder ca te lance la scène. Je peux pas te dire si c'est normal ou pas ( je dirais non quand même )

×
×
  • Créer...