Aller au contenu

Messages recommandés

Posté(e)

Bonjour à  tous,

 

Mon talent de programmeur en Lua n'étant plus à  refaire, je n'arrive évidemment pas à  mes fins. Je pense ne pas avoir de problème de matériel (mon oeil de sauron fonctionne semble t il).

Je vous expose mon objectif dans cette Sdb :

Déclencher un Wall plug (bandeau led IKEA), entre 21h et 7h30 (ou alors intensité inf à  45 lux), pendant une durée de 90 sec. Si cela redéclenche, la scène doit repartir au début (ou alors de nouveau 90 sec).

pour l'instant ca clignote, et c'est tout  :angry:

Posté(e)

Voici une idée de scène 


--[[
%% properties
100 value
%% globals
--]]


local wallplug = 50
local mss = 100
local mss_lux = 102

local nom_variable_global = "ETEINDRE"

-- si la luminosité est suffisante, on ne fait rien
if (tonumber(fibaro:getValue(mss_lux, "value")) > 45)  then fibaro:abort() end 

-- pour chaque déclenchement on met à  jour l'heure de l'extinction dans une variable globale
-- soit ( maintenant + 90 secondes )
if (tonumber(fibaro:getValue(mss, "value")) > 0) then
	fibaro:setGlobal(nom_variable_global, os.time()+90)
end

-- si cette scène tourne déjà  on stoppe
if (fibaro:countScenes() > 1) then 
	fibaro:abort() 
end 

-- On allume le bandeau
fibaro:call(wallplug, "turnOn")

-- On attends d'avoir atteint l'heure d'exctinction.
while (tonumber(fibaro:getGlobalValue(nom_variable_global)) < os.time()) do
	fibaro:sleep(1000);
end

-- On éteint le bandeau
fibaro:call(wallplug, "turnOff")
Posté(e)

Super !!! Merci pour ton retour.

Il m'embête encore un peu :

(Error) 20:18:34: Line 33 : Attempt to compare nil with number  :( 

Cela correspond à  la ligne while (tonumber(fibaro:getGlobalValue(nom_variable_global)) < os.time()) do, puisque j'ai rajouté 1 debug apres le "turn on" et "turn off".

 

Une idée ... ? merci pour ton aide

Posté(e)

Bonjour Steven, de retour d'un p'tit WE, j'ai fait plusieurs tentatives mais je n'arrive pas à  un résultat normal. Il déclenche en micro coupure.

Il n'y aurait pas des réglages à  faire dans les paramètres du détecteur ?

PS : J'ai crée une variable Timerdate, j'ai laissé les "" dans ton script (en lieu et place de ETEINDRE).

 

Merci encore pour ton aide.

Posté(e)

Bonjour Steven, c'est super cool de ta part

--[[
%% properties
91 value
93 value
%% globals
--]]
 
 
local wallplug = 112
local mss = 91
local mss_lux = 93
 
local nom_variable_global = "Timerdate"
 
-- si la luminosité est suffisante, on ne fait rien
if (tonumber(fibaro:getValue(mss_lux, "value")) > 55)  then fibaro:abort() end 
 
-- pour chaque déclenchement on met à  jour l'heure de l'extinction dans une variable globale
-- soit ( maintenant + 90 secondes )
if (tonumber(fibaro:getValue(mss, "value")) > 0) then
	fibaro:setGlobal(nom_variable_global, os.time()+90)
end
 
-- si cette scène tourne déjà  on stoppe
if (fibaro:countScenes() > 1) then 
	fibaro:abort() 
end 
 
-- On allume le bandeau
fibaro:call(wallplug, "turnOn")
fibaro:debug("Allumage led")
 
-- On attends d'avoir atteint l'heure d'exctinction.
while (tonumber(fibaro:getGlobalValue(nom_variable_global)) < os.time()) do
	fibaro:sleep(1000);
end
 
-- On éteint le bandeau
fibaro:call(wallplug, "turnOff")
fibaro:debug("Extinction led")

Sinon, a défaut d'intensité en lux, la condition entre 20h et 8h du mat.

 

Encore merci.

Posté(e)

Ok, j'ai installé ton code à  la maison, j'ai modifié les ID par contre, il va falloir attendre ce soir que je puisse être sur place pour tester.

 

Juste un petit commentaire, ta ligne numéro 5 : "93 value" est à  supprimer. Si tu la laisse cette scène va s’exécuter chaque fois qu'il y aura un changement de luminosité ce qui va poser problème. Ce que tu veux est que cette scène ne se lance que lorsque qu'il y a détection de mouvement, rien de plus.

 

je te tiens au courant ce soir.

Posté(e)

Voilà... testé et approuvé :)

--[[
%% properties
91 value
%% globals
--]]

local wallplug = 112
local mss = 91
local mss_lux = 93
 
local nom_variable_global = "Timerdate"

--local heure = string.format(os.date("%H"), "%2d")..string.format(os.date("%M"), "%2d")
--local heureValable = heure >= "2100" or heure < "0730"

local faibleLumiere = (tonumber(fibaro:getValue(mss_lux, "value")) < 55)
local enAlerte = (tonumber(fibaro:getValue(mss, "value")) > 0) 

-- A chaque fois que le détecteur sera en alerte et que la luminosité
-- sera faible, on va modifier la variable globale
if enAlerte and faibleLumiere then
  	local extinction = os.time() + 90
	fibaro:setGlobal(nom_variable_global, extinction)
  	fibaro:debug("Extinction prévu à" ..os.date("%X", extinction))
else
    fibaro:abort() 
end 

-- Si plus d'une scène tourne en même temps, on arrête celle-ci
if (fibaro:countScenes() > 1) then
  fibaro:abort()
end

-- On allume le bandeau
fibaro:call(wallplug, "turnOn")
fibaro:debug("Allumage à" .. os.date("%X"))
 
-- On attends d'avoir atteint l'heure d'exctinction.
while (os.time() < tonumber(fibaro:getGlobalValue(nom_variable_global))) do
	fibaro:sleep(1000);
end
 
-- On éteint le bandeau
fibaro:call(wallplug, "turnOff")
fibaro:debug("Extinction à" .. os.date("%X"))
Posté(e)

Oh P ... !!, t'es mon idole !

Je crois que ca marche impec, j'ai essayé de changer les lux et la plage horaire, ca semble bon (tu t'en doutais, hein !!!).

Dans les trucs que je n'ai pas compris, j'ai compris que les lignes 14 et 15 étaient en gris : Je croyais que ce n'était que des explications, commentaires, et non pas des lignes de programmation. Hors là , c'est la plage horaire ... tu pourrais m'expliquer ?

 

Je te tiens au courant ce soir, je remets les paramètres initiaux.

Encore merci.

 

PS : Je vais essayer de faire de même avec une ouverture de porte et un wall plug, si tu veux bien, tu pourrais me corriger ? 

Posté(e)

On avais le choix entre luminosité ou plage horaire, je me suis dis que la luminosité était plus appropriée mais j'ai quand même fait le code pour la plage horaire.

 

Si tu veux l'utiliser, il faut décommenter les lignes 14 et 15, puis à  la place de 

if enAlerte and faibleLumiere then

mettre 

if enAlerte and heureValable then

Voilà .

 

Pour ton prochain script, aucun soucis.

Posté(e)

C'est magnifique, P ... comme c'est beau  :icon1010:

J'y retourne je m'amuse comme un fou, je vais m'essayer, grace à  tes rails, d'en faire de même.

Posté(e)

Bon train :)

Casse pas tout, je ne serais plus disponible pendant 2 semaines et je sais même pas si j'aurais du réseau.

Posté(e)

Hello Steven, Arrives-tu à  me faire un screenshot de la variable que tu as créé dans ton panneau de variable (j'avoue que je suis pas encore très à  l'aise avec les variables...)

 

Merci d'avance pour ton aide

Posté(e)

Salut Bouliboune,

Tu vas dans panneaux, puis panneau variables, la tu as 1premier tableau avec en bas un bouton ajouter. Tu click, et tu renseigne , nom de la variable par Timerdate (ou autre chose plus parlante pour to, le truc c'est de bien respecter les changements et majuscule), puis le bouton sauver.

Posté(e)

En revanche, je n'arrive pas a faire en sorte qu'il rajoute 90 sec àchaque déclenchement, c.-à-d. Tant que je suis dans la piece.

Tu me diras comment ça se passe pour toi

Posté(e)

Pour moi ça marche super bien. En gros a chaque fois que je bouge sous le détecteur, la scène recommence àzéro et repart pour 90 sec. La lumière reste donc toujours allumé en ma présence et s éteindre 90 secondes après mon dernier mouvement/passage.

×
×
  • Créer...