Prise en main du KNX en php

Une page teste originale

Une page tests très originale.

Ou comment allumer une lampe depuis une page web.

Après avoir testé linknx et knxweb, via le LiveCD de Ziki, je n’ai pas trop adhéré au principe du duo linknx + knxweb.
C’est sympa, mais pas assez souple par rapport à ce que je souhaite faire avec le 1-wire et le DMX, j’ai donc le choix entre monter une usine à gaz à partir de knxweb ou  partir de zéro.
J’ai choisi de partir de zéro.

J’ai furtivement étudié le fonctionnement de linknx via la page d’example php, je prends note de ce fonctionnement xml.

En tirant un trait à linknx, je perdrai la notion de « rules », cette façon de gérer très rapidement des conditions.
A ce moment précis, je ne sais pas comment je vais faire sans.

En compilant eibnetmux, j’ai constaté qu’il embarqué un package php, en cherchant un peu, j’ai trouvé un paquet de samples :

# cd /usr/src/
# wget "http://downloads.sourceforge.net/project/eibnetmux/Sample%20client%20applications/1.7.0/eibnetmuxclientsamples-1.7.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Feibnetmux%2Ffiles%2FSample%2520client%2520applications%2F1.7.0%2F&ts=1334692571&use_mirror=freefr" -O eibnetmuxclientsamples-1.7.0.tar.gz
# tar zxvf eibnetmuxclientsamples-1.7.0.tar.gz

Je ne prends que la partie php, donc je ne compile rien.

# cd /usr/src/eibnetmuxclientsamples-1.7.0/php/
# cp *.php /var/www/

Et le fichier php comprenant les class provient de la compilation.

# cp /usr/local/eibnetmux.php /var/www/

Hum hum ! writegroup.php et readgroup.php on l’air sympa, voyons voir ça …

# php writegroup.php
Usage: writegroup.php "hostname" "group" "eis" "value" [group eis value ...]
# php writegroup.php 127.0.0.1 0/0/11 1 1

la lampe s’allume !

# php writegroup.php 127.0.0.1 0/0/11 1 0

la lampe s’éteint.

0/0/11 étant un groupe d’adresse correspondant à on/off d’une lampe relié sur un TXA213.

eis étant le type de format, dont les valeurs possibles sont très bien reprises dans une doc d’ABB (page 15).

J’ai repris ces 2 fichiers php pour réaliser une page de test avec des fonctions php.


<?php
include( "eibnetmux.php" );
$hostname = "127.0.0.1";

function readgroup($groupaddress,$eis) {
 global $hostname;
 $c = new eibnetmux( "php_client", $hostname, 4390 );
 $groupaddress = new KNXgroup( $groupaddress, $eis );
 $value = $groupaddress->read( $c );
 return $value;
 $c->close();
}

function readgroupboolean($groupaddress) {
 global $hostname;
 $c = new eibnetmux( "php_client", $hostname, 4390 );
 $groupaddress = new KNXgroup( $groupaddress,1);
 $value = $groupaddress->read( $c );
 //return $value;
 if ($value == 1) return true;
 elseif ($value == 0) return false;
 $c->close();
}

function writegroup($groupaddress,$eis,$value) {
 global $hostname;
 $c = new eibnetmux( "php_client", $hostname, 4390 );
 $groupaddress = new KNXgroup( $groupaddress, $eis );
 $r = $groupaddress->write( $c, $value);
 return true;
 //$value = $groupaddress->read( $c );
 //print "New value of $argv[$idx]: $value\n";
 $c->close();
}

if($_POST['action'] == 'on') writegroup($_POST['groupaddress'],1,1);
if($_POST['action'] == 'off') writegroup($_POST['groupaddress'],1,0);

?>
La lampe est <?php echo (readgroupboolean('0/0/11'))?"allumée":"eteinte"; ?><br />
<br />
<form action="#" method="POST">
<input type="hidden" readonly="readonly" name="action" value="<?php echo (readgroupboolean('0/0/11'))?"off":"on"; ?>" />
<input type="hidden" readonly="readonly" name="groupaddress" value="0/0/11" />
<input type="submit" name="toggle" value="<?php echo (readgroupboolean('0/0/11'))?"Eteindre":"Allumer"; ?> la lampe" />
</form>

Je voyais cette montagne plus impressionnante qu’elle l’est réellement, maintenant que j’ai franchi ce cap, je suis davantage d’attaque pour des fonctions avancées du KNX à travers PHP.
Affaire à suivre !

Ce billet est posté dans Debian, KNX, Web. Mettre en favoris le permalien.

5 réponses à Prise en main du KNX en php

  1. Jérôme says:

    Voilà un article qui m’intéresse grandement. Merci à toi pour ces infos. Ajouter un peu de domestique fait maison, à travers du PHP est un projet que j’ai en tête depuis bien longtemps. Surtout pour la mise en place d’une radio automatique et programmable. Je vais donc suivre avec attention la suite des aventures 🙂

    Merci !

  2. Jérémy says:

    Salut,

    Petite question au sujet des deux derniers post. Qu’elle est l’utilité de eibnetmux ? Je ne vois pas ce qu’il fait de plus par rapport à eibd ?

    Tu peux configurer eibd en mode routing pour transformer ta passerelle unicast en multicast (afin de pouvoir connecter ETS en même temps que d’autres clients, type linknx ou tes propres script php).
    Tu peux également facilement communiquer avec eibd en PHP (une library est également fournie dans les sources d’eibd).

    Du coup, eibnetmux me semble être une surcouche inutile…

    Bonne continuation !

  3. Lionel says:

    Salut,

    Merci pour ton feedback.

    J’ai utilisé eibnetmux parce que je n’ai pas réussi à utiliser eibd avec ETS + groupswrite simultanément, ETS3 ne parvenait pas à télécharger un programme malgré la détection de l’interface, pourtant, pas de problème du coté de groupswrite et ses copains terminal.
    De plus, jusqu’à ce que tu me le dises, je n’avais absolument pas connaissance de la librairie php d’eibd.

    En cherchant une solution à mon problème de connexion ETS + groupswrite, je suis tombé sur eibnetmux, et je me suis bêtement dis que d’après son descriptif sur sa page web, cela soit normal que je rencontre des problèmes avec ETS + groupswrite & co ; en rajoutant à ça la librairie php, c’est le pain béni !

    Dans la rédaction de l’article, j’admet que c’est assez confus, ça passe d’eibd à eibnetmux sans expliquer le pourquoi du comment, surtout que c’est l’un OU l’autre, il ne s’agit pas de surcouche mais d’une alternative. La rédaction du billet à suivi le fil des mes découvertes et des mes problèmes sans les détails, je corrigerais ça 🙂

    Fort possible que je me soit planté avec eibd pour le faire fonctionner en même temps avec d’autres clients, mais dans l’immédiat, la problématique ne s’est pas posée avec eibnetmux, je referais des essais avec eibd.

    Merci encore pour ton feedback.
    J’attaque le DMX, j’espère pouvoir faire de la lumière via du php d’ici ce week-end.

  4. Morgan Sébastien says:

    Bonjour,
    Bon boulot pour cette partie. J’ai eu pas mal de problème d’installation du à l’utilisation d’une machine virtuelle… Mais en me débrouillant j’ai réussi à faire cette installation. Par contre en utilisant php, lorsque j’allume une lumière elle clignote une fois avant de rester fixe et lorsque j’en eteinds certaine, elle clignote aussi puis s’éteignent mais pour d’autres elles restent allumée. Avez vous rencontré ce type de problème?

    Cordialement

  5. Lionel says:

    Bonjour,

    Je n’ai pas rencontré ce type de problème.

    Cela viendrai peut-être d’un double ordre envoyé au bus ? Il faudrait débugger la partie PHP pour voir où est le problème.
    Et le soucis n’apparait pas en utilisant la commande « groupswrite » ?
    C’est étrange comme problème ! Au chaud, je n’ai pas d’autres idées.
    J’y réfléchis.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *