Aller au contenu
Dogwhite

FGMS001 et Neo coolcam interrupteur

Recommended Posts

Bonjour à tous,

 

J'ai lu et décortiqué plusieurs posts (Smart light, Very Smart light...Trop compliqués) sur la thématique du déclenchement de l'éclairage suite à détection de mouvement et j'ai testé un script trouvé sur le forum mais cela ne fonctionne pas.

 

Voici les composants :

  • FGMS001 et l'interrupteur Neo Coolcam sur 2 lampes extérieures en série.

La cible :

  • Etre en capacité de vérifier le statut de l'interrupteur pour ne pas déclencher la scène s'il est au statut : Allumé
  • Etre en capacité de jouer la scène mais uniquement si le PIR est activé : Paramètre 8
  • Etre en capacité de déclencher l'éclairage de ces lampes sur détection de mouvements, uniquement si la luminosité est inférieure à X Lux.
  • Etre en capacité d'éteindre ces lampes si pas de détection de mouvements pendant X secondes.

 

Les paramètres du FMGS001 :

Capteur exclu du système d'alarme : Coché

1/ 50

2/ 2

3/ 2 impulsions

4/ 2-12 s

6/ 5 s

8/ 2 - Le capteur PIR est actif uniquement durant la nuit pour sauvegarder la longévité de la pile.

9/ 50 Lux

12/ 0

14/ 25 s

16/ 0

20/ 15

22/ 30 s

24/ 0

26/ 0

40/ 25 lux

42/ 1800 s

Le reste sans impact sur le script, je pense.

 

Optimisation :

Dans ce script, il est fait mention a des horaires mais si le paramètre 8 est à nuit, ils ne sont plus nécessaires, correct ?

 

Le script que j'ai modifié sans succès :

--[[
%% properties
64 value
66 value
%% globals
--]]
local id_lampe = 71
local id_mouv_garage = 64
local id_lux_garage = 66
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(64, "value");
local HeureActuelle = os.date("*t");


-- si il y a plus d'une instance en route alors on arrête

if (fibaro:countScenes() > 1) then fibaro:abort() end;


-- entre 17h et 8h du matin s'il y a un mouvement et que les lux < à40 alors on allume tant qu'il y a du mouvement
-- sinon on éteint après 1 minute de calme

if ((HeureActuelle['hour']>= 17 or HeureActuelle['hour'] <= 8) 
and
 ( tonumber(fibaro:getValue(id_mouv_garage, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(id_lux_garage, "value")) <= 40 )
)
then
    fibaro:call(id_lampe, "turnOn");
    fibaro:sleep(60*1000);
  end
 
if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60)
  then
    delayedCheck0 = true;
    end
if 
 ( delayedCheck0 == true )
    then
    fibaro:call(id_lampe, "turnOff")
end

 

Mes ID :

ID.thumb.JPG.e417a42988a321b52c73cc41efe9947d.JPG

 

Merci d'avance pour votre aide.

 

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonne année à tous et toutes,

 

Je remonte cette demande d'aide en haut de la pile.

 

Merci pour l'aide

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

J'ai fait celui-là en créant une variable sur l’état de l'interrupteur pour empêcher le déclenchement de la scène si l'interrupteur est en mode forcé.

Je vais le tester ce soir en arrivant à la maison.

Si d'ici là vous avez des remarques, je suis preneur.

je ne suis, par exemple, pas sur de la position des points virgules.

 

--[[
%% properties
64 value
66 value
%% globals
--]]
local id_lampe = 71
local id_mouv_garage = 64
local id_lux_garage = 66
local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(id_mouv_garage, "value");
local Etat_Inter = fibaro:getValue(71, 'value')

-- S'il y a plus d'une instance en route alors on arrête
local num = fibaro:countScenes()
if num > 1 then
fibaro:abort()
end;
-- Si la lampe est allumée alors on arrête
if (Etat_Inter == '1') then
fibaro:abort()
end;

-- Si detection de mouvement, moins de 40 lux alors on allume.
if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) > 0 )
and
( tonumber(fibaro:getValue(id_lux_garage, "value")) <= 40 ) )
then
    fibaro:call(id_lampe, "turnOn");

-- Si pas de detection pendant 1 minute alors on modifie la variable delayedcheck
if (( tonumber(fibaro:getValue(id_mouv_garage, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60)
  then
    delayedCheck0 = true;
    end
-- Si la variable delayedcheck a changée pour valeur "true" alors on eteint
if 
 ( delayedCheck0 == true )
    then
    fibaro:call(id_lampe, "turnOff")
end;

end

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

perso, j'ai crée 2 scénarios : 

- 1 qui stop le 2nd scénario si en cour et le relance si le nombre de lux est inférieur a une valeur et qu'un mouvement est détecté

- le 2nd qui allume la lampe, attends 15 minutes puis l'éteint

 

on pourrait ajouter : 

- éteindre le 2nd scénario si la lampe est éteinte manuellement.

- bypasser l'exécution du 2nd scénario si celui-ci n'était pas en cours d’exécution et que la lampe est déjà allumée.

Modifié par Cmoi20

Partager ce message


Lien à poster
Partager sur d’autres sites

@Cmoi20

L'idée de 2 scénarios est séduisante.

peux-tu me les envoyer par MP que je jette un coup d’œil ?

Cdlt

Partager ce message


Lien à poster
Partager sur d’autres sites

Résultat des tests :

La lampe s'allume sur détection de mouvement mais ne s'éteint pas après 1 minute de calme.

 

Question : delayedCheck0 est une variable qui être créer ?

J'ai essayé avec cette variable intégrée dans le panneau mais cela ne change rien au résultat.

 

Où ai-je commis une erreur pour que la lampe de s’éteigne pas ?

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici mes scénarios :

 

Mouvement :

--[[
%% killOtherInstances
%% properties
244 value
264 value
%% weather
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();

if (
    ( fibaro:countScenes(20) < 1 )
    and
    ( tonumber(fibaro:getValue(253, "value")) > 0)
  )
  then
  fibaro:debug("mode forcé")
  fibaro:abort()
  end

fibaro:debug("Mouvement  1  : " .. tonumber(fibaro:getValue(244, "value")))
fibaro:debug("Mouvement  2  : " .. tonumber(fibaro:getValue(264, "value")))
fibaro:debug("Luminosité  1 : " .. tonumber(fibaro:getValue(246, "value")))
fibaro:debug("Luminosité  2 : " .. tonumber(fibaro:getValue(265, "value")))
fibaro:debug("Lumière : " .. tonumber(fibaro:getValue(253, "value")))

if (
 (
   ( tonumber(fibaro:getValue(244, "value")) > 0 )
   or 
   ( tonumber(fibaro:getValue(264, "value")) > 0 )
 )
and 
 (
   ( tonumber(fibaro:getValue(246, "value")) < 20 )
   or
   ( fibaro:countScenes(20) > 0 )
 )
)
then
  if (fibaro:countScenes(20) > 0) then
    fibaro:debug("Kill Scene Lumière")
    fibaro:killScenes(20)
  end 
  fibaro:debug("Run Scene Lumière")
  fibaro:startScene(20);
  setTimeout(function()
	fibaro:startScene(19);
  end, 240000)
end

Lumière :

--[[
%% properties
%% weather
%% events
%% globals
--]]


fibaro:call(253, "turnOn");
setTimeout(function()
	fibaro:call(253, "turnOff");
end, 300000)

Lumière Stop :

--[[
%% properties
253 value
%% events
%% globals
--]]

if (tonumber(fibaro:getValue(253, "value")) < 1) then
if (fibaro:countScenes(20) > 0) then
    fibaro:debug("Kill Scene Lumière")
    fibaro:killScenes(20)
  end
end

 

j'en ai profité pour y inclure les 2 idées évoquées cet après-midi. merci de m'y avoir fait penser.

Modifié par Cmoi20
correction de bug

Partager ce message


Lien à poster
Partager sur d’autres sites

j'oubliais, ces idées et bout de codes sont probablement tirés de message d'une ou plusieurs personnes de ce forum. mais je ne sais plus ou j'ai trouvé ces informations exactement. ce forum étant très riche, tout ce que j'utilise vient d'ici.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Cmoi20

 

Je vois que ta scène lumière s'éteint seule après 5 minutes, pourquoi avoir une scène Lumière stop ?

A quoi te sert l'information Luminosité 2 de ton détecteur de mouvement ID 265 ?

 

Donc en résumé ce n'est pas 2 mais 3 scènes que tu as crées.

Très sympa mais un peu lourd à gérer non ?

je voyais bien une scène assez simple moi :(

 

En tout cas merci pour ce retour, je découvre de nouvelles fonctions et suis admiratif du travail produit. Félicitations

 

Si je n'ai pas de retour, j'essayerai les tiennes ;)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

la scène lumière stop permet de gérer le fait que l'on a éteint la lumière manuellement dans le cas d'une nouvelle action avant l'expiration des 5 minutes.

la luminosité 2 n'est pas utilisée actuellement. cette scène a évoluée dans le temps et j'ai constaté qu'il était préférable de se baser sur une seule luminosité. elle n'est plus la que pour le log.

 

avec les dernières évolutions, oui j'ai du mettre en place une 3eme scène. je ne penses pas que ce soit gênant.

Partager ce message


Lien à poster
Partager sur d’autres sites

oui, sauf la scène lumière qui est en run 1 instance.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Cmoi20

 

J'ai intégré tes scènes en supprimant le module de détection supplémentaire.

Cela fonctionne vraiment bien.

Super boulot.

Il va falloir que je continue a étudier le LUA  :20:

Partager ce message


Lien à poster
Partager sur d’autres sites

Content que cela te plaise.

suite a quelques mises a jour le système ne fonctionnait plus bien chez moi. j'ai donc mis a jour mon poste précédent avec quelques corrections de bug sur le fonctionnement.

j'ai ajouté une ligne dans l'entête et un bloc a la fin de la première scène pour rappeler la scène elle-même et éviter que la lumière ne s'éteigne quand le mouvement est toujours actif.

Partager ce message


Lien à poster
Partager sur d’autres sites

×