Lecture de GA et affichage décimal en PHP - Version imprimable +- Forum KNX francophone / English KNX forum (https://www.knx-fr.com) +-- Forum : Français (https://www.knx-fr.com/forumdisplay.php?fid=3) +--- Forum : Logiciels libres (linknx, knxweb, pKNyX,...) (https://www.knx-fr.com/forumdisplay.php?fid=10) +--- Sujet : Lecture de GA et affichage décimal en PHP (/showthread.php?tid=1128) Pages :
1
2
|
Lecture de GA et affichage décimal en PHP - marc.assin - 17/05/2011 Bonjour, J'essaye d'afficher une lecture de GA (température) en PHP. J'ai retrouvé le post de Roby & Pascal à propos de la conversion: https://groups.google.com/group/domotique-eib/browse_frm/thread/55b0b95a221e00aa/7255e4bb309d38d7?hl=fr&lnk=gst&q=conversion#7255e4bb309d38d7 Je me demande si quelqu'un a déjà une routine toute faite en PHP ? (dans le sens ETS->décimal) Merci d'avance. Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 17/05/2011 Bonjour, > J'essaye d'afficher une lecture de GA (température) en PHP. > J'ai retrouvé le post de Roby & Pascal à propos de la conversion: > https://groups.google.com/group/domotique-eib/browse_frm/thread/55b0b95a221e00aa/7255e4bb309d38d7?hl=fr&lnk=gst&q=conversion#7255e4bb309d38d7 > > Je me demande si quelqu'un a déjà une routine toute faite en PHP ? > (dans le sens ETS->décimal) ça te va si c'est en javascript ? il est possible "d'extraire" le code de la page : http://www.tapko.de/Tools.31.0.html @+ Anthony. Lecture de GA et affichage décimal en PHP - marc.assin - 17/05/2011 On 17 mai, 16:30, "Anthony PENHARD" <a.penh...@gmail.com> wrote: > a te va si c'est en javascript ? Mes talents de programmeur sont très limités. Merci quand même > il est possible "d'extraire" le code de la page :http://www.tapko.de/Tools.31.0.html J'avais vu la page avec l'outil, mais pas vu qu'on pouvait extraire le code. Entretemps, j'ai trouvé une routine PHP sur le forum allemand.... je teste Merci Lecture de GA et affichage décimal en PHP - marc.assin - 18/05/2011 > Entretemps, j'ai trouvé une routine PHP sur le forum allemand... Je bloque sur un problème incompréhensible. J'utilise la fonction GroupRead pour lire le contenu d'un GA, çà fonctionne pour d'aures applications (également en PHP) La fonction de conversion fonctionne aussi. Lorsque je force une valeur à l'entrée i.e. 1902 il me sort bien 20,64° Les 2 ensembles donnent des résultats irrationnels. eibd tourne sur un NAS QNAP avec PHP5, il n'y a pas lieu de les soupçonner car d'autres appli fonctionnent (affichage KNX sur l'écran tactile d'un tf Cisco Je joins un extrait du code $value = GroupRead("127.0.0.1","0/6/38"); .... $eis5 = hexdec($value); $wert = ($eis5 & 0x07ff); if (($eis5 & 0x08000) != 0) { $wert = $wert | 0xfffff800; $wert = $wert *-1; } $wert = $wert << (($eis5 & 0x07800) >> 11); if (($eis5 & 0x08000) != 0) { $wert = $wert * -1; } $val = $wert/100; ...... $string = "Temp: " . $val . "°C"; Si quelqu'un à une idée concrète, je suis preneur Lecture de GA et affichage décimal en PHP - marc.assin - 18/05/2011 > Entretemps, j'ai trouvé une routine PHP sur le forum allemand... Il se pourrais que ce ne soit pas la bonne fonction de conversion. On m'a tuyauté vers les librairies eibd client, effectivement, il y a 2 fonctions de conversion J'ai essayé function f2_decode($val) { $exp = ($val[0] & 0x78) >> 3; $sign = ($val[0] & 0x80) >> 7; $mant = ($val[0] & 0x07) << 8 | $val[1]; if ($sign) $sign = -1 << 11; else $sign = 0; $val = ($mant | $sign) * pow (2, $exp) * 0.01; return $val; } qui ne donne pas le bon résultat et function f2_encode($val) { if($val<0) { $sign = 1; $val = - $val; } else $sign = 0; $val = $val * 100.0; $exp = 0; while ($val > 2047) { $exp ++; $val = $val / 2; } if ($sign) $val = - $val; $val = $val & 0x7ff; return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07), ($val& 0xff)); } qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou bien je ne sais pas m'en servir avec cet array Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 18/05/2011 essaye : print_r( f2_encode($val) ); pour voir ce que cela te donne il doit y avoir 2 valeurs je pense ou alors $tab = f2_encode($val); echo "valeur1 $tab[0] valeur2 $tab[1] "; Le 18 mai 2011 20:43, marc.assin <raymond@warichet.com> a écrit : > > Entretemps, j'ai trouvé une routine PHP sur le forum allemand... > Il se pourrais que ce ne soit pas la bonne fonction de conversion. > On m'a tuyauté vers les librairies eibd client, effectivement, il y a > 2 fonctions de conversion > J'ai essayé > function f2_decode($val) > { > $exp = ($val[0] & 0x78) >> 3; > $sign = ($val[0] & 0x80) >> 7; > $mant = ($val[0] & 0x07) << 8 | $val[1]; > if ($sign) > $sign = -1 << 11; > else > $sign = 0; > $val = ($mant | $sign) * pow (2, $exp) * 0.01; > return $val; > } > qui ne donne pas le bon résultat et > function f2_encode($val) > { > if($val<0) > { > $sign = 1; > $val = - $val; > } > else > $sign = 0; > $val = $val * 100.0; > $exp = 0; > while ($val > 2047) > { > $exp ++; > $val = $val / 2; > } > if ($sign) > $val = - $val; > $val = $val & 0x7ff; > > return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07), > ($val& 0xff)); > } > qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou > bien je ne sais pas m'en servir avec cet array Lecture de GA et affichage décimal en PHP - jef2000 - 18/05/2011 Salut Raymond, La fonction f2_decode effectue la bonne conversion. Je pense que le problème se trouve dans ce que tu lui fournis. A première vue, cette fonction s'attend à recevoir en entrée un Array de 2 valeurs correspondant aux 2 octets de données transmis sur le bus. Essaie d'afficher ce que tu fournis à la fonction hexdec et ce qu'elle retourne, tu trouveras peut-être quelque chose d'intéressant. En fait, le premier example que tu donnais me paraît bon, surtout que tu dis que ça fonctionne avec "1902". Es-tu certain que la fonction GroupRead retourne bien une chaine de caractères? Jean-François On 18 mai, 20:43, "marc.assin" <raym...@warichet.com> wrote: > > Entretemps, j'ai trouvé une routine PHP sur le forum allemand... > > Il se pourrais que ce ne soit pas la bonne fonction de conversion. > On m'a tuyauté vers les librairies eibd client, effectivement, il y a > 2 fonctions de conversion > J'ai essayé > function f2_decode($val) > { > $exp = ($val[0] & 0x78) >> 3; > $sign = ($val[0] & 0x80) >> 7; > $mant = ($val[0] & 0x07) << 8 | $val[1]; > if ($sign) > $sign = -1 << 11; > else > $sign = 0; > $val = ($mant | $sign) * pow (2, $exp) * 0.01; > return $val;} > > qui ne donne pas le bon résultat et > function f2_encode($val) > { > if($val<0) > { > $sign = 1; > $val = - $val; > } > else > $sign = 0; > $val = $val * 100.0; > $exp = 0; > while ($val > 2047) > { > $exp ++; > $val = $val / 2; > } > if ($sign) > $val = - $val; > $val = $val & 0x7ff; > > return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07), > ($val& 0xff));} > > qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou > bien je ne sais pas m'en servir avec cet array Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 @Anthony > essaye : print_r( f2_encode($val) ); OK, merci pour le tuyau, je vais essayer @Jean-François > La fonction f2_decode effectue la bonne conversion. OK > Je pense que le problème se trouve dans ce que tu lui fournis. Je suis (péniblement) arrivé à la même conclusion. >A première vue, cette fonction s'attend à recevoir en entrée un Array de 2 valeurs correspondant aux 2 octets de données transmis sur le bus. OK >Es-tu certain que la fonction GroupRead retourne bien une chaine de caractères? Non, je n'en suis par sûr, en fait je patauge lamentablement. Mis à part GroupRead, je ne vois pas d'autre fonction de lecture de GA dans eibd. Là aussi, il y a peut-être erreur, en ce sens que GroupRead fourni bien la bonne valeur, mais pas forcément au format escompté (je n'ai rien vu dans la doc). Je crois que j'ai fait une erreur depuis le départ. Je me suis basé sur ETS et Bus Monitor, lorsqu'on lance un Read sur le GA concerné, ETS montre 2 valeurs: la valeur Hex et la valeur décimale correspondante. Lorsque je force cette valeur Hex dans la conversion, elle donne bien le bon résultat, mais peut-être que tout le raisonnement est à côté de la plaque Merci pour votre aide précieuse Lecture de GA et affichage décimal en PHP - Charles Delorme - 19/05/2011 > Lorsque je force cette valeur Hex dans la conversion, elle donne bien > le bon résultat, mais peut-être que tout le raisonnement est à côté de > la plaque Alors commence par faire un print_r de ce que te renvoi GroupRead("127.0.0.1","0/6/38"). Après tout, c'est là le point de départ :-) Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 On 19 mai, 09:14, Charles Delorme <charles.delo...@suricat.net> wrote: > Alors commence par faire un print_r de ce que te renvoi > GroupRead("127.0.0.1","0/6/38"). Mis à part qu'il s'agit d'une application pour téléphone Cisco où les info sont manipulées par des imagecreatetruecolor, imagecolorallocate, imagefttext et que le print_r ne marche pas tel-quel. Il faut à chaque petit test faire une nouveau script PHP Je ne cherches pas d'excuses, juste que ce n'est pas toujours simple... surtout pour un non-programmeur. Lecture de GA et affichage décimal en PHP - Charles Delorme - 19/05/2011 Le 19/05/2011 10:02, marc.assin a écrit : > On 19 mai, 09:14, Charles Delorme<charles.delo...@suricat.net> wrote: >> Alors commence par faire un print_r de ce que te renvoi >> GroupRead("127.0.0.1","0/6/38"). > Mis à part qu'il s'agit d'une application pour téléphone Cisco où les > info sont manipulées par des > imagecreatetruecolor, imagecolorallocate, imagefttext > et que le print_r ne marche pas tel-quel. > Il faut à chaque petit test faire une nouveau script PHP > Je ne cherches pas d'excuses, juste que ce n'est pas toujours > simple... surtout pour un non-programmeur. ouch.... ah oui, ok... Bon courage... Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 J'ai donc suivi vos conseils. Voici le résultat Il semblerais que f2_encode donne une info exploitable, mais comment pour GA 0/6/38 La valeur réelle dans ETS: 1905 | 20,9° print_r (5); 5 print_r(decode(5)) 0.05 print_r( f2_encode(5)) Array ( [0] => 1 [1] => 244 ) print_r( f2_decode(5)) 0 Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 Est-ce que quelqu'un ayant eibd, php et un thermostat pourrais faire un test ? J'ai déposé le fichier Test3b.php dans "Temp" Juste éditer la ligne $ga2 = "0/6/38"; pour y mettre le GA de la temp réelle du thermostat J'ai p'têt un problème d'environnement...php.ini, NAS, etc Lecture de GA et affichage décimal en PHP - Charles Delorme - 19/05/2011 Le 19/05/2011 16:51, marc.assin a écrit : > > Est-ce que quelqu'un ayant eibd, php et un thermostat pourrais faire > un test ? Oui, je peux. Ce soir pas avant, je vais essayer de ne pas oublier, sinon ce sera la semaine prochaine :-( > J'ai déposé le fichier Test3b.php dans "Temp" https://sites.google.com/site/domotiqueeib/fichiers/temp (juste pour ne pas oublier l'url) > Juste éditer la ligne > $ga2 = "0/6/38"; pour y mettre le GA de la temp réelle du thermostat > > J'ai p'têt un problème d'environnement...php.ini, NAS, etc Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 19/05/2011 tu aurais GroupRead.php quelque part ? Le 19 mai 2011 16:51, marc.assin <raymond@warichet.com> a écrit : > > Est-ce que quelqu'un ayant eibd, php et un thermostat pourrais faire > un test ? > J'ai déposé le fichier Test3b.php dans "Temp" > Juste éditer la ligne > $ga2 = "0/6/38"; pour y mettre le GA de la temp réelle du thermostat > > J'ai p'têt un problème d'environnement...php.ini, NAS, etc Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 On 19 mai, 19:06, Anthony PENHARD <a.penh...@gmail.com> wrote: > tu aurais GroupRead.php quelque part ? Ouups Je l'ai mis dans temp https://sites.google.com/site/domotiqueeib/fichiers/temp Merci Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 19/05/2011 du coup la suite il manque eibclient.php ... Le 19 mai 2011 19:11, marc.assin <raymond@warichet.com> a écrit : > On 19 mai, 19:06, Anthony PENHARD <a.penh...@gmail.com> wrote: > > tu aurais GroupRead.php quelque part ? > Ouups > Je l'ai mis dans temp > https://sites.google.com/site/domotiqueeib/fichiers/temp > > Merci Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 On 19 mai, 19:28, Anthony PENHARD <a.penh...@gmail.com> wrote: > du coup la suite il manque eibclient.php ... dans Temp :-) Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 19/05/2011 alors le résultat c'est : -print (158); 158 -print_r (158); 158 -print_r(decode(158)); 3.44 -print_r( f2_encode(158)); Array ( [0] => 31 [1] => 183 ) -print_r( f2_decode(158)); 0 et la valeur de est de "19.5" c'est une température de type "9.xxx"=EIS5 Le 19 mai 2011 19:43, marc.assin <raymond@warichet.com> a écrit : > On 19 mai, 19:28, Anthony PENHARD <a.penh...@gmail.com> wrote: > > du coup la suite il manque eibclient.php ... > dans Temp :-) Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 On 19 mai, 19:56, Anthony PENHARD <a.penh...@gmail.com> wrote: > alors le résultat c'est : > -print (158); 158 -print_r (158); 158 -print_r(decode(158)); 3.44 -print_r( > f2_encode(158)); Array ( [0] => 31 [1] => 183 ) -print_r( f2_decode(158)); 0 > et la valeur de est de "19.5" c'est une température de type "9.xxx"=EIS5 Mais ?!? on ne trouve aucune trace de 19.5 dans les output du script ?!? C'est donc le même problème que chez moi ? Merci pour le test Lecture de GA et affichage décimal en PHP - Anthony PENHARD - 19/05/2011 de rien le problème viens de GroupRead a priori parce que si j'enlève les printf dans la fonction j'ai bien la valeur 079E qui apparaît et qui correspond bien à 19.5 : -print (079E); 079E -print_r (079E); 079E -print_r(decode(079E)); 19.5 -print_r( f2_encode(079E)); Array ( [0] => 23 [1] => 183 ) -print_r( f2_decode(079E)); 0.07 a creuser ... Le 19 mai 2011 20:01, marc.assin <raymond@warichet.com> a écrit : > On 19 mai, 19:56, Anthony PENHARD <a.penh...@gmail.com> wrote: > > alors le résultat c'est : > > -print (158); 158 -print_r (158); 158 -print_r(decode(158)); 3.44 > -print_r( > > f2_encode(158)); Array ( [0] => 31 [1] => 183 ) -print_r( > f2_decode(158)); 0 > > > et la valeur de est de "19.5" c'est une température de type "9.xxx"=EIS5 > > Mais ?!? on ne trouve aucune trace de 19.5 dans les output du > script ?!? > C'est donc le même problème que chez moi ? > > Merci pour le test Lecture de GA et affichage décimal en PHP - Charles Delorme - 19/05/2011 Le 19/05/2011 20:23, Anthony PENHARD a écrit : > de rien > > le problème viens de GroupRead a priori > parce que si j'enlève les printf dans la fonction j'ai bien la valeur > 079E qui apparaît et qui correspond bien à 19.5 : > > -print (079E); 079E -print_r (079E); 079E -print_r(decode(079E)); 19.5 > -print_r( f2_encode(079E)); Array ( [0] => 23 [1] => 183 ) -print_r( > f2_decode(079E)); 0.07 Ouais, donc je fais pas le test chez moi ou tu le veux tout de meme ? Lecture de GA et affichage décimal en PHP - marc.assin - 19/05/2011 @Anthony > le problème viens de GroupRead a priori > parce que si j'enlève les printf dans la fonction j'ai bien la valeur 079E > qui apparaît et qui correspond bien à 19.5 : J'ai pas compris Dans quelle fonction as-tu enlevé le printf ? et qui fait tout marcher ? @Charles > donc je fais pas le test chez moi Je pense que ce n'est plus nécessaire. Merci Charles Lecture de GA et affichage décimal en PHP - jef2000 - 19/05/2011 Salut, Effectivement, quand on a tout le code, c'est beaucoup plus facile de trouver le problème. C'est la fonction GroupRead qui n'est pas conçue pour retourner une valeur sur 2 bytes. Comme le commentaire à la fin le laisse penser: "// return the EIB status, 0=Off, 1=On, xx-dimmer value" En remplaçant: for ($i=3; $i<=$len; $i++) /* printf ("%02X", $buf[$i]); printf ("\n"); */ $return=$buf[$i]; // $return=$return.$buf[$i]; par: if ($len == 3) $return=$buf[$i]; else $return=array_slice($buf, 3); Ca pourrait aller mieux. Ensuite tu peux passer directement le résultat de GroupRead à la fonction f2_decode. Je suppose que tu n'utilises pas la fonction GroupRead dans d'autres scripts pour lire des valeurs sur plusieurs bytes. Vu que dans l'état actuel elle ne retourne que le dernier byte et oublie purement et simplement les autres. A+ Jean-François On 19 mai, 20:53, "marc.assin" <raym...@warichet.com> wrote: > @Anthony> le problème viens de GroupRead a priori > > parce que si j'enlève les printf dans la fonction j'ai bien la valeur 079E > > qui apparaît et qui correspond bien à 19.5 : > > J'ai pas compris > Dans quelle fonction as-tu enlevé le printf ? et qui fait tout > marcher ? > > @Charles> donc je fais pas le test chez moi > > Je pense que ce n'est plus nécessaire. > Merci Charles Lecture de GA et affichage décimal en PHP - Charles Delorme - 19/05/2011 >> @Charles> donc je fais pas le test chez moi >> >> Je pense que ce n'est plus nécessaire. >> Merci Charles Avec le dev sous la main, c'est sûr :-) |