Bonjour,
J’ai fait un Widget Info que je trouve moins performant que le bon vieux Rain du core, bien plus rapide.
Je vais donc le laisser. Mais j’ai du mal à renoncer à quelques états que j’avais prévu en dehors du niveau de remplissage. Considérez que c’était l’image du Rain avec un symbole par dessus pour:
Dire que mon contenant débordait;
Qu’il était presque vide;
Qu’il était vide;
Hors connexion ou problème.
Je suis dans le contexte d’un virtuel en disposition tableau avec une dizaine de lignes et colonnes.
Le plus simple serait dans que dans une case j’ai le widget Rain + un autre qui gère les cas de figure évoqués au dessus. Mais j’aimerais trouver mieux. En effet cela prend pas mal d’espace et donc pas génial au niveau look du virtuel.
Je crois me souvenir qu’on ne peut pas superposer deux widgets … et si cela se faisait, il faudrait gérer la transparence du fond de l’un deux.
Ce qui m’a amené à réfléchir à ce type de solution sans savoir trop quoi faire: C’est l’un ou l’autre qui est visible suivant une condition. Je vois deux possibilités (il y en a certainement plus):
dans mon virtuel, deux Infos qui pointent vers la même source. Une condition de scénario rend visible l’un ou l’autre;
Ce qui me paraitrait le plus élégant: Je crée un Widget. Dans mes tests je pourrais avoir #value# < 100 && #value# > 0 qui serait associé au Widget Rain. Les autres tests seraient associés aux images que j’ai créé.
Donc, il y a-t-il une possibilité ? Merci par avance.
Bonjour @ngrataloup. Pas de problème avec un concept de valeur ternaire mais comment l’appliquer concrètement ?
J’en profite pour détailler ce que je fais. Peut-être que cela aidera.
Voilà mon virtuel:
Cela me permet de contrôler le système d’irrigation de ma terrasse. Les plus gros widgets Rain ce sont mes tonneaux que je mesure par des capteurs ultra son.
Mes fleurs sont hydratées par le dessous, dans des gouttières en plastique. Cela m’intéresse de connaitre le niveau de chacune. De même, cela m’intéresse de connaitre le taux d’humidité de différents bacs. Pour tout cela j’utilise 8 capteurs hygrométriques à effet capacitif. Pour info, il sont tous reliés au même D1 mini en passant par 2 ads1115 pour d’abord changer le signal d’analogique à numérique. Si cela vous intéresse j’en parle en bas de ce sujet:
Donc dans mon vituel il faut regarder les 3 dernières colonnes. La première des 3 c’est le niveau de mes gouttières. Sur la 1ere ligne, le Rain qui s’avère plus réactif que mon widget sur la 3 et 4 ligne. Sur la deuxième ligne on voit le Tile avec la valeur -100, c’est la valeur que j’ai défini pour le Hors Connexion. Les deux dernières colonnes c’est le widget perso qui me montre si les fleurs ont soif ou non ou ont trop les pieds dans l’eau. Ce widget c’est ok.
Donc pour mon besoin idéalement j’aurais besoin d’un widget qui fait l’équivalent du Rain + mes différents états autres:
Comme je ne crois pas que cela soit possible, je vais faire un Widget qui traite de ces 4 cas.
Ensuite, à moins qu’on me propose plus élégant et simple, je vais mettre deux infos par signal chacun ayant un widget différent. Ce qui me fera en tout 8 infos de virtuel pour mes niveaux.
Je vais ensuite afficher l’un ou l’autre en utilisant un scénario.
En continuant mes recherches, j’ai trouvé l’astuce de @Alciol :
Mettre dans un bloc de code:
cmd::byId(Numéro ID)->setIsVisible(0)->save();
cmd::byId(Numéro ID)->setIsVisible(1)->save();
J’ai testé mais cela pose un problème avec le widget Rain. Il ne répond plus vraiment et le % a disparu. Le diagnostic me semble facile. Ce code est constamment appelé et donc la commande renvoyé tout le temps. Le widget ne doit pas avoir le temps de s’initialiser correctement.
Je pense que le plus facile serait d’intégrer une condition dans le code, si quelqu’un peut m’aider, pas à l’aise avec, ce serait du genre:
si byId(1111)->setIsVisible = 1 alors
Voilà, merci par avance pour votre aide et suggestions
----------------------PLUS TARD…
J’ai obtenu ce code par ChatGpt
// Récupérer la commande correspondant à l’ID 3388
$cmd_3388 = cmd::byId(3388);
// Vérifier si la commande est visible
if ($cmd_3388->isVisible()) {
// Exécuter les lignes de code pour masquer la commande 3388 et afficher la commande 3619
cmd::byId(3388)->setIsVisible(0)->save();
cmd::byId(3619)->setIsVisible(1)->save();
}
Sauf que cela ne fonctionne pas. Dans le log j’ai:
Call to undefined method virtualCmd::isVisible()
Et là ChatGPT me laisse en rade. Donc quelqu’un saurait comment récupérer l’état de visibilité de l’info de mon virtuel?
}
----------------PLUS TARD-----------------------
Les conseils de Copilot sont bons. Cela fonctionne:
// Récupérez l’état de la commande 3388
$etatCommande3388 = cmd::byId(3388)->execCmd();
// Vérifiez si l’état est égal à 0
if ($etatCommande3388 == 0) {
// Si l’état est égal à 0, désactivez la visibilité de la commande 3388
cmd::byId(3388)->setIsVisible(0)->save();
// Activez la visibilité de la commande 3619
cmd::byId(3619)->setIsVisible(1)->save();
}
-------------------------------PLUS TARD----------------------------------
Approche de la visibilité n’est pas bonne. Même invisible un widget occupe son espace. L’autre devenant visible parait au-dessus.
Ah? Super merci! Effectivement je me suis demandé si cette possibilité existait, tu n’as pas rêvé.
J’ai fini par croire que c’était impossible à faire. Comment as tu fait, sans évidemment en faire une simple image ? Pour ma culture et des fois que …
J’ai décoché solution. Si ce que tu me proposes fait la job que j’attends, alors je ferais une réponse où les méthodes sont évoquées et que je cocherai comme solution. L’idée est évidemment que cela puisse être aussi utile à quelqu’un d’autre.
Il marche vraiment impeccable, c’est donc une autre approche … mais pas très idiot proof par rapport à l’autre méthode. Mais pour le bénéfice d’autres utilisateurs, peux tu nous dire ce que tu as modifié par étape ? J’ai ouvert NotePad++ mais si j’ai repéré un certain nombre de lignes, notamment dans le style, je suis certain que si j’essayais de remplacer le « Danger » par autre chose, j’explose tout. Ce serait donc sympa si tu pouvais nous expliquer comment le faire intelligemment en se référençant aux no de lignes du fichier que tu as envoyé, je pourrais enlever 1 ou 2 l à mon pseudo.
var(--al-danger-color); c’est une variable css mise a dispo dans le core pour le rouge d’un élément danger en fonction du thème, exemple pour le theme dark :
Voilà c’est formidable. Je ne me retrouve pas avec une solution mais deux. Pour les futurs intéressés, à vous de choisir. J’écris cette ultime message afin de le cocher comme solution … puisque je ne peux pas en cocher deux.
1ere solution: Dans un virtuel, faire deux (pour mon cas je n’avais pas besoin de plus) commandes infos qui ont la même source (je l’ai fait au travers un scénario). Je cherchais donc des lignes de code qui simulaient le cochage de « Afficher ». La suite des explications se trouve là. C’est @henribi qui m’est arrivé avec deux lignes de code très simples alors que l’AI me niaisais depuis 24h
2ième solution Elle se trouve un peu au dessus et proposée par @Phpvarious. :À priori, pour les nuls comme moi, ce n’est pas le premier réflexe d’aller jouer dans du code HTML. Mais si vous prenez son fichier (basé sur le Widget core: Rain (Le tonneau qui se remplie)) et que vous suivez les instructions qu’il a donné, ce ne sera pas la fin du monde. Je suppose qu’il y a la même possibilité avec la plupart des Widgets du core qui son animés et varient selon une valeur. Aux béotiens comme moi, alors n’oubliez pas de faire une copie du fichier HTML original avant de vous livrer à des modifs