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

Laisser un commentaire

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