Changer la valeur d'un état autre dans un virtuel

Bonsoir,

Je voulais savoir si dans un virtuel on pouvais traduire une commande info / autre

j’aimerais éviter un widget et un scénario, le widget déjà ne permet pas de réutiliser la valeur traduite ce n’est que visuel.

j’utilise le plugin de @Flobul

qui permet de récupérer mon lave linge LG mais j’aimerais traduire les valeurs qu’il récupère :

exemple du virtuel :

on ne peut pas tricher avec une action liste ?
par exemple :

Il manque une commande info avec la possibilité de lister des valeurs et par quoi les remplacer :stuck_out_tongue:

Je pose juste la question mais je pense que j’ai pas le vraiment le choix d’utiliser variables et scénario.

Merci

+++

Salut,

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

Bonjour,

Pour ce cas de figure, il est aussi possible d’utiliser les userFunction avec une fonction de traduction.

merci pour vos réponses

@anon53349806
du coup un truc dans le genre :

ça m’oblige à faire un si value=xx alors tag = xx pour chaque valeur possible

j’ai testé ça fonctionne sauf que je me demande juste si vous voyez une optimisation de l’algo ?

@Phpvarious ta proposition c’est d’utiliser une fonction qui traduit je ne peux pas choisir par quoi remplacer si je comprends bien

Dommage je suis pas assez bon pour un bloc code :wink:

merci en tout cas pour vos réponses.

+++

bon je viens de faire un test avec ça :

// 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 :sweat_smile:

je viens de revoir le code :

// 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 :wink:

Bon version finale :

// 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

+++ et bonne soirée

Aller je te met ma version :

dans user.function.class.php :

  public static function MyTranslate($_content='') {
    $replace = array(
      "DELICATE" => "Délicat",
      "NO_TEMP" => "Pas de température",
      "NOT_SELECTED" => "non selectionné",
      "NO_RINSE" => "Pas de rinçage",
      'TEST' => "test");
    if ($_content == '') {
      return $_content;
    }
    return str_replace(array_keys($replace), $replace, $_content);
  }

Puis dans le virtuel :
Exemple en 4.3 :


Ou (en 4.4) :
image

4 « J'aime »

Au top comme d’hab ! :+1: :clap:

Hello
super ce code merci

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.

Bonne journée à vous

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.

2 « J'aime »

ça marche merci pour l’aide

je viens de voir tes widgets je sens que je vais m’amuser ce soir :wink:

vu tes connaissances peut-être que tu saurais dépanner ici :

c’est un widget à l’abandon mais je le trouvais jolie donc si tu as un moment si ça se trouve ce n’est pas grand chose.

+++

Et ce widget c’est pour appliquer sur un thermostat ?

ou des modes :

sinon je viens de tester la fonction merci ça fonctionne au top pouce en l’air :wink:

edit :

super au top !

require_once dirname(__FILE__) . '/../../core/php/core.inc.php';

class userFunction {

	public static function plop($_arg1 = '') {
		return 'Argument 1 : ' . $_arg1;
	}

# ----------------------------------------------
# -----------------CUSTOM NAWAK-----------------
# ----------------------------------------------
  
  public static function MALTranslate($_content='') {
    $replace = array(
      "NOT_SELECTED" => "Non selectionné",
      # rincage
      'NO_RINSE' => "Pas de rinçage",
      'RINSE_NORMAL' => "Normal",
      # rotation
      'NO_SPIN' => "Pas de rotation",
      'SPIN_400' => "400 tours",
      'SPIN_800' => "800 tours",
      'SPIN_1000' => "1000 tours",
      'SPIN_1200' => "1200 tours",
      'SPIN_1400' => "1400 tours",
      # temperatures
      'NO_TEMP' => "Pas de température",
      'TEMP_COLD' => "Froid",
      'TEMP_20' => "20°c",
      'TEMP_30' => "30°c",
      'TEMP_40' => "40°c",
      'TEMP_60' => "60°c",
      'TEMP_95' => "95°c",
      # modes
      'COTTON' => "Coton",
      'DELICATE' => "Délicat",
      'WOOL' => "Main et Laine",
      'SPORTSWEAR' => "Textiles Sport",
      'QUICK30' => "Rapide 30",
      'DUVET' => "Couette",
      'TUB_CLEAN' => "Nettoyage de la cuve",
      'SPINONLY' => "Essorage : Programme téléchargé",
      'BABYSTEAMCARE' => "Baby Care Vapeur",
      'ALLERGYSPASTEAM' => "Anti-allergie",
      'SILENTWASH' => "Ultra silence",
      'EASYCARE' => "Synthétiques",
      'MIXEDFABRIC' => "Mix 40°C",
      'COTTONPLUS' => "Coton +",
      'TEST' => "test");
    if ($_content == '') {
      return $_content;
    }
    return str_replace(array_keys($replace), $replace, $_content);
  }
  
# -----------------------------------------------

}