Transformer un état binaire en texte

Bonjour,

Comment (simplement hein) transformer un état binaire en texte.
- l’inverse se réalise de cette façon :
#[Objet][Equipement][Texte]# == 'Hiver'?1:0 (donne 1 si c'est Hiver sinon 0

Ce que je recherche, c’est l’inverse sur un état :
#[Objet][Equipement][Etat]# == 0 (doit afficher 'arrêt', sinon 'marche')
J’aurais souhaité un truc du genre :
#[Objet][Equipement][Etat]# == '0'?'arrêt:marche : mais cela ne fonctionne pas.

Quand je demande simple, c’est pour éviter de passer par un scénario / variable, c’est pour afficher un état (-h) dans un virtuel.

Merci.

1 « J'aime »

Salut @Fabrice,

Il faudrait essayer en quotant les strings :

(#[Objet][Equipement][Etat]# == '0') ? 'arrêt' : 'marche';
3 « J'aime »

Bonjour

Cela fonctionne exactement comme je l’attendais,
=> merci !

Tiens bizarre je vais regarder ça de plus près mais j’avais dû passer par une fonction maison, pas pratique. Me semble que c’était pour afficher « — » à la place d’un chiffre et j’avais pas trouvé de solution simple comme ça.

1 « J'aime »

Alors je n’arrive pas à faire fonctionner cela dans un Virtuel.

En effet :
(#[Localisation][Chloé][Présence]# == 1) ? 'Présente' : 'Absente'
Donne : Présente dans le testeur d’expression (ok pour moi donc)

Affiche cela dans le virtuel (type info/autre) :
(1 == 1) ? 'Présente' : 'Absente'

Et, même dans le testeur d’expression, cela par en vrille avec ce que je voulais faire :
(#[Localisation][Chloé][Présence]# == 1) ? 'Présente' : 'Absente' depuis le collectDate(#[Localisation][Chloé][Présence]#
Résultat : (1 == 1) ? 'Présente' : 'Absente' depuis le "2021-01-10 13:36:17"

J’imaginais un cela au final dans le virtuel : Présente depuis le 2021-01-10 13:36:17
→ actuellement je passe pas un scénario / variable, c’est ok, mais je voulais alléger tout cela.

1 « J'aime »

Si jamais ça peut te servir, même si je trouve pas ça idéal.

J’ai ajouté dans le fichier user.function.class.php :

  	public static function compare_return_string($_arg1 = '', $_arg2 = '', $_res1 = '', $_res2 = '') {
      	$_arg1 = cmd::byString($_arg1)->execCmd();
      	if ($_arg1 == $_arg2) {
          return $_res1;
        } else {
          return $_res2;
        }
	}

Elle compare les 2 premiers arguments et retourne :

  • le 3eme argument si les 2 premiers sont identiques
  • le 4eme argument s’il ne le sont pas.

Exemple d’une commande info de type autre

compare_return_string(#[Sous-sol][Daikin sous-sol][Etat]#,1, #[Sous-sol][Daikin sous-sol][Température int.]# °c, "---")

Si l’état de ma PAC est en 1, affichage de la température sinon affichage de 3 tirets.

1 « J'aime »

Merci.

Mais cela dépasse pour moi l’usage normal de Jeedom.

C’est quelque chose qui, tôt ou tard, posera un problème auquel il ne sera pas évident de faire le lien et de mettre cela en cause.
Nous voyons, de manière récurrente sur le forum, cette question, en lien avec divers problèmes de l’interface : « as-tu des personnalisations avancées… »

Oui je sais bien. J’aurais bien aimé que le plugin virtuel développé par Jeedom me sorte directement mon texte quand je lui donne une expression ternaire plutôt que de développer moi même un palliatif puisque ça ne marche pas nativement.

Donc si ça peut-être pris en compte dans les prochaines versions du core ou du plugin, ça m’arrange autant que toi Fabrice :slight_smile:

Tout à fait.

Merci pour l’étude en tout cas !

1 « J'aime »

Hello Fabrice,

et si tu testes :

(#[Localisation][Chloé][Présence]# == 1) ? 'Présente depuis le collectDate(#[Localisation][Chloé][Présence]#)' : 'Absente depuis le collectDate(#[Localisation][Chloé][Présence]#)'

Bonjour

Alors, dans le testeur d’expression c’est ok, belle idée.
Mais dans le virtuel, c’est toujours pareil :
image

j’avais le même soucis que toi, et j’ai fait un peu différemment …

image

ca parle bouffe, pas présence ok ^^
mais c’est pareil :smiley:

2 « J'aime »

Ok, je vois bien l’idée, une info d’un coté et une autre info qui concatène les 2.
- bien vue

On vois qu’il y du jus de cerveaux ici !

J ajoute ma présence pour pomper votre jus de cerveaux
:rofl:
Merci pour les bonnes idées

1 « J'aime »

@Fabrice

ca devrait le faire !?

si je teste #[Personne][Tom Test][Présence]# , j’obtiens :
image

1 « J'aime »

@tomitomas et d’après toi il faudrait faire comment pour juste afficher « — » si c’est 0 est une température issue d’une commande si un état est à 1 ?
J’ai beau passé par une autre commande « NoTemp », ça marche pas mieux.

@Fabrice désolé … j’en profite vu que c’est le même sujet. Si une idée magique germe ça m’arrangerait.

(#[Sous-sol][Daikin sous-sol][Etat]# == 1) ?'#[Sous-sol][Daikin sous-sol][Température int.]# °c':'#[Maison][Pilotage PAC - Températures][NoTemp]#'

L’affichage :
image

nop, pour moi le test ternaire ne fonctionne pas sur une info dans un virtuel.

je passe aussi par une fonction perso similaire à ton compare_return_string (mais qui gère un peu plus de cas :wink: )

Bonjour

En terme de remplacement dans un virtuel, j’ai utilisé la fonction str_replace. Ici, pour remplacer « jours » par « j » et « min » par « m »:

str_replace("jours","j",str_replace("min","m",#[Bureau-DEP][Système][Allumée depuis]#))

Peut être que cela peut te servir.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.