Aller au contenu
MAM78

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

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour la convergence du code et l'intégration continue chez Fibaro :(

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

en 2024 ? je suppose qu'il n'y a aucune date d'avancée ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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"}})

Partager ce message


Lien à poster
Partager sur d’autres sites
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é ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Et la commande startScenes() passée en requête HTTP depuis un IPX par exemple ? On peut y passer des paramètres aussi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites
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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

concernant ta suggestion j'ai écrit ceci, ici :

 

https://www.domotique-fibaro.fr/topic/9767-hc2-hcl-version-4110-stable-04012017/?page=29#comment-155610

 

Quid de la durée d'historisation et du volume des messages historiés dans la scène ?

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

la durée d'historisation est variable. Il purge par bloc de lignes au bout d'un certain nombre de lignes stockées.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Du coup comme JJ du 68, le passage de paramètre fonctionne aussi depuis l'API ?

Partager ce message


Lien à poster
Partager sur d’autres sites

×