[Programmation JS] - Mettre à jour une variable à partir d'un widget

Bonjour la communauté Jeedom,

Je coince sur un problème de programmation depuis quelques semaines (je ne suis pas dessus tous les jours).

Voici le contexte :

  • J’ai créé un virtuel avec une commande de type string dans laquelle je passe une série de couples Nom/Valeur. Le nom est un texte et la valeur est typiquement la valeur de la batterie d’un équipement. Le tout séparé par des virgules.
  • J’ai ensuite écrit un widget qui récupère la valeur et la met dans un tableau à deux entrées. Le premier indice est incrémenté à chaque équipement, le deuxième indice varie de 0 à 1 : 0 : le texte (nom de l’équipement) et 1 la valeur de la batterie.
  • Une fois mon tableau alimenté, je le balaye et je classe les batteries dans 3 tableaux : Les batteries chargées, les batteries moyennes et les batteries vides (ou presque). Les valeurs des seuils sont passées en paramètre au widget.
  • En final j’ai un tableau avec toutes les entrées (qui ne m’intéresse plus) les trois tableaux : chargées, moyennes, vides, le nombre d’entrées dans chacun des tableaux.
  • J’affiche les trois listes proprement (un petit icone de batterie vert / jaune / rouge et le texte dans la couleur adhoc).

Tout va bien jusqu’à là.

Là où je coince :

  • J’aimerai pouvoir réutiliser le résultat « Nombre de batterie faibles » qui est calculé par le widget dans un autre widget ou scénario ou autre. Je pensais copier le résultat dans une variable, ou bien mettre à jour une commande info virtuelle.

Sur le principe cela me semblait simple, mais je butte vraiment.

J’ai essayé plusieurs fonctions, sans succès, comme value, setValue, ou le get et le push par url… j’ai surement des problèmes de syntaxe.

J’ai réussi avec une fonction php lancée depuis un bloc code dans un scénario (trouvé sur l’ancien forum) :

$cmd=cmd::byId(766);
$val=$cmd->execCmd();
$cmd->event($val+10);

La commande que j’ai créé (id 766) est bien mise à jour (incrémentée de 10 dans l’exemple). Mais voila, je n’arrive pas à retranscrire ce code php en javascript pour le mettre dans le widget. Je ne maitrise pas tout dans JS.

Je suis sûr que c’est faisable, mais je n’ai rien trouvé dans la communauté ou l’ancien forum, que je parcours depuis près d’un mois.

Si quelqu’un a une idée, une piste, ou même une autre méthode, je regarderai avec attention.

Merci.

Bon, j’ai l’impression que mes longues (trop ?) explications n’ont pas vraiment convaincues :smile:

Je tente de poser la question autrement, sans ouvrir un nouveau sujet pour ne pas polluer :
Est-il possible de lire une variable depuis un widget et réciproquement la mettre à jour ?

bonjour
tu as 2 questions
la 1er incrémentė un id est faisable
tous les widgets actions le font
regarde le github jeedom tu as tous les widgets core

la 2eme sur les variables est plus chaud vu que je ne l’ai jamais fait.
pour la simple raison que :
pas d’actu hors mise en virtuel de la variable ou faire une relance de la commande toutes les x secondes.
pas d’histo hors mise en virtuel.

donc si tu y tiens tu mets la valeur sur un virtuel et le virtuel met en variable

1 « J'aime »

Merci @ajja17orange.

Je vais donc creuser la mise à jour d’une commande dans un virtuel.
Je ne souhaite pas vraiment utiliser une variable, je pensais que c’était une bonne idée, mais la mise à jour d’une commande me convient bien, je n’ai aucune exigence sur la méthode.

Je vais regarder le post que tu cites. J’ai crois avoir déjà fait des essais avec jeedom.cdm.execute. Je vais reprendre cela. Quant à regarder dans les widget du core, j’avoue que j’ai déjà suivi ton conseil que tu distille régulièrement avant de venir déranger ici :slight_smile:

Merci pour ton retour. Je poursuis mes essais.

comme tu dis je me répete.

si je clic sur

lors du clic mise à 0 et action simultanée

Sans-titre2 (2)

Inutile d’aller plus loin si tu ne vois pas la vidéo, tu lis trop vite :grinning:

Recommence la lecture

:grinning: pause sur un gif

une action binaire c’est le lien que tu n’as apparemment pas compris

ligne 28 pour un slider
https://github.com/jeedom/core/blob/alpha/core/template/dashboard/cmd.action.slider.default.html

soit concrétement le code du gif

    <a style="font-size:20px;" class="test">lors du clic mise à 0 et action simultanée</a>
<script>

  $('.test').off('click').on('click', function () {
      jeedom.cmd.execute({id: 517});
          jeedom.cmd.execute({id: 521});
          jeedom.cmd.execute({id: 523});
   jeedom.cmd.execute({id: 536, value: {slider: "0"}})
    });

</script>

Subtilité : ne pas être en mode édition dans ton design pour action sur <a>

1 « J'aime »