Aller au contenu

Messages recommandés

Posté(e)

Bon voilà, j’avance avec cette box... petit à petit...

 

Il y aurait des chose à redire... mais on va être patient et faire avec...

 

la j’ai eu un cas étrange :

 

J’ai une scène qui tourne (devrai tourner) H24 7/7 grâce à une boucle d’un setTimeout.

Et visiblement elle s’est arrêtée pour une raison inconnue et rien dans le debug.

Il ‘n’y avait aucune raison (par code) que celle-ci s’arrête ! ! ! !

 

d’où ma question : est - il possible qu’ils aient limité, dans le temps, le fonctionnement des scènes ? 

Posté(e) (modifié)

désolé ne pas avoir répondu plus tôt... on est en mode guerre au boulo... 

 

alors il s’agit d’une scène pour le réveil :

elle allume une des lampes de chevet progressivement à une heure spécifique (15 minute avant l’heure réglée par QA)

 

il y a 3 boucles :

 

  1. la principale, avec le setTimeout qui boucle toutes les minutes afin de savoir quand déclencher (classique quoi)
  2. une petite première qui va allumer progressivement la lampe.
  3. une seconde qui va tourner pendant une heure avec la lampe allumée, puis l’éteindre (pour éviter que ça reste allumé si je plane)

 

pour les 2 dernières, il est possible d’en sortir en allumant la lumière au max (99 %).

Cela peut se faire avec un double clique sur l’interrupteur.

 

 

-----------------------------------------------------------------------------------------
-- 15/03/2020 - V1 : Réveil Droite (Rt)
-----------------------------------------------------------------------------------------

local i,j
local LumiereG = 118
local LumiereD = 121

print("Réveil Rt - start")

-------------------------------------------------------------------------------------
function Reveil()

    local HeureReveilG = fibaro.getGlobalVariable("WakeUpLt") --type string
    local HeureReveilD = fibaro.getGlobalVariable("WakeUpRt") --type string
  
    print("Reveil Rt - réveil à "..HeureReveilD)

    --si l'heure correspond avec 15 minutes d'avance
    if os.date("%H:%M", os.time()+15*60) == HeureReveilD then
        
    	print(os.date("%d/%m/%Y - %H:%M").." - début du réveil")
    	
    	--boucle de 1 à 98 = setValue du module, sort si ampoule au max (99)
        i=1
    	while tonumber(fibaro.getValue(LumiereD, "value")) < 98 do
            --envoie la valeur au module
            fibaro.call(LumiereD, "setValue", i)
            --incrémente la valeur
            i=i+1
            --attend 9 seconde (qui me fera au total 9*98 soit environ 15 min)
            fibaro.sleep(9*1000)
        end
		
    	--au cas où je suis sorti de la boucle avant la fin, fixe à 98 %
        print(os.date("%d/%m/%Y - %H:%M").." - Allumé au max")
        fibaro.call(LumiereD, "setValue", 98) -- allume à fond
    	
    	-- allume l'autre si même heure
    	if HeureReveilG == HeureReveilD then fibaro.call(LumiereG, "setValue", 98) end

    	--boucle d'attente tant qu'on a pas attendu 1 heure après le reveil, ou que la lumière n'a pas été allumé au max
    	while os.date("%H:%M", os.time()-(60*60)) < HeureReveilD and tonumber(fibaro.getValue(LumiereD, "value")) <= 98 do
            fibaro.sleep(5000)
        end
    
    	--eteint si 1 heure après Réveil ou arrêt manuel
    	print(os.date("%d/%m/%Y - %H:%M").." - Interruption car lumière éteinte ou > 1 heure après réveil")
    	fibaro.call({LumiereD,LumiereG}, "turnOff")
    end
    fibaro.setTimeout(60*1000, Reveil)
end

--------------------------------------------------------------------------------------------------------------------
Reveil()

 

et franchement, je vois pas ce que j’ai merdé dedant.

en temps normal, toutes les minutes, j’ai une trace dans le debug.

Ce matin, y avait rien.

Modifié par jjacques68
Posté(e)
il y a 29 minutes, jjacques68 a dit :

désolé ne pas avoir répondu plus tôt... on est en mode guerre au boulo... 

Je vois bien ce que tu veux dire :huh: pfffff

il y a 29 minutes, jjacques68 a dit :

la principale, avec le setTimeout qui boucle toutes les minutes afin de savoir quand déclencher (classique quoi)

Ok cette fameuse histoire de réveil ou il faudrait pouvoir utiliser une variable global dans les conditions c'st bien cela ?

 

Alors, ce que je pense:

- Il me semble très plausible (voir j'en suis convaincu) que le garbagecollector recycle le pool dans lequel est ta scène et donc le timer est tué. C'est même une pas trop mauvaise pratique évitant ainsi à Fibaro de faire trop de support ....

- La solution: remplace ton setTimeout qui boucle toutes les minutes par un cron et conserves le reste

Posté(e)

L’idée, tu fais une scène avec un interval d’une minute ;) tout le reste est fait dans ta scène

×
×
  • Créer...