Aller au contenu

Messages recommandés

Posté(e)

Je ne vois pas de problème de syntaxe, ni de compatibilité V3 / V4

Par contre, ton imbrication commence à  devenir bigrement complexe : une scène qui fait appel à  un bouton (1) du module virtuel 361, qui lui-même fait appel à  des boutons (3 ou 4) de modules virtuels (23 ou 289) selon un variable globale (mise à  jour quand ?), qui font je ne sais quoi ensuite...? 

Je m'interroge sur les conséquences de ton choix pour que cela marche lors du démarrage de ta box ?

Posté(e)
--[[
%% properties
%% globals
--]]

Essai cela dans l’entête ça devrai être bon

 

@ steven tu ne dors jamais lol, je croyais que c'etait obligatoire cette entête ?

@ Jojo utilise le fibaro:debug dans le bouton pour voir si ton code est exécuté.

 

Lorsque je teste du code je mets toujours des lignes de debug une fois que ca fonctionne je laisse les plus importantes comme l'affichage des variables cela me permet de voir le bon fonctionnement de mes scripts

Posté(e)

merci à  tous les 3 pour vos idées.

 

@Steven, avec ou sans " pour le bouton 1, ça ne fonctionne pas  :angry:

@i-magin : ça a l'air compliqué comme ça, mais les codes sont simples, et le but est de faire le moins de maintenance possible si on veut changer d'icône, rajouter une variable, ... je vais expliquer en détail la solution quand elle sera au point

@mprinfo : j'ai un fibaro:debug dans la scène, et je croyais qu'elle démarrait, car il y avait une ligne dans le débug, mais en fait c'était son démarrage automatique lorsqu'on sauve la scène. Lorsque la box redémarre, la scène ne démarre pas.

 

=> est-ce que le --[[%% autostart --]] est également activé lors d'un RESTART de la box ? Il semblerait que non, mais qu'il serait bien activé uniquement lors d'une sauvegarde de la scène

Posté(e)

[[%% autostart --]] est bien déclenché lors de restart de la box ... sinon GEA ne fonctionnerait pas souvent :)

Posté(e)

logique ...

Si je mets [[%% autostart --]] dans ma scène, j'ai une erreur. 

C'est plutôt --[[%% autostart --]]. 

Mais soit, c'est ce que j'ai mis dedans.

Et pour être sà»r qu'il n'y avait pas un caractère bizarre, j'ai fait un copier/coller de ton entête du GEA.

Et ça ne fonctionne toujours pas...

Ou je dois être plus patient attendre 10 min ?

Posté(e)

L entete que je t ai donné foonctionne. Ce soir je vais faire un test avec un VD et une scène je te tiens au courant

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

@jojo

Du coup, je ne sais pas si ta scène démarre bien au démarrage de la box ou non ?

 

Comme le suggère @mprinfo, intègre des lignes "debug" :

- Une avant ton "call" , par exemple : "fibaro:debug("Redémarrage box : "..os.date())

- Et une autre après ton call

 

Ceci devrait nous fixer sur le démarrage ou non de la scène et son exécution jusqu'à  la fin

Encore une suggestion peut-être idiote, mais je la propose tout de même : après le "call" et avant la dernière ligne "debug" insère : fibaro:sleep(10*1000);

 

J'avais été obligé d'insérer un temps d'attente dans une scène entre un "startScene" et un "call" de module virtuel, sinon la scène secondaire ne se lançait pas

 

Je me sauve, car je dois partir en WE  :)

  • Upvote 1
Posté(e)

oui merci, j'avais déjàmis un fibaro:debug suite àla suggestion de mprinfo, mais je vais encore en rajouter d'autres, comme tu proposes ainsi que des sleeps

Bon WE

Posté(e)

voici donc le code de ma scène

--[[
%% autostart
%% properties
%% globals
--]]

fibaro:debug("Redémarrage box : "..os.date())
fibaro:call(361, "pressButton", "1")
fibaro:sleep (10*1000)
fibaro:debug("Fin exécution scène : "..os.date())

lorsque je la sauve, elle s'éxécute, et voici le debug

[DEBUG] 14:39:29: Redémarrage box : Fri Mar 20 14:39:29 2015
[DEBUG] 14:39:39: Fin exécution scène : Fri Mar 20 14:39:39 2015

puis, je fais un restart de la box, et ...

mes icônes ne sont pas mises à  jour  :(

et le log de la scène montre qu'elle s'est exécutée sans soucis.

[DEBUG] 14:44:20: Redémarrage box : Fri Mar 20 14:44:20 2015
[DEBUG] 14:44:30: Fin exécution scène : Fri Mar 20 14:44:30 2015

Les mystères de l'informatique  ^_^  ^_^

 

Mais je confirme que si je démarre la SCENE manuellement, elle s'éxécute correctement (comme quand je la sauve)

Posté(e)

et avec le json de VD, qui "prouve" qu'il ne s'agit pas de problème de cache, vu que la currentIcon = 1

{
id: 289,
name: "Var_Auth_TV",
roomID: 15,
type: "virtual_device",
properties: {
deviceIcon: 1,
ip: "",
port: 0,
currentIcon: "1",
mainLoop: "",
saveLogs: "1",
ui.Statut.value: "Interdit",
Posté(e)

Je te propose d'essayer de mettre le sleep en première ligne afin de laisser le temps àla box de tout charger avant d'exécuter ton code.

  • Upvote 1
Posté(e)

j'ai mis un sleep de 1 minutes, et cela semble ok  :60:  :60:  :60:

Je fais encore d'autres tests pour confirmer

Posté(e)

et avec un sleep de 10s c'est bon également.

Je peux me perettre d'attendre 10s pour avoir les bonnes icônes après un restart  :D

 

MERCI  :13:

 

P.S. je mets à  jour le code dans le "tuto"

Posté(e)

si tu veux savoir comment la scène a été déclenché.

--[[
%% autostart
%% properties
%% globals
--]]
local OrigineDeclenchement = fibaro:getSourceTrigger();
if (OrigineDeclenchement["type"] == "autostart") then
  fibaro:debug("Declenchement par AUTOSTART")
elseif OrigineDeclenchement["type"] == "other"
  fibaro:debug("La scène a été lancée manuellement")
end

  • Upvote 1
Posté(e)

merci.

1/  ton lien ne fonctionne pas, il pointe vers mon tuto  :)

2/ je te confirme qu'elles ne sont pas obligatoires, elles sont nécessaires pour définir les déclencheurs, maintenant j'en connais 3 sortes

--[[
%% autostart          => au démarrage de la box ou à  la sauvegarde de la scène
%% properties         => en fct de la valeur d'un device
%% globals            => en fct de la valeur de variable globales
--]]
Posté(e)

Non, l'entête n'est pas obligatoire, il l'est uniquement si l'on souhaite utilisé les déclencheurs automatiques tel que 

 

%% autostart      -- démarrage automatique au redémarrage

%% properties    -- sur changement d'une propriété d'un module

%% globals        -- sur changement d'une variable globale

 

Exemple :

--[[

%% properties

63 power

37 value

--]]

Dès que la consommation de mon module ID 63 change OU que la valeur de mon module ID 37 change, la scène sera executée.

 

--[[

%% globals

Chauffage

--]]

Dès que la variable global "Chauffage" changera de valeur (attention, changer sa valeur depuis le panneau des variables ne fonctionne pas)

 
 
Si plusieurs déclencheurs arrivent en même temps, il y a aura plusieurs scènes lancées en parallèle.
Beaucoup de personne n'aime pas cela est commence le code de leur scène par 
if (fibaro:countScenes() > 1) then
  fibaro:abort()
end

Pour s'assurer de n'avoir qu'une instance de scène en même temps.

 

Après, comme tu l'as déjà  dis, il est possible de savoir "qui" a déclenché la scène :

local trigger = fibaro:getSourceTrigger()
 
if (trigger['type'] == 'property') then
  -- Déclenché par le changement de valeur d'un module
  fibaro:debug('Source device = ' .. trigger['deviceID'])
elseif (trigger['type'] == 'global') then
  -- Déclenché par le changement d'une variable globale
  fibaro:debug('Global variable source = ' .. trigger['name'])
elseif (trigger['type'] == 'autostart') then
  -- Déclencher au démarrage de la box
  fibaro:debug('Autostart')
elseif (trigger['type'] == 'other') then
  -- Déclencher manuellement ou par une autre scène ou un appel API.
  fibaro:debug('Other source.')
end

Voili, voilà .

  • Upvote 2
Posté(e)

Merci Steven je début en LUA et je croyais qu'il les faillait même si on ne les utilisait pas.

j'utilise très souvent fibaro:countScenes() dans mes scénes

Merci pour ces explications très claires

par contre j'utilise dans le main loop ce code tu fais un peu différemment peu tu me dire si c'est correct a la long ?

pour une mise a jour toutes les heures j'utilise cela

while true do
   local Var_Heure = os.date("%M")
   fibaro:debug("heure OS : " ..Var_Heure)
   if Var_Heure == "01" then
      fibaro:call(fibaro:getSelfId(), "pressButton", "1")
   end
   fibaro:sleep(60*1000)
end

ca fonctionne mais j'ai l'impression qu'au bout d'un certain temp ca plante

Posté(e)

@steven je peux te prendre ton explication sur les déclenchement pour faire un Tuto c'est plus simple a trouver pour un débutant

je dirai bien sur que cela vient de toi ,

Posté(e)

Perso, j'uilise cela mais ton code doit fonctionner.

local nbHeure = 1

local i = 0
while true do
	if (i >= (nbHeure*2) or i == 0) then
   	   i = 0
	   fibaro:call(fibaro:getSelfId(), "pressButton", "1")
	end
	fibaro:sleep(30*60*1000)
  	i = i + 1
end

Le main loop plante s'il dort "sleep" plus de 40mn, donc je le relance toutes les 30mn et comme 2x30mn = 1 heure, je le lance que 2 fois. Par contre, contrairement àtoi, je ne choisi par la minute.

  • Upvote 1
×
×
  • Créer...