Aller au contenu
lexus_69

Début en LUA...

Recommended Posts

Bonjour à tous,

 

Je commence tout doucement a programmer en LUA et je suis perdu...:15:

Je vous explique:

Je veux allumer une lampe uniquement la nuit quand je passe devant mon détecteur de présence. Tout bête mais je galère. Voici ce que je mets dans ma scène:

 

--[[
%% properties
74 value
%% globals
–-]]

local MaVariable
local Jour_Nuit

MaVariable = fibaro:getValue(74, 'value')
if (MaVariable == '1') then
  if (Jour_Nuit == 'Nuit') then
 fibaro:call(65, 'turnOn')
else
  fibaro:sleep(60000)
  fibaro:call(65, 'turnOff')
end
  end

 

Comme vous l'aurez compris ça ne marche pas. Je suis preneur de vos lumières :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci, c'est exactement ce que je voulais faire !

Tout fonctionne correctement :60:

On était bien loin du résultat avec mon bout de code bidon :)

Par contre une question: régulièrement le HC2 me dit qu'il y a trop de scènes dans les notifications. Est ce normal, et est ce un problème ?

En tout cas merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, c'est normal. A chaque fois que tu passes devant le détecteur ça lance une nouvelle instance de la scène.

Ces scènes meurent au bout du temps défini dans le settimeout.

Tu dois augmenter le "max running instances" dans la partie "Général" de la scène.

J'ai mis 8 et n'ai jamais ce message.

Partager ce message


Lien à poster
Partager sur d’autres sites

Une autre petite question, j'aimerais stopper 2 scènes à une heure précise mais je ne sais pas quelle fonction utiliser.

Des idées?

Partager ce message


Lien à poster
Partager sur d’autres sites

fibaro:setSceneEnabled(sceneID, enabled)

 

Pour désactiver enabled = false

Pour activer enabled = true

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Revoilà le casse bonbon...<_<

 

J'ai récupérer ce script qui fonctionne très bien (Merci Yannick) mais j'aimerais légèrement le modifier mais je ne sais pas comment m'y prendre...

J'aimerais qu'entre 8h et jusqu'au couché du soleil et si la luminosité est <10 lux ma lumière s'allume. Il faut donc que je modifie cette ligne "if ((HeureActuelle['hour']>= 18 or HeureActuelle['hour'] <= 7)" avec cette commande : fibaro:getValue(1, "sunsetHour") mais comment l'intégrer ?

 

Le script en question:

--[[
%% properties
31 value
33 value
%% globals
--]]

local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(31, "value");
local HeureActuelle = os.date("*t");

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

fibaro:debug("Il est "..HeureActuelle['hour']..":"..HeureActuelle['min'])
fibaro:debug("le capteur est safe depuis : "..((os.time() - deviceLastModification0)/60).." min")
if ((HeureActuelle['hour']>= 18 or HeureActuelle['hour'] <= 7) 
and
 ( tonumber(fibaro:getValue(31, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(33, "value")) <= 10 )
)
then
	fibaro:call(29, "turnOn");
    fibaro:sleep(60*1000);
  end

if (( tonumber(fibaro:getValue(31, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60)
  then
	delayedCheck0 = true;
    end
if 
 ( delayedCheck0 == true )
    then
    fibaro:call(29, "turnOff")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me suis inspiré d'une scène en mode bloc puis convertie en LUA:

 

--[[
%% properties
74 value
76 value
%% globals
--]]

local delayedCheck0 = false;
local tempDeviceState0, deviceLastModification0 = fibaro:get(74, "value");
local HeureActuelle = os.date("*t");

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

fibaro:debug("Il est "..HeureActuelle['hour']..":"..HeureActuelle['min'])
fibaro:debug("le capteur est safe depuis : "..((os.time() - deviceLastModification0)/60).." min")
if ((HeureActuelle['hour']>= 8 and string.format("%02d", HeureActuelle.hour) .. ":" .. string.format("%02d", HeureActuelle.min) == fibaro:getValue(1, "sunriseHour")) 
and
 ( tonumber(fibaro:getValue(74, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(76, "value")) < 5 ) -- valeur en Lux
)
then
    fibaro:call(65, "turnOn");
    fibaro:sleep(60*1000);
  end

if (( tonumber(fibaro:getValue(74, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60)
  then
    delayedCheck0 = true;
    end
if 
 ( delayedCheck0 == true )
    then
    fibaro:call(65, "turnOff")
end

 

Mais ça ne fonctionne toujours pas :(

Une idée du pourquoi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Personne à une idée ?

Il y a peut être un autre moyen mais je manque de connaissances.

Merci d'avance ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

if ( (HeureActuelle['hour']>= 8)  and (string.format("%02d", HeureActuelle.hour) .. ":" .. string.format("%02d", HeureActuelle.min) <= fibaro:getValue(1, "sunriseHour") ) then

 

 

tu avais un == au lieu d'un <=

 

Après je sais pas si la suite fonctionne je n'ai rien testé.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah ben oui, je n'avais même pas fait attention!!!

J'ai résolu le problème avec une variable Jour_Nuit

Merci pour ta réponse en tout cas ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

×