19/05/2011, 21:11:26
Salut,
jean-françois tu a été plus rapide ... je cherchais une solution ...
j'ai testé la modif que tu propose et c'est plutôt :
if ($len == 3)
$return=$buf[$i];
else
$return=array_slice($buf, 2);
dans mon test $len vaut 4
et $buf vaut Array ( [1] => 0 [2] => 64 [3] => 7 [4] => 158 )
et ensuite avec f2_decode on a bien le bon résultat
PS : j'ai toujours un message "*Notice*: Undefined variable: socket in *
/var/www/Test/eibclient.php* on line *251"
*c'est lors de l'appel de $con->EIBClose();
mais pas "bloquant"
merci
@+
Anthony
Le 19 mai 2011 21:32, jef2000 <jef2000@ouaye.net> a écrit :
> 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
>
jean-françois tu a été plus rapide ... je cherchais une solution ...
j'ai testé la modif que tu propose et c'est plutôt :
if ($len == 3)
$return=$buf[$i];
else
$return=array_slice($buf, 2);
dans mon test $len vaut 4
et $buf vaut Array ( [1] => 0 [2] => 64 [3] => 7 [4] => 158 )
et ensuite avec f2_decode on a bien le bon résultat
PS : j'ai toujours un message "*Notice*: Undefined variable: socket in *
/var/www/Test/eibclient.php* on line *251"
*c'est lors de l'appel de $con->EIBClose();
mais pas "bloquant"
merci
@+
Anthony
Le 19 mai 2011 21:32, jef2000 <jef2000@ouaye.net> a écrit :
> 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
>