ctve Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 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. 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 922015-05-25 18:37:53.943 FibaroLink: sending value E to property ui.SensVent.value of virtual device id 392015-05-25 18:37:53.950 FibaroLink: sending value 5.4 to property ui.VitesseRafale.value of virtual device id 922015-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
jojo Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 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
Sakkhho Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 A la de la ligne de code pour renvoyer la valeur dans l affichage mets ""
ctve Posté(e) le 25 mai 2015 Auteur Signaler Posté(e) le 25 mai 2015 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 ...
ctve Posté(e) le 25 mai 2015 Auteur Signaler Posté(e) le 25 mai 2015 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.
ctve Posté(e) le 25 mai 2015 Auteur Signaler Posté(e) le 25 mai 2015 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. 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.
jojo Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 peux-tu faire un traitement dan tes VD pour arrondir ?
ctve Posté(e) le 25 mai 2015 Auteur Signaler Posté(e) le 25 mai 2015 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.
Sakkhho Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 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 .. " ")
jojo Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 "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
Lazer Posté(e) le 25 mai 2015 Signaler Posté(e) le 25 mai 2015 ..... 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) ?
Sakkhho Posté(e) le 26 mai 2015 Signaler Posté(e) le 26 mai 2015 tu as probablement raison, je testerai dans mon VD
ctve Posté(e) le 26 mai 2015 Auteur Signaler Posté(e) le 26 mai 2015 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 ?
jojo Posté(e) le 26 mai 2015 Signaler Posté(e) le 26 mai 2015 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 ?
ctve Posté(e) le 26 mai 2015 Auteur Signaler Posté(e) le 26 mai 2015 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.
jojo Posté(e) le 26 mai 2015 Signaler Posté(e) le 26 mai 2015 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
ctve Posté(e) le 11 juin 2015 Auteur Signaler Posté(e) le 11 juin 2015 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" 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. 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 ???
jojo Posté(e) le 11 juin 2015 Signaler Posté(e) le 11 juin 2015 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
ctve Posté(e) le 12 juin 2015 Auteur Signaler Posté(e) le 12 juin 2015 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.
jojo Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 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 : Vérifier sur ton EcoDevice si tu ne sais pas configurer la précision des infos qu'il envoie. Voir avec JossAlf pour qu'il adapte le code du VD en disant qu'on ne garde que 2 décimales
ctve Posté(e) le 12 juin 2015 Auteur Signaler Posté(e) le 12 juin 2015 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 mais c'est hélas comme ça.
jojo Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 J'essayais juste de comprendre pour trouver une solution. quelle est la version de firmware de JossAlf ?
Moicphil Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 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
jojo Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 @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
Moicphil Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 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 guillementHello "Lua user!"> = string.format("%c%c%c", 76.117.97) -- Code caratères en ASCIILua> = string.format("%e, %E", math.pi, math.pi) -- exposant3.141593e+000, 3.141593E+000> = string.format("%f, %g", math.pi, nombre entier signé, signé, non signé de math.pi) -- virgule flottante3.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,hexa37777777634, ffffff9c, FFFFFF9C
Messages recommandés