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 :
# 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.
# cp *.php /var/www/
Et le fichier php comprenant les class provient de la compilation.
Hum hum ! writegroup.php et readgroup.php on l’air sympa, voyons voir ça …
Usage: writegroup.php "hostname" "group" "eis" "value" [group eis value ...]
la lampe s’allume !
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 !
5 réponses à Prise en main du KNX en php