Aller au contenu

Messages recommandés

Posté(e)

-------------------------------------

 AJOUT DE DEBUG DANS UN VD

-----------------------------------

 

Tout le monde qui à, au moins une fois, touché le LUA de sa HC2 à du tapper cette commande :

fibaro:debug("Mon texte ici")

Cela permet donc d'afficher un texte dans la petite fenêtre de debug.

 

Pour un VD (je n'ai pas encore trouvé pour une scène), il est possible d'envoyer un message, dans cette même fenêtre de debug, mais depuis n'importe où. En utilisant cette commande :

fibaro:call(74, "addDebugMessage", 0, "Je viens d'ailleurs - erreur", "error")
fibaro:call(74, "addDebugMessage", 2, "Je viens d'ailleurs - debug", "debug")

error : affichera en rouge

debug : affichera en blanc

 

Voici la syntaxe

fibaro:call(<ID_DU_VD>, "addDebugMessage", <ELEMENT_ID>, <MESSAGE>, "debug|error")

-- ELEMENT_ID = ID du bouton ou 0 pour le main loop

 

Cette info peux vous sembler inutile et pourtant, j'y vois 2 intérêts :

  • Savoir qui a cliqué un bouton (si le bouton a été "cliqué" par une scène, on peux l'afficher dans le debug "Bouton cliqué par la scène 22 à HH:mm:ss")
  • Via une scène paramétrée, afficher des debug de couleurs différent (exemple : fibaro:startScene(10, {{id=20, text="Mon texte ici", color="cyan"}})

 

Voilà, je vous laisse y méditer.

  • Upvote 7
Posté(e)

Excellent encore cela !! MERCI BEAUCOUP TOP

Belle trouvaille master, @Steven

 

Couplé à fibaro:args() on est bien ;-). On pourrait mettre plein de couleurs comme adore @mprinfo ;-)

 

Testé et approuvé ;-)Reste plus qu'à trouver le besoin ;-) ou le créer ;-)

Posté(e) (modifié)

Génial, c'est exactement ce que je voulais ajouter à la scène générique pour tous types de messages. Cf. le Tuto pour les passages d'args pour les scènes. 

Modifié par MAM78
Posté(e) (modifié)

@Steven ou @Lazer désolé de faire un petit hors sujet, mais pourriez-vous m'indiquer comment trouver l'id et le nom de la scène dans laquelle on est.

 

Pour un VD je vois bien la fonction figaro:getSelfId (seulement disponible pour les VD) mais pour une scène comment on fait ?

 

Vous pouvez me répondre MP, ensuite, je supprimerais ce message 

Modifié par MAM78
Posté(e)

En fait, j'avais déjà trouvé une utilité à l'écriture de message dans le debug d'un bouton ou d'une main loop de VD, c'était pour simuler le passage de paramètre d'un bouton à un autre, sans passer par une variable globale, un peu à la façon d'une pile.

 

L'avantage c'est que les messages de debug ne sont pas persistants, donc pas d'écriture dans la DB => plus rapide, pas d'usure de la Flash, pas de risque de corruption de la DB.

 

Mais l'inconvénient, c'est qu'on ne maitrise pas quand le système décide de purger tout seul le debug d'un bouton, donc le risque c'est de passer des "arguments" à un bouton, et qu'lis ne soient jamais reçu car le système a décidé de les purger pile à ce moment là. Donc pas fiable à 100%, donc je ne l'ai jamais mis en oeuvre :(

Posté(e) (modifié)
Le 3/3/2017 à 08:51, Steven a dit :

print(__fibaroSceneId)

 

Merci @Steven tu as la même pour le nom de la scène ?

 

sinon elles sont documentés ou ces propriétés. Je n'ai pas identifié un lieu qui référence toutes les documentations existantes. Est-ce qu'il y a un post qui nous donne tout ça ?

 

Si ça n'existe pas je veux bien m'en charger de le créer. Mais il faudra me donner les liens.

Modifié par MAM78
Posté(e)
Le 04/03/2017 à 12:03, MAM78 a dit :

Merci @Steven tu as la même pour le nom de la scène ?

 

sinon elles sont documentés ou ces propriétés. Je n'est pas identifié un lieu qui référence toutes les documentations existantes. Est-ce qu'il y a un post qui nous donne tout ça ?

 

Si ça n'existe pas je veux bien m'en charger de le créer. Mais il faudra me donner les liens.

local scene = api.get("/scenes/" .. __fibaroSceneId)
print( scene.name )

Ces propriétés ne sont malheureusement pas documentées, il faut décortiquer le code de Fibaro.

 

Dans ce cas de figure, j'ai trouvé l'info dans le fichier opt/fibaro/FibaroSceneAPI.lua

 

2849480603.png

  • Upvote 1
Posté(e)

Dans le même registre. Est-ce qu'il existe un identifiant unique désignant une instance de scène ?

 

J'aimerait pouvoir l'utiliser pour s'assurer de l'exécution dans l'ordre dans lesquels les instances sont lancées.

 

J'ai bien pensé utiliser la date et heure de lancement comme identifiant mais je ne sais pas jusqu'à quelle niveau de précision nous avons accès à cette heure d'exécution. (miliseconde ?)

Posté(e)

Je vois pas trop l'utilité que tu comptes en faire. Je ne connais pas l'existence d'un identifiant d'instance par contre, tu peux utiliser le fibaro:countScenes() pour avoir le nombre d'instance en cours. Ainsi, tu vas pouvoir les ordonner.

Posté(e)

En fait j'ai plusieurs instance d'une scène et je souhaite m'assurer celles-ci soit exécutées dans l'ordre des demandes d'exécutions. Voir dans mon TUTO sur l'envoi de passage dans la Syslog.

En particulier le point dans la partie évolutions à venir (en rouge).

 

J'ai constaté que cet ordre n'est pas forcément respecté.

 

J'ai bien utilisé la fonction fibaro:countScenes() mais celle-ci ne réponds que partiellement à mon besoin ci-dessus.

Posté(e)

Dans ton VD, tu met un label supplémentaire "Traitement en cours" et tant que celui-ci contient "OUI" et ben tu attends

 

en pseudo-code :

 

while (fibaro:getValue(vd_id, "ui.Encours.label") == "OUI") do
   fibaro:sleep(2000)  
   if (timeout) then
      -- en cas d attente trop longue, prevoir une sortie
      fibaro:abort()
   end
end

fibaro:call(vd_id, "setProperty", "ui.Encours.label", "OUI")
fibaro:call(vd_id, "setProperty", "ui.label_1_0.value", syslog_message)
fibaro:call(vd_id, "pressButton", bt_nb)
fibaro:call(vd_id, "setProperty", "ui.Encours.label", "NON")

 

Posté(e) (modifié)

J'ai déjà tenté l'expérience, mais j'ai constaté que 2 traitements lancés quasiment en simultané arrivent à détecter le passage à "NON" avant que l'un des 2 ai le temps de positionner le label à "OUI". Si tu regardes mon code, que j'avais déjà fait l'essai, mes appels aux label existent encore dans ma scène et mon VD.

 

Regarde le VD de démo et supprime la tempo d'une seconde et tu devrais constater la même chose. Si tu as le temps de faire le test avec ma scène et mes 2 VD. J'aimerais bien savoir si tu as le même comportement.

 

D'où mon problème d'exécution simultanée (ce VD de démo envoi 8 messages en appelant ma scène de manière très rapide, ce serai la même chose sur d'un coup j'avais plusieurs Scènes ou VD qui demandaient l'envoi de messages en parallèle). C'est un cas que je ne peux pas exclure.

 

Désolé, mais je fais du hors sujet. Si tu le souhaites, nous pouvons poursuivre dans mon TUTO sur l'envoi de message Syslog

Modifié par MAM78
×
×
  • Créer...