Convertisseur hexadécimal en décimal et en binaire

Bonjour,

Existe t’il un convertisseur de valeur hexadécimal en binaire ? J’utilise l’excellent plugin TELEINFO de @ticed35 et je souhaiterais décrypter les informations du « registre de statuts » de mon Linky (8 caractères ASCII). L’idéal étant que ce convertisseur soit directement intégré au plugin Virtuel.

Dans l’attente de vous lire

Bonsoir,
La conversion n’est pas compliquée mais je ne sais pas si tu te rends bien compte mais convertir de l’hexa en binaire ça va te faire une chaîne de caractère particulièrement longue.
Par exemple, 0xF (F en hexa) ça va te donner 1111.
0x20, l’espace en ASCII donne 100000.
Et ainsi de suite.

Bonjour mich0111,

Ouais, j’y arrive bien avec la calculatrice de Windows, mais je ne sais pas comment faire avec Jeedom, voici pour exemple la valeur du « registre de status » de mon Linky qui m’intéresse :

image

En effet, je pense que c’est pour cela que cette variable est en hexa. En l’occurence, celui-ci peut aller jusqu’à 32 bits. Mais il peut être particulièrement intéressant pour ceux qui ont des contrats type EJP ou Tempo, il indique en effet les préavis.

Je pensais à une évolution du plugin Virtuel car celui-ci fait déjà la conversion du décimal vers le binaire.

#[Variable Décimale]# & 1 donne la valeur du premier bit.

Je m’en servais pour mes variables Modbus mais maintenant c’est directement intégré au super plugin MyModbus de @Bebel27 en béta.

A vous lire.

Alors, à mon avis, le plus simple est de faire un tableau de conversion hexa → binaire.
Par calcul, à part des décalages, c’est plus compliqué.

Tu fais un tableau du type :
0 - 0000
1 - 0001

A - 1010
B - 1011
C - 1100
D - 1101
E - 1110
F - 1111

Ensuite tu analyses les caractères de ta chaîne à convertir et tu stockes l’équivalence au fur et à mesure dans une chaine de caractères de conversion.ou tu utilises la fonction str_replace() pour convertir la même chaîne.

Moi ça me va de découper l’héxa, mais comment faire ça sous Jeedom ? Faut passer par des scénarios ? Si t’as un début de piste à me donner je suis preneur.

:grinning:

Oui, par scénario.
Eventuellement dans un bloc code de scénario si c’est plus facile pour toi.

hexdec()

https://www.php.net/manual/fr/function.hexdec.php

decbin()

https://www.php.net/manual/fr/function.decbin.php

2 « J'aime »

Tu as raison, pourquoi réinventer la poudre.

:roll_eyes:

Vous êtes bien mignon les développeurs mais je suis pas un as en informatique? J’en fait quoi des codes php ? N’auriez-vous pas au moins un début de piste ? Par ou je commence ? Quel outil du core ou quel plugin j’utilise ?

:face_with_monocle:

En plus quand je vois ça :

Çà ne me rassure pas.

Merci de votre aide !

Hello
dans un bloc code :

$hexa ="3A 4001";
$dec= hexdec ($hexa);
$bin = decbin ($dec);
$scenario->setLog("Valeur binaire = " .$bin);
1 « J'aime »

@Claude69t a tout écrit.
Et pour compléter son code, si tu ne veux pas te contenter de l’avoir dans le log, la valeur binaire est stockée dans la variable bin.

2 « J'aime »

Cela doit fonctionner dans une commande info d’un virtuel.

decbin(hexdec(#[ma][valeur][hexa]#))
2 « J'aime »

Merci Jeandhom,

Çà fonctionne au poil ! Première étape réussie.

Deuxième étape séparer les binaires pour interpréter le message, sais-tu comment faire ?

substr() devrait convenir.

https://www.php.net/manual/fr/function.substr.php

2 « J'aime »

Merci t’es un chef Jeandhom :+1:, je vais pouvoir mettre le sujet en résolu !

1 « J'aime »

Re,

Zut y’a un truc que je ne comprends pas :

C’est ok pour la conversion binaire (j’ai mis ! à la fin pour voir tout le binaire sinon ça me mets 1101E+21

Résultat du test 3 ça me va :

Le test 4 aussi :

Mais au test 5 :


ça devrait me retourner 00 ou 0, non ?

Essaie de passer dans le testeur d’expression.
C’est peut-être le ! qui pose problème.

En fait j’ai direct essayé ça mais c’est pas mieux, et quand je l’enlève en exécutant

substr(#[Monitoring][test][test 2 ]#,  -3, 1)

j’arrive à chopper le + :

image

et E avec substr(#[Monitoring][test][test 2 ]#, -4, 1) donc cohérent quoi !

Je comprends rien ! :slightly_frowning_face:

Qu’y-a-t-il là-dedans?

Pour le post juste au-dessus avec des résultats cohérents il y a ça :

decbin(hexdec(#[Monitoring][Compteur Enedis][STGE]#))

et le résultat de 1.1101E+21

substr(#[Monitoring][test][test 2 ]#,  -4,  3)

me donne le bon résultat, soit : E+2

substr(#[Monitoring][test][test 2 ]#,  -10,  3)

également le bon : 1.1

Sauf que je ne veux pas d’exposant pour traiter mes binaires.

J’ai refais des tests ça à l’air d’être bon… j’ai mis _ à la place de mon !

J’arrête pour ce soir… je referais des tests demain.

En tout cas, merci de votre aide !