Changer le type de données

Bonjour,

Une question bete, mais j’ai pas trouver (ou mal chercher)

J’utilise JMQTT avec une alarme ring. Les capteurs me remonte un paramètre « commstatus » qui prend le valeur « ok » ou « nok » (donc c’est configurer comme un type « Info Autre ».
Je veux utiliser cette valeur comme commande de disponibilité de l’équipement, mais il me faut du info binaire ou info numérique.
J’ai changer le type en info binaire, mais du coup cela prend direct la valeur 0.
Dans configuration de commande, onglet configuration j’ai mis la formule #value#==ok mais ca ne change rien.
je pense qu’il y a une erreur de syntaxe sur ma formule, pouvez vous m’aidez?

Dans les paramètres avancés de ta commande si peux rentrer la formule suivante :

(#value# == 'ok')? 1:0

Ainsi, si il reçoit la valeur ok, il la transformera en 1, sinon, 0 … Et tu auras ton binaire qui fonctionne

Norbert

1 « J'aime »

Exactement (ou juste #value# == 'ok')

2 « J'aime »

Salut,

Je voudrai comprendre la logique.

Vous avez une commande « Info Autre » qui vous renvoi du OK ou NOK que vous voulez modifier en info binaire ( 0/1) à laquelle vous voulez ensuite forcer l’affichage en OK ou NOK en modifiant les paramètres avancés de la commande.

Pas bien réveillé ou alors j’ai rien compris au sujet .
Un éclairage?

Exact, j’oublie toujours que l’opérateur ternaire n’est pas nécessaire pour un binaire

Hello,

Il reçoit effectivement du texte sur une commande « autre » donc une chaine de caractère.
Mais cette chaine représente une info binaire (ok/nok) qui n’est pas reconnue nativement par le Core (contrairement à On/Off/Oui/Yes/True etc).
Pour la passer en binaire, il suffit de sauvegarder l’équipement en ayant modifié le type en binaire, mais à ce moment la, vu que la chaine n’est pas vide, elle vaut toujours 1.
Donc dans les paramètres avancés de la commande, il faut rajoute un « calcul » #value# == 'ok' pour que ok soit vu comme 1 et tout le reste comme 0.

Je l’utilise très souvent pour la disponibilité es équipements MQTT pour lesquelles on ne peut pas modifier le LWT :
image

Bad

2 « J'aime »

J’ai effectivement le même souci avec les shellys qui renvoient online/offline

Pour les shellies, il suffit de mettre la commande info en "Binaire", pas besoin de formule de calcul chez moi. Le core semble reconnaître "online/offline".

Tu es sur que ca repasse bien à 0 ?

Le code qui s’occupe de ça est ici :
https://github.com/jeedom/core/blob/alpha/core/class/cmd.class.php#L927-L937

Et il n’est pas question de online/offline (je sais, j’y ai touché il y a pas longtemps :stuck_out_tongue:)

Oui, car je monitore ce statut.
Peut être un traitement de la chaîne de caractères qui contient "On" et "Off" ???

Je n’ai pas été plus loin mais il semble y avoir un traitement sur "value".

$_value = jeedom::evaluateExpression(str_replace('#value#', ...

EDIT

D’ailleurs en relisant le code que tu m’as communiqué, si le core ne reconnaissait pas "online", la commande info devrait toujours rester à 0, ce qui n’est pas le cas chez moi.

J’ai testé et si je ne transformer pas moi même en 0/1, je n’ai plus de changement d’état si je mets la commande en binaire. Ça reste toujours à 0

Norbert

As-tu attendu que la valeur s’actualise dans jMQTT ?

Oui, bien-sûr, mais si ça fonctionne, je suis preneur des retours.
Le fait de passer par une formule ne me plaît pas forcément.

Je ne sais pas si cela peut avoir une influence mais j’ai le framework sc de @dJuL.
Si @Bad à une idée.

Alors, je ne sais pas exactement de quoi tu parles (framework sc), mais si tu reçois « online » ou « offline », tu seras (selon moi) obligé de passer par une formule de calcul pour le passer en binaire.

Je ne vois pas en quoi c’est un problème ?
En plus c’est pour les état de dispo, ça ne change pas souvent, donc la charge sera minime.

Je pensais que tu connaissais.

https://community.jeedom.com/search?q=framework%20sc

C’est pas vraiment un pb, c’est juste qu’on rajoute une opération intermédiaire et que ça m’ait déjà arrivé e chercher pourquoi la valeur renvoyée par un matériel ne correspondait pas à la valeur reçue … En oubliant que j’avais mis une formule :wink:mais c’est pas dramatique non plus, on est d’accord

1 « J'aime »

Mes plus plates excuses, j’ai repassé la commande en Autre pour vérifier et la commande donne true/false (shelly 1ère génération).

Désolé, il faudra que tu utilises la formule #value# == 'online'.

Ayant une ring aussi sous jmqtt je confirme cela fonctionne.

2 « J'aime »

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