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/domotiqu...bb309d38d7
Je me demande si quelqu'un a déjà une routine toute faite en PHP ? 
(dans le sens ETS->décimal)
 
Merci d'avance.
	  
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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/domotiqu...bb309d38d7
> 
> 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.
	  
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
		> 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
	 
	
	
	
		
	 
 
 
	
	
		> 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
	 
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
		@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
	 
	
	
	
		
	 
 
 
	
	
			Charles Delorme  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		> 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 :-)
	 
	
	
	
		
	 
 
 
	
	
		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.
	 
	
	
	
		
	 
 
 
	
	
			Charles Delorme  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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...
	 
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
			Charles Delorme  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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/domotiquee...hiers/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
	  
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
		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/domotiquee...hiers/temp
Merci
	  
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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/domotiquee...hiers/temp
> 
> Merci
	  
	
	
	
		
	 
 
 
	
	
		On 19 mai, 19:28, Anthony PENHARD <a.penh...@gmail.com> wrote: 
> du coup la suite il manque eibclient.php ... 
dans Temp :-)
	 
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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 :-)
	 
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
			Anthony PENHARD  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
			Charles Delorme  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		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 ?
	 
	
	
	
		
	 
 
 
	
	
		@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
	 
	
	
	
		
	 
 
 
	
	
		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
	 
	
	
	
		
	 
 
 
	
	
			Charles Delorme  
			
				Unregistered 
				
				
			
	 
	
		
 
	 
 
	
	
		>> @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 :-)
	 
	
	
	
		
	 
 
 
	 
 |