Aller au contenu

Trigger Dans Main Loop D'un Module Virtuel


Messages recommandés

Posté(e)

Salut,

 

J'ai un problème avec la gestion du trigger dans le main loop d'un module virtuel.

 

Je souhaiterais mettre à  jour la valeur de mon label seulement quand je clique sur l'un des boutons de mon module virtuel ou quand la valeur de ma variable globale change.

 

Pour la mide à  jour lors du changement de la valeur de la variable je pensais mettre ça :

--[[
%% properties
73 value
%% globals
TempJour
TempNuit
--]]

local Declencheur = fibaro:getSourceTrigger()

if Declencheur['type'] == 'global' then
  -- Check des valeurs des températures
	fibaro:call(73, "setProperty", "ui.Label40.value", fibaro:getGlobalValue('TempJour').."°C");
	fibaro:call(73, "setProperty", "ui.Label109.value", fibaro:getGlobalValue('TempNuit').."°C");
end

Mais ça me retourne une erreur :

[ERROR] 10:17:52: line 11: attempt to call method 'getSourceTrigger' (a nil value)

 

 

J'en arrive à  me demander si on peut gérer les triggers depuis un module virtuel ?!  :15:

 

Posté(e)

Moi j'en arrive à  me demander comment tu as pu croire que les main loop utilisaient les triggers  :13:

 

Le main loop, c'est pas le truc qui tourne en boucle et qui n'a justement pas besoin d'être "trigger" ... puisque de tout façon il tourne  ;)

 

Moi je dis qu'un peu de repos, parfois, cela fait du bien.

Posté(e)

Ok Steven... C'est de bonne guerre  :lol:  Shame on me ...

 

Cela dit ça aurait été pas mal de limiter le déclenchement du main loop à  certains événements pour soulager la HC2 -> Le top aura été un déclencheur du style "clique sur un bouton" un getSourceTriggerButtonClick  B) 

 

J'ai toujours mauvaise conscience à  charger le main loop du coup.

 

Bon sujet classé.

Posté(e)

La dessus, je te rejoint volontiers  :77:

 

Néanmoins, pourquoi tu n'utilises pas une scène pour faire cela ?

 

Il semblerait que quand tu cliques sur ton bouton, cela va modifier la valeur de ta variable global, ceci te permet de trigger ta scène, qui va mettre la bonne valeur dans ton le label de ton module virtuel. Ainsi tu n'utilise pas de main loop ... mais c'est vrai tu dois créer une scène  :unsure: et je pense que c'est exactement ce que tu ne voulais pas faire.

Posté(e)

Tu penses bien.  ;)

 

J'ai crée une scène où j'ai "trigger" sur le changement de la valeur de ma variable. Mais ça ne me convient pas.

J'aurais voulu "trigger" sur un clique ou sur l'ouverture du module ... Mais je pense que c'est pas possible.

 

Pendant que je te tiens ... :wub:  Est-ce qu'on peut changer la valeur d'un bouton ?

Je voudrais que mon bouton s'intutile 'Chauffer à  '..TempJour..'°C'

Posté(e)

J'ai toujours mauvaise conscience à  charger le main loop du coup.

 

Ne te prends pas la tête, j'ai une dizaine de périphériques virtuels avec entre 2000 et 3000 lignes de code LUA et jamais un plantage de mon HC2 qui tourne comme une horloge !

 

Pour changer le Label d'un bouton tu peux faire ça :

local deviceToEdit = fibaro:getSelfId();
local ID = "btnOnOffAllScenes";

 
HC2 = Net.FHttp("192.168.1.100", 80);
HC2:setBasicAuthentication("admin", "admin");
--get the device to change
response ,status, errorCode = HC2:GET("/api/virtualDevices?id="..deviceToEdit)
 
if (tonumber(status) == 200) then   
  jsonTable = json.decode(response);
  for key,value in pairs(jsonTable.properties.rows) do    
    name = jsonTable.properties.rows[key].elements[1].name;
    --fibaro:debug(name);
    if(name==ID) then
      n = key;
      match = true;      
      caption = jsonTable.properties.rows[n].elements[1].caption;
      fibaro:debug(caption);
      break;
    end
  end
  --
  if (match) then
    fibaro:debug(name .." found, caption is [".. caption .."]");
    jsonTable.properties.rows[n].elements[1].caption = "Unblock scenes execution"  
    -- send back
    json = json.encode(jsonTable);
    response2 ,status2, errorCode2 = HC2:PUT("/api/virtualDevices?id="..deviceToEdit, json);
    if (tonumber(errorCode2)==0) then
      fibaro:debug("Edit complete text set "..status2)
    else
      fibaro:debug("Error update "..errorCode2)
    end 
    
  else
    fibaro:debug(ID .. " not found!")
  end
else
  fibaro:debug("error");
end

bon c'est à  nettoyer et optimiser ;)

 

La limite: la mise à  jour est effective qu’après rechargement de la page.

Posté(e)

Merci Krik.

Tu me rassures sur le main loop (je vais me lâcher allègrement !!!)  ;) 

 

Quant à  la limite dont tu parles pour le bouton. Ca va pas aller sur les iPhones ou iPads alors ?!

Posté(e)

Ne te prends pas la tête, j'ai une dizaine de périphériques virtuels avec entre 2000 et 3000 lignes de code LUA et jamais un plantage de mon HC2 qui tourne comme une horloge !

 

 

Oui, oui, mais nous on a qu'une HC2 ... on en a pas une par module virtuel :-)

Posté(e)

... en même temps c'est galère une box par module :rolleyes: , Mdr ! Après tout va dépendre du code  :15:

 

Sans rire, si le HC2 était pas capable d'encaisser un petit script de 300 ou 400 Kb en mémoire il ne serait pas à  la maison ;).

 

@JossAlf, c'est ok pour les app :)

  • Upvote 1
Posté(e)

@Krikroff : Le changement de label fonctionne parfaitement. Mais comme tu dis il faut recharger la page pour voir la modification du Label.

Ce n'est donc pas exploitable pour ce que je veux en faire. Mais je garde ça sous le coude pour autre chose :)

×
×
  • Créer...