Le widget est une représentation graphique d’un commande info ou action.
Donc c’est sûr que cela n’a rien à voir avec ce que tu désires faire.
Le plus simple je pense est de conserver le virtuel avec les commandes infos comme tu le montres, mais en supprimant les commandes du champ valeur pour celles que tu désires traduire.
Ensuite créer un scénario qui se déclenche sur les informations que tu veux traduire
Et dans le scénario lui même, tester par trigger quelle commande a déclenché le scénario, et ensuite tester les valeurs possibles de cette commande et en fonction de la valeur, renseigner la commande info du virtuel par la traduction souhaitée.
Donc pas besoin de variable
Ou alors toujours par scénario mais en mode poilu, faire un bloc code avec des array qui contiennent les valeurs d’origines, un autre avec les traduites et mettre à jour les commandes infos du virtuel
// Récupérer la valeur de la commande TEMP_60
$temp_value = cmd::byString("#[Maison][MAL][RAW_Température]#")->execCmd();
// Liste de correspondance
$correspondance_list = "NO_1TEMP|Vide|TEMP_60|60|TEMP_70|70|TEMP_80|80"; // Ajoutez vos correspondances ici
// Diviser la liste de correspondance en tableau
$correspondance_array = explode("|", $correspondance_list);
// Rechercher la correspondance de la valeur de TEMP_60 dans la liste
$key = array_search($temp_value, $correspondance_array);
// Si une correspondance est trouvée, récupérer la valeur associée
if ($key !== false && isset($correspondance_array[$key + 1])) {
$nouvelle_valeur = $correspondance_array[$key + 1];
// Mettre à jour une nouvelle commande d'information dans Jeedom avec la nouvelle valeur
cmd::byString("#[Maison][MAL][code]#")->event($nouvelle_valeur);
} else {
// Si aucune correspondance n'est trouvée, renvoyer la valeur du début
cmd::byString("#[Maison][MAL][code]#")->event($temp_value);
}
ça à l’aire de fonctionner merci chatGPT je sais pas si il a fait une erreur j’ai juste changer la ligne en bas en cas d’erreur pour que ça retourne la valeur d’origine si il n’y a pas de correspondance.
je pense que ça peut s’optimiser mais bon je suis pas familier avec le php
// Récupérer les valeurs des commandes
$temp_value = cmd::byString("#[Maison][MAL][RAW_Température]#")->execCmd();
// Liste de correspondance
$correspondance_list = "NO_TEMP|Pas de température;TEMP_20|20°c;TEMP_30|30°c;TEMP_40|40°c;TEMP_60|60°c;TEMP_95|95°c"; // Liste des valeurs
// Diviser la liste de correspondance en tableau
$correspondance_array = [];
$pairs = explode(";", $correspondance_list);
foreach ($pairs as $pair) {
list($command, $value) = explode("|", $pair);
$correspondance_array[$command] = $value;
}
// Rechercher la correspondance de la valeur de $temp_value dans la liste
if (isset($correspondance_array[$temp_value])) {
$nouvelle_valeur = $correspondance_array[$temp_value];
// Mettre à jour une nouvelle commande d'information dans Jeedom avec la nouvelle valeur
cmd::byString("#[Maison][MAL][code]#")->event($nouvelle_valeur);
} else {
// Si aucune correspondance n'est trouvée, renvoyer la valeur par défaut
cmd::byString("#[Maison][MAL][code]#")->event($temp_value);
}
dernière version si ça intéresse quelqu’un qui passera par la
// Récupérer la valeur de la commande température
$temp_value = cmd::byString("#[Maison][MAL][RAW_Température]#")->execCmd();
// Récupérer la valeur de la commande rinçage
$rincage_value = cmd::byString("#[Maison][MAL][RAW_Rinçage]#")->execCmd();
// Liste de correspondance pour la température
$correspondance_list_temp = "NO_TEMP|Pas de température;TEMP_20|20°c;TEMP_30|30°c;TEMP_40|40°c;TEMP_60|60°c;TEMP_95|95°c"; // Liste des valeurs pour la température
// Liste de correspondance pour le rinçage
$correspondance_list_rincage = "NO_RINSE|Pas de rinçage"; // Liste des valeurs pour le rinçage
// Fonction pour gérer la correspondance et mettre à jour la commande d'information
function mettreAJourCommande($valeur, $listeCorrespondance, $nomCommande) {
$correspondance_array = [];
$pairs = explode(";", $listeCorrespondance);
foreach ($pairs as $pair) {
list($command, $value) = explode("|", $pair);
$correspondance_array[$command] = $value;
}
// Rechercher la correspondance de la valeur dans la liste
if (isset($correspondance_array[$valeur])) {
$nouvelle_valeur = $correspondance_array[$valeur];
// Mettre à jour la commande d'information dans Jeedom avec la nouvelle valeur
cmd::byString("#[Maison][MAL][$nomCommande]#")->event($nouvelle_valeur);
} else {
// Si aucune correspondance n'est trouvée, renvoyer la valeur par défaut
cmd::byString("#[Maison][MAL][$nomCommande]#")->event($valeur);
}
}
// Appeler la fonction pour la température
mettreAJourCommande($temp_value, $correspondance_list_temp, "code_temp");
// Appeler la fonction pour le rinçage
mettreAJourCommande($rincage_value, $correspondance_list_rincage, "code_rincage");
Pour ajouter il suffit de rajouter dans la première section : $xxx_value puis dans la 2eme section une liste de correspondance $correspondance_list_xx et tout en bas appeler la fonction mettreAJourCommande et indiquer le nom de la commande du virtuel a mettre à jour et la variable plus haut $xxx_value
ce qui est ajouté dans user.function.class.php est gardé lors de mise à jour majeur de Jeedom ?
donc en 4.3 on appelle la fonction Mytranslate(value… directement dans la commande du virtuel et en 4.4 on laisse uniquement #[Maison][MAL][Température]# et on le fait via la formule de calcul si j’ai bien compris on peut aussi appliquer la formule de calcule sur la commande d’origine : #[Maison][MAL][Température]# ?? sauf si on veut garder les commandes d’origine.
merci en tout cas je testerais ce soir.
J’ai pas regardé si ça existait déjà mais un topic qui répertorie des fonctions ou des blocs codes pour des scénarios ça pourrait être intéressant.
ce qui est ajouté dans user.function.class.php est gardé lors de mise à jour majeur de Jeedom ?
Oui
Je t’ai mis 2 solutions qui permettent de faire appel a la fonction, en 4.4 tu peux tres bien continuer a le faire direct dans la commande du virtuel. Mais en 4.3 tu ne peut pas le faire dans calcul car tu na pas de calcul et arrondi sur une info/autre.