Aller au contenu

HC2 - Version 4.11x - Fonction figaro:args() - passage de paramètres pour les scènes


Messages recommandés

Posté(e) (modifié)

Fonction figaro:args()

Passage de paramètres pour les scènes

 

Suite à la découverte de @Steven d'une nouvelle fonction figaro:args() dans la version 4.110 qui permet de faire passer des paramètres lors de l'appel d'une scène.

Je vous propose d'ouvrir ici un nouveau sujet dans lequel nous pourrions échanger sur les nouvelles possibilités offertes par cette fonction. Notamment la simplification de la maintenance de nos codes LUA.

 

Comme par exemple : la création de fonctions génériques qui pourraient être appelées depuis l'ensemble de nos scènes, modules virtuels et appareils externes sans avoir à dupliquer le code dans chacun d'eux.

 

Dans le 2ème post, vous trouverez les suggestions et nouvelles scène utilisants cette nouvelle fonction.

 

Vous trouverez ci-dessous un exemples d'usage de cette fonction (reprise de l'exemple de @Steven ) pour des Scènes ou Modules Virtuels :

 

1) Utilisation depuis une scène ou un module virtuel

 

Code la scène ou module virtuel appelant :

fibaro:startScene(20, {{prenom = "Steven"}, {nom = "Piccand"}})

Code de la scène appelée :

local params = fibaro:args()

if (params) then

  for k, v in ipairs(params) do
    if (v.nom) then print("Nom : " .. v.nom) end
    if (v.prenom) then print("Prénom : " .. v.prenom) end
  end

end

Résultat dans la fenêtre de debug de la scène appelée :

 

[DEBUG] 16:57:20: Prénom : Steven
[DEBUG] 16:57:20: Nom : Piccand

 

2) Utilisation depuis un appareil externe :

Comme par exemple une box domotique utilisée en passerelle (au hasard, Jeedom, FHEM, Zibase, etc), des scripts Shell (CURL), des pages Web (PHP), etc. (sauf IPX800 pour le moment) source @Lazer

 

URL à appeler en POST :

/scenes/123/action/start

Données à envoyer en POST :

{["args"]=args})

 

Modifié par MAM78
  • Upvote 2
Posté(e) (modifié)

Espace réservé pour une liste des fonctions génériques qui seront développées ou suggérées sur la base de cette nouvelle fonction.

 

Suggestions :

 

  • Notifications centralisée (Mail, SMS, Push, Messages vocaux, ...) avec une gestion des identifiants des destinataires (adresses mail, ID de téléphone).
  • Associer à un VD une ou de scènes reprenant les codes répliqués dans chacun des boutons du VD. Avec je l'espère de nouvelles versions des VD du forum mettant à profit cette centralisation du codes pour en simplifier leur maintenance. Suggestion de @Lazer
  • Créer une scène (bibliothèque) qui contiendrait un ensemble de fonctions (qui ne nécessite pas de retour de valeur, soit des procédures) dont le nom de la fonction/procédure serait le premier paramètre suivi de ses paramètres propre à cette fonction/procédure. Suggestion de @MAM78

 

Disponibles :

 

  • Centraliser l'ensemble des logs de toutes les scènes et VD. Notamment celles les plus critiques qui permettrait d'avoir une vision globale sur les problèmes rencontrées. Suggestion de @Gazous ==> C'est fait par @MAM78 via un serveur Syslog (exemple Synology) est c'est disponible ici : 

 

 

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

Attention :

 

Après quelques temps d'utilisation, je me rends compte d'une certaine limite à l'usage que cette solution, notamment lorsque l'on veut la solliciter la scène de façon intensive.

 

En effet lorsqu'il y a un grand nombre d'appels de la scène créée dans un laps de temps très court, comme par exemple inférieur à la seconde (ou plus si, la scène effectue un grand nombre de traitements qui durent un certain temps), vous aurez un violant plantage de la Scène ou du VD qui sollicite la scène créée/appelée.

 

Cela arrive dès lors que l'on dépasse le nombre maximum d'exécutions simultanées  (voir paramétrage Max. running instances) de la scène créée. Sachant que le maximum est limité à 10 instances simultanées.

 

Donc avant de se lancer dans la création d'une scène comme un équivalent d'une fonction, il convient de se poser la question, combien de fois cette scène peut être appelée en simultané.

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

@Krikroff Ton post signalant l'existence de ta scène Notification center

 

@Krikroff même pas drôle, tu l'as déjà fait ;) en bonne partie

 

Ce ne serait donc plus nécessaire de mettre ta fonction Notify dans la page de code a l'origine de la demande de notification.

 

Compte-tenu de cette nouvelle possibilité de faire un passage de paramètre lors d'appel de scènes, qu'est-ce qui faudrait adapter dans ton code pour passer les paramètres et peut-être sans la nécessité d'utiliser d'une variable globale ?

 

Ce serait top d'ajouter les notifications interactives à ta scène. Cf. post de @mprinfo disponible ici : Notification interactive pour lancer une scène

 

Par ailleurs, est-ce que tu a fait évoluer ta fonction depuis la version 1.0.1 et si tel est le cas pourrais-tu STP nous en faire profiter ?

 

Modifié par MAM78
Posté(e)

Alors: oui, oui, oui la variable globale devient inutile, carrément, oui, asap :D

Posté(e) (modifié)

Sauf pour l'usage dans les VD pour lesquels l'appel de la scène par passage de paramètres ne semble pas fonctionner.

 

Après un check par @Krikroff l'appel depuis un VD fonctionne très bien aussi :13:

Modifié par MAM78
Posté(e)

@MAM78,

 

- VD = Ancien moteur LUA 5.1

- Scènes et plugins = Moteur LUA 5.2 de la V4.xxx

 

Et malheureusement les VD ne tourneront jamais sur le moteur LUA 5.2

 

 

Posté(e)

Les VD sont destinés à disparaître... Enfin c'est en théorie, puisque nous attendons toujours les plugins ;)

Posté(e)

Lol non, pas de roadmap ! Ils ne peuvent pas clairement supprimer les VD sans proposer une alternative.

Posté(e)

@MAM78, Attention le code de la scène appelante dans ta prez n'est pas bon, le code est

fibaro:startScene(20, {{prenom = "Steven"}, {nom = "Piccand"}})
Posté(e)
il y a 43 minutes, MAM78 a dit :

Sauf pour l'usage dans les VD pour lesquels l'appel de la scène par passage de paramètres ne semble pas fonctionner.

 

Après réflexion je trouve cela étrange tu as essayé ?

Posté(e)

Verdict: fibaro:startScene avec passage de paramètres fonctionne parfaitement depuis un VD :60:

Posté(e) (modifié)

Effectivement ça marche nickel. Ca va permettre de nous simplifier la maintenance de nos codes.

 

J'ai compris pourquoi j'avais une erreur, le put.. de correcteur orthographique m'avait remplacé fibaro par figaro:13:

Modifié par MAM78
Posté(e)

Une scène permettant de centraliser l'ensemble des logs de toutes les scènes ?

Si les logs sont persistés ailleurs, cela permettrait de garder un historique d'activité que l'on a pas après un reboot de la box...

Cela serait pratique pour identifier de problèmes.

Posté(e) (modifié)

Une nouvelle suggestion.

 

Créer une scène (bibliothèque) qui contiendrait un ensemble de fonctions/procédures dont le nom de la fonction/procédure serait le premier paramètre suivi de ses paramètres propres

 

Pour contourner le problème de retour de valeur de la fonction/scène, je pense à la solution suivante :

  • créer une variable globale au nom de la fonction et qui prendrait la valeur de retour souhaitée à chaque appel et qui pourrait ensuite être testé dans le code du VD ou scène appelant la fonction.
  • J'ai juste un crainte à ce sujet, lorsque cette fonction sera appelée de façon quasi simultané ou en parallèle, je ne suis pas certain du coup que la valeur de retour corresponde bien celle générée par le bon VD ou scène ayant appelée la fonction.

Si vous avez d'autres idées pour ce retour de valeur de la fonction/scène, je suis preneur.

 

Comme par exemple :

 

fibaro:startScene(20, {{fonction = "nomfonction"}, {param1 = "Valeur 1"}, {param2 = "Valeur 2"}})
if fibaro:getGlobal("Retour_nomfonction") then
...
else
...
end

 

Dans la scène 20, serait alors exécutée la fonction correspondantes selon le nom du premier paramètre (fonction) accompagnée de ses propres paramètres

Modifié par MAM78
Posté(e)
il y a 4 minutes, Gazous a dit :

Bonne idée ! Mais ce ne sera pas possible depuis un VD...

Pourquoi pas possible depuis un VD ?

Posté(e) (modifié)

un certain nombre (aléatoire ou fixe) est-ce que ces logs sont archivables et est-ce que l'on peut les lire ?

Modifié par MAM78
Posté(e)

Bah non tu ne peux pas les archiver, c'est justement le sens de la remarque de Gazous => créer une scène pour aller les archiver ailleurs... sur un serveur Web externe via un POST ou un PUT sur des pages PHP par exemple.

 

Pour lire leur contenu, va voir mon watchdog, il est entièrement basé sur ce principe

×
×
  • Créer...