Aller au contenu

Recommended Posts

Bonjour à  tous,

 

Je rencontre un curieux problème d'affichage que je vais essayer de résumer le plus simplement possible.

 

Pour afficher les infos de mes sondes Oregon (température, humidité et anémomètre) j'utilise Fibarolink avec Domoticz qui tourne sur un Raspberry Pi.

Fibarolink renvoie les données de son choix vers un module virtuel qu'il suffit de créer sur la HC2 avec, comme seule "fonction" une étiquette qui servira à  afficher la valeur renvoyée par Fibarolink.

 

Cela fonctionne très bien pour mes sondes de température et d'humidité mais, pour l'anémomètre qui envoie deux paramètres : la vitesse du vent et la vitesse des rafales, l'affichage obtenu dans le module comporte plus de dix chiffres après la virgule !!!! Comme s'il y avait une erreur d'arrondi.

 

post-864-0-57999900-1432572708_thumb.png

 

 

Pourtant, Fibarolink et Domoticz envoient bien une valeur "normale" avec au maximum deux chiffres après la virgule comme on peut le voir ci-dessous (dans cet exemple vitesse du vent 3,2 km/h et rafales à  5,4 km/h - cet exemple a été capturé quelques secondes après l'image ci-dessus ce qui explique les différence de valeurs).

 

2015-05-25 18:37:53.897 (RFXtrx433) Wind (Anémomètre)
2015-05-25 18:37:53.920 FibaroLink: sending value 3.2 to property ui.VitesseVent.value of virtual device id 92
2015-05-25 18:37:53.943 FibaroLink: sending value E to property ui.SensVent.value of virtual device id 39
2015-05-25 18:37:53.950 FibaroLink: sending value 5.4 to property ui.VitesseRafale.value of virtual device id 92
2015-05-25 18:38:00.254 Hardware Monitor: Fetching data (System sensors)
2015-05-25 18:38:08.041 (RFXtrx433) Wind (Anémomètre)

 

Si quelqu'un à  une idée, je suis preneur car, même si l'affichage est juste, c'est vraiment pas beau :(

 

Partager ce message


Lien à poster
Partager sur d’autres sites

es-tu sûr de ce qui est envoyé au Fibaro ? Car Fibaro n'affiche que ce qu'il reçoit, il ne va pas s'amuser àrajouter des décimales où elles n'existent pas

Partager ce message


Lien à poster
Partager sur d’autres sites

A la de la ligne de code pour renvoyer la valeur dans l affichage mets ""

Partager ce message


Lien à poster
Partager sur d’autres sites

es-tu sà»r de ce qui est envoyé au Fibaro ? Car Fibaro n'affiche que ce qu'il reçoit, il ne va pas s'amuser à  rajouter des décimales où elles n'existent pas

Oui.

 

Regarde dans mon post, j'ai mis la copie de ce qu'envoie Fibarolink et il n'y a aucune décimale en trop.

Le 3.3 et le 5.4 de mon exemple ont été affichés 3.30000000000 et 5.40000000000

 

De plus les sondes de température et d'humidité fonctionnent exactement de la même façon et tout se passe bien pour elles. C'est à  devenir fou ...

Partager ce message


Lien à poster
Partager sur d’autres sites

A la de la ligne de code pour renvoyer la valeur dans l affichage mets ""

 Je n'ai accès à  aucune ligne de code.

Dans Domoticz, Fibarolink demande quel paramètre tu veux envoyer et à  quel "id" de virtual device de la HC2 il est destiné.

Je ne peux donc rien ajouter.

Partager ce message


Lien à poster
Partager sur d’autres sites

Et ça continue !!!

 

J'ai le même problème avec le module "Eco-Devices Avec Calcul Du Coà»t Journalier"

 

Tout s'affiche bien sauf une des variables qui est elle aussi prise d'une crise de folie des décimales.

 

post-864-0-38321500-1432582498_thumb.png

 

Tout est bon sauf l'index à  00h01.

 

Moicphil m'avait en son temps donné une solution pour tronquer ces décimales surnuméraires en modifiant le code du module mais j'ai l'impression que le problème vient d'ailleurs puisque, que ce soit dans ce module ou dans mes modules virtuels, deux variables identiques traitées exactement de la même façon ne s'affichent pas pareil.

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

peux-tu faire un traitement dan tes VD pour arrondir ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment je m'y prends ?

Et surtout pourquoi faut-il faire ça puisque la valeur envoyée par Fibarolink est déjà"ronde". Elle comporte au maximum deux décimales.

Et même quand c'est une valeur entière, la HC2 me rajoute sa ribambelle de décimales, toutes àzéro dans ce cas bien sûr.

Partager ce message


Lien à poster
Partager sur d’autres sites

je sais que j'avais eu ce problème lors de la creation du VD sur la pluviometrie

 

et du coup pour l'afficher correctement dans le label il fallait mettre " " à  la fin meme si ca sert à  rien...

fibaro:call(selfId, "setProperty", "ui.lblHeure.value", rain1hour  .. " ")

Partager ce message


Lien à poster
Partager sur d’autres sites

"tout problème a une solution"

Si pas de solution, cela devient une contrainte ...

Ca c'était pour la partie philosophique de ta question.

 

Pour la partie informatique :

"Google est mon ami" : http://lua-users.org/wiki/SimpleRound

Partager ce message


Lien à poster
Partager sur d’autres sites

 

..... pour l'afficher correctement dans le label il fallait mettre " " à  la fin meme si ca sert à  rien...

fibaro:call(selfId, "setProperty", "ui.lblHeure.value", rain1hour  .. " ")

En fait, je suppose que cela force la conversion en string.

Du coup, est-ce qu'il ne serait pas plus efficace de faire directement et uniquement un tostring(rain1hour) ?

Partager ce message


Lien à poster
Partager sur d’autres sites

tu as probablement raison, je testerai dans mon VD

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à  jojo et à  Sakkhho pour l'aide que vous tentez de m'apporter mais je me suis sans doute mal expliqué sur ce qui me bloque.

 

Je sais comment arrondir un nombre ou transformer une chaine en nombre ou vice versa (merci jojo pour le clin d'oeil à  Google et la leçon de philo :) ) car je viens du monde de la programmation "classique" (C, C++ et assembleur pour microcontrôleurs).

 

Ce qui me gène, dans le monde du LUA en général et la HC2 en particulier, c'est que je ne vois pas, dans le cas de ce problème, où placer ma ou mes lignes de code pour qu'elles soient exécutées à  chaque envoi de ma donnée par Fibarolink.

 

En effet dans le cas de mon VD alimenté par Fibarolink, il n'y a pas la moindre ligne de programme nulle part puisque la variable affichée par le VD est directement alimentée par l'envoi réalisé par Fibarolink.

 

Si j'ai bien fait comprendre mon doute existentiel cette fois-ci, quelqu'un peut-il éclairer ma lanterne sur ce point ?

Partager ce message


Lien à poster
Partager sur d’autres sites

je ne connais pas du tout le produit.

Mais alimente-t-il un label du VD ? Alors il devrait être possible de lire le contenu de ce label, de l'arrondir et de l'afficher ailleurs ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui il alimente directement un label du VD toute les 10 ou 15 secondes environ qui est le rythme d'envoi des données par Fibarolink.

Quand ça marche (ce qui est le cas pour mes sondes de température et d'humidité je le répète) c'est donc très pratique puisque le VD affiche, quasiment en temps réel, les informations des capteurs météo.

Partager ce message


Lien à poster
Partager sur d’autres sites

et donc tu pourrais :

  • avoir 1 VD qui collecte toutes les données brutes et que tu n'affiches pas
  • d'autres VD qui vont lire (toutes les 3 sec, via le mainloop) les labels du premier VD, les formattent comme tu veux et les affichent

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Je déterre ce sujet car il est hélas plus que jamais d'actualité et commence sérieusement à  pourrir une partie de mes affichages sur l'interface de la HC2.

 

Comme je l'ai indiqué dans les posts précédents, certaines données numériques sont affichées sans raison avec une dizaines de chiffres après la virgule alors que, dans le code ou depuis l'organe qui fournit la donnée celle-ci ne comporte que trois décimales au maximum.

 

Comme je l'ai montré ci-dessus, cela se produit par exemple avec le module "Eco-Devices avec Calcul Du Coà»t Journalier"

 

post-864-0-13581900-1434032883_thumb.png

 

Ce qui est "amusant", c'est que depuis la mise à  jour en 4.049, le problème a empiré comme le montre la capture d'écran ci-dessous où le problème est maintenant présent sur deux données et non plus une seule.

 

post-864-0-77867500-1434032889_thumb.png

 

Bien évidemment, STRICTEMENT RIEN n'a été modifié dans le code du module entre ces deux captures.

 

Suis-je le seul à  rencontrer ce genre de problème ???

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

est-ce volontaire qu'avant la valeur de heir est "x kWh soit y €" et que maintenant il n'y a plus que le x ? Cela aussi fait-il partie du problème ?

 

Sinon j'ai observé que dans ton VD, il affiche des tonnes de décimales UNIQUEMENT dans les champs qui ne sont que numériques, dans les autres où tu as fait une concaténation avec de l'alphanumérique, il n'y a pas ce phénomène

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, ce n'est pas volontaire. C'est apparu suite au passage en 4.049. A mon avis c'est du à  une limite de la taille de la zone d'affichage. Comme le nombre de kWh comporte maintenant près de 15 chiffres, il n'y a plus la place pour la suite.

 

Ce n'est hélas pas MON VD mais celui écrit par JossAlf. Je n'ai pas modifié son code, si ce n'est l'adresse ip de mon EcoDevices et lui semble ne pas avoir ce problème au vu de la copie d'écran qu'il a postée.

 

Je ne comprends donc pas pourquoi cela ne semble se produire que chez moi et, même si en traficotant le code il y a peut-être moyen de contourner la difficulté, l'aimerais bien comprendre pourquoi elle existe.

Partager ce message


Lien à poster
Partager sur d’autres sites

En informatique, comme dans beaucoup de domaines, il y a toujours une explication à  tout.

 

Je partage ta réflexion quand à  la probable limitation de la taille de la zone d'affichage.

Par contre, Fibaro n'affichera que ce qu'on lui dit d'afficher. Ce n'est pas Fibaro qui va s'amuser à  rajouter des décimales (différentes de zéro - zéro ou 999, je pourrais comprendre)

 

Je vois deux manières pour "résoudre" le problème :

  1. Vérifier sur ton EcoDevice si tu ne sais pas configurer la précision des infos qu'il envoie.
  2. Voir avec JossAlf pour qu'il adapte le code du VD en disant qu'on ne garde que 2 décimales

Partager ce message


Lien à poster
Partager sur d’autres sites

Désolé de te contredire un peu mais je ne suis pas d'accord avec "Ce n'est pas Fibaro qui va s'amuser à  rajouter des décimales".

 

Il suffit d'un bug dans l'interpréteur LUA pour que cela se produise.

 

Cela semble être le cas ici puisque ce phénomène, qui ne se produisait que sur une variable avec la version 4.042 se produit maintenant sur deux variables avec la version 4.049 alors que tout est resté identique par ailleurs.

 

Par ailleurs, je ne peux pas ajuster la précision des informations envoyées par l'EcoDevices pour la simple et bonne raison que ce sont des nombres entiers et que donc .... les décimales apparaissent bien lors de l'exécution du module.

 

Dernier point qui me chagrine encore plus : JossAlf, l'auteur du VD, ne semble pas rencontrer ce problème vu la copie d'écran qu'il a postée.

 

Je sais ; ça parait fou :huh:  mais c'est hélas comme ça.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'essayais juste de comprendre pour trouver une solution.

quelle est la version de firmware de JossAlf ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

 

Sinon, tu peut juste utiliser un formatage du style :

local string = "12,00000"

fibaro:debug(string.sub(string, 1, 5))

Ce qui te permettra d'afficher ce que tu souhaites, dans cet exemple, j'affiche que les 5 premieres caractères.

 [DEBUG] 19:14:00: 12,00

Partager ce message


Lien à poster
Partager sur d’autres sites

@Moicphil,

je ne connais pas assez LUA, mais il devrait y avoir une fonction pour arrondir au nbr de décimales voulu, car si ton string est 123.000000, le résultat sera 123.0, et on voudrait peut-être 2 décimales, donc 123.00

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, tu as raison...

 

Ca doit etre possible en utilisant "string.format" mais plus lourd quand meme...

 

> http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/LUA_Fonction_Chaine.html

 

 

Créer une chaîne de caratères formatée string.format(formatstring, e1, e2...) formatstring:format(e1, e2...)

Créez une chaîne de caractères composée et des arguments fournis e1, e2 et respectant le format défini par formatstring. Fonction semblable à  printf("format",...) en language C. Une option additionnelle %q permet la création de double guillement autour d'une chaîne de caractères.

c, d, E, e, f, g, G, I, o, u, X, et x tous s'attendent à  un nombre comme argument.

q et s attendent une chaîne de caractères.

> = string.format("%s %q", "Hello", "Lua User !") -- chaîne de caractères et chaîne de caractères entre double guillement
Hello "Lua user!"
> = string.format("%c%c%c", 76.117.97) -- Code caratères en ASCII
Lua
> = string.format("%e, %E", math.pi, math.pi) -- exposant
3.141593e+000, 3.141593E+000
> = string.format("%f, %g", math.pi, nombre entier signé, signé, non signé de math.pi) -- virgule flottante
3.141593, 3.14159
> = string.format("%d, %i, %u", -100, -100, -100 compact) -- signé, non signé
-100, -100, 4294967196
> = string.format("%o, %x, %X", -100, -100, -100) -- octal,hexa,hexa
37777777634, ffffff9c, FFFFFF9C

Partager ce message


Lien à poster
Partager sur d’autres sites

×