Aller au contenu

Code Lua, Simple Mais Qui Ne Fonctionne Pas


Franco268

Recommended Posts

Hello,

 

Je voudrai partager mon code car il ne fonctionne pas. Pouvez vous m'aider?

Le but est defermer mes volets lorsque la température commence à  monter.

Le programme fonctionne en manuel mais pas en automatique. C'est comme si la scène n'est jamais déclenché, malgres les variations de 164 et 4.

--[[
%% properties
194 value		--Température Chambre parentale
3 Temperature	--Température exterrieur Internet
%% events
%% globals
--]]

if(fibaro:countScenes() >1) then
    fibaro:abort()
  fibaro:debug('Abort')
end

fibaro:debug("Température exterrieur Internet : " ..fibaro:getValue(3, "Temperature"));
fibaro:debug("Température exterrieur Internet : " ..fibaro:getValue(194, "value"));

local startSource = fibaro:getSourceTrigger();

if (startSource["type"] == "other") then fibaro:debug("Commande manuelle") end
if (
	(tonumber(fibaro:getValue(3, "Temperature")) >= tonumber(23.5)  and  
     tonumber(fibaro:getValue(194, "value")) >= 23 and
   	 fibaro:getGlobalValue("Etat_Volets") ~= "Fraîcheur")
	or
	startSource["type"] == "other"
    )
then
	fibaro:setGlobal("Etat_Volets", "Fraîcheur");
  	fibaro:startScene(263); -- Démarrage de la scène Ferm.fraî. volets
	fibaro:call(8, "sendDefinedEmailNotification", "373");
	fibaro:call(133, "sendDefinedPushNotification", "373");
	fibaro:call(375, "sendDefinedPushNotification", "373");
	fibaro:call(229, "sendDefinedEmailNotification", "373");
	fibaro:call(230, "sendDefinedPushNotification", "373");
	fibaro:call(251, "sendDefinedPushNotification", "373");
  	fibaro:debug("Fermeture demandée")
	
end




Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne savais pas que Temperature pouvait être un trigger. J'aurais laissé value. Evite peut être aussi les commentaires dans l'entete, Il me semble que par moment ça peut mettre le bronx.

 

ton fibaro:debug('Abort') à  mettre avant le fibaro:abort() (ton problème ne vient pas de là .

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne savais pas que Temperature pouvait être un trigger. J'aurais laissé value. Evite peut être aussi les commentaires dans l'entete, Il me semble que par moment ça peut mettre le bronx.

 

ton fibaro:debug('Abort') à  mettre avant le fibaro:abort() (ton problème ne vient pas de là .

 

ok, j'ai corrigé le Abort

Lien vers le commentaire
Partager sur d’autres sites

Je viens de me rendre compte d'une autre bizarrerie.

Le code ci dessous me permet de ré-ouvrir les volet s'il est 18h30 ou si la température est acceptable.

Ce que j'ai remarqué, c'est que lorsque je pilote manuellement le code pour fermer les volet alors qu'il ne fait pas chaud, la scène ci dessous réouvre tout de suite les volets. Ce qui montre que les déclencheurs fonctionnent. Pourtant, ce sont les mêmes qu'utilisé dans le code de fermeture.

--[[
%% autostart
%% properties
194 value		--Température Chambre parentale
3 Temperature	--Température exterrieur Internet
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "18:30")
	or
	(tonumber(fibaro:getValue(3, "Temperature")) < tonumber(23.5)
		or
     tonumber(fibaro:getValue(194, "value")) <= 23)
	 and
    fibaro:getGlobalValue("Etat_Volets") == "Fraîcheur")
	)
	then
    fibaro:debug("Température 1 exterrieur Internet : " ..fibaro:getValue(3, "Temperature"));
	fibaro:debug("Température 1 Chambre parentale : " ..fibaro:getValue(194, "value"));

		fibaro:setGlobal("Etat_Volets", "Ouverts");
    	fibaro:startScene(261);
    	fibaro:call(8, "sendDefinedEmailNotification", "374");
		fibaro:call(133, "sendDefinedPushNotification", "374");
		fibaro:call(375, "sendDefinedPushNotification", "374");
		fibaro:call(229, "sendDefinedEmailNotification", "374");
		fibaro:call(230, "sendDefinedPushNotification", "374");
		fibaro:call(251, "sendDefinedPushNotification", "374");
		
	end

setTimeout(tempFunc, 60*1000)
end

if (sourceTrigger["type"] == "autostart") then
tempFunc()
else
	local currentDate = os.date("*t");
	local startSource = fibaro:getSourceTrigger();
	if (
		(tonumber(fibaro:getValue(3, "Temperature")) < tonumber(23.5)
			or
		tonumber(fibaro:getValue(194, "value")) <= 23)
		and
        fibaro:getGlobalValue("Etat_Volets") == "Fraîcheur" 
		or
		startSource["type"] == "other"
		)
	then
    
    fibaro:debug("Température 2 exterrieur Internet : " ..fibaro:getValue(3, "Temperature"));
	fibaro:debug("Température 2 Chambre parentale : " ..fibaro:getValue(194, "value"));

		fibaro:setGlobal("Etat_Volets", "Ouverts");
		fibaro:startScene(261);
        fibaro:call(8, "sendDefinedEmailNotification", "374");
		fibaro:call(133, "sendDefinedPushNotification", "374");
		fibaro:call(375, "sendDefinedPushNotification", "374");
		fibaro:call(229, "sendDefinedEmailNotification", "374");
		fibaro:call(230, "sendDefinedPushNotification", "374");
		fibaro:call(251, "sendDefinedPushNotification", "374");
	end

end
Lien vers le commentaire
Partager sur d’autres sites

 

ligne 22

au lieu de`

(tonumber(fibaro:getValue(3, "Temperature")) >= tonumber(23.5)  and  

met

(tonumber(fibaro:getValue(3, "value")) >= 23.5  and  

 

 

 

Je viens de tester, cela ne fonctionne pas:

 

[DEBUG] 22:41:55: Température extérieur Internet : 18

[DEBUG] 22:41:55: Température chambre parental : 23.7

[DEBUG] 22:41:55: Commande manuelle

[DEBUG] 22:41:55: line 25: attempt to compare number with nil

Lien vers le commentaire
Partager sur d’autres sites

Je viens de comprendre pourquoi le programme d'ouverture fonctionne.

Il n'utilise pas les déclencheurs, m^me s'ils sont déclaré.

Il utilise la fonction cyclique pour détecter le besoin d'ouvrir ou fermer.

 

Je viens aussi de m’apercevoir d'une autre chose, mais je ne pense pas qu'il y est un lien. Cependant cela met en évidence un gros délais dans le programme.

La température est issue d'un capteur à  pile. Il n'est interrogé que toutes les 3840 secondes.

 

Mais je ne comprends tjrs pas pourquoi la scène ne se déclenche pas.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne savais pas que Temperature pouvait être un trigger. J'aurais laissé value. Evite peut être aussi les commentaires dans l'entete, Il me semble que par moment ça peut mettre le bronx.

 

ton fibaro:debug('Abort') à  mettre avant le fibaro:abort() (ton problème ne vient pas de là .

 

Bonjour,

 

je pense que cela vient de ton entête, enlève tes commentaires. L'entête doit être propre ;-)

 

A tester, surtout si elle fonctionne manuellement ;-)

 

 

A priori, cela fonctionne depuis que j'ai supprimé les commentaires de l'entête.

 

Merci à  vous 2 est à  tous les autres.

@+

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...