Enfin un plongeon dans le vif du sujet !
Câblage de la platine
Il est temps de câbler et des profiter des modules achetés (cf article premiers pas en KNX).
Voici ma platine de test :
Bordélique sans rail DIN !
J’utilise du câble RJ45 rigide pour mon bus KNX.
EIBD/EIBNETMUX me servira à communiquer avec mon tableau électrique par l’intermédiaire de mon routeur Siemens IP/KNX .
L’ensemble de mon installation est fait sous Debian Wheezy.
Eibd ou Eibnetmux ?
Pourquoi deux paquets pour le même résultat ? Quelles différences ?
Lorsque eibd a été développé, il n’était pas très stable, c’est à ce moment là, qu’une version parallèle a été développée : eibnetmux.
Eibnetmux n’est pas une surcouche d’eibd, ce sont deux paquets distinct, c’est l’un ou l’autre.
Il y’a différence sur la gestion du tunneling & routing, ces notions ont quasi disparu dans eibnetmux.
Les 2 paquets proposent une utilisation php.
Eibd nécessite d’être exécute avec un utilisateur non root.
Voici un –help des deux outils.
eibd | eibnetmux |
Usage: eibd [OPTION…] URL eibd — a commonication stack for EIB (C) 2005-2011 Martin Koegler <mkoegler@auto.tuwien.ac.at> supported URLs are: ft12:/dev/ttySx ipt:router-ip[:dest-port[:src-port[:nat-ip[:data-port]]]]] iptn:router-ip[:dest-port[:src-port]] usb:[bus[:device[:config[:interface]]]]ft12 connects over a serial line without any driver with the FT1.2 Protocol to a BCU 2ipt connects with the EIBnet/IP Tunneling protocol over an EIBnet/IP gateway. The gateway must be so configured, that it routes the necessary addressesiptn connects with the EIBnet/IP Tunneling protocol over an EIBnet/IP gateway using the NAT mode usb connects over a KNX USB interface -c, –GroupCache enable caching of group communication network Mandatory or optional arguments to long options are also mandatory or optional |
Usage: eibnetmux [options] hostname[:port] where: hostname[:port] defines remote eibnet/ip tunneling server with default port of 3671options:-s –eib_server[=ip:port] activate eibnet/ip server default: no, port=3671 -t –tcp_server[=ip:port] activate tcp server default: no, port=4390 -u –unix_server[=path] activate unix socket server default: no, path=/tmp/eibnetmux -e –eibd_server[=ip:port] activate eibd server default: no, port=$$$ -l –log_level=level set log level default: 0 (0=none, 1=info, 2=verbose, 4=warning, 8=error, 16=critical) (32=fatal 64=user 128=debug 256=trace client 512=trace server) (1024=trace socketserver 2048=trace EIBD 4096=memory) -L –log_dest=udp:host:port send log to udp receiver host @ port -L –log_dest=file:filename write log to file -L –log_dest=syslog:facility send log to syslog using facility -r –ring_level=level set levels logged to ring buffer default: 128 -R –ring_size=kilobytes set size of debug ring buffer default: 32 -d –daemon run as daemon default: no -i –user=username run process as user default: – -g –group=groupname and group default: – -p –pidfile=file file to write pid to default: – -S –security=file file with security restrictions default: – -A –address=ip-address fixed IP address to use default: – -T –testmode run in testmode default: no |
Mon choix s’est porté sur eibnetmux par sa simplicité, son fonctionnement sans problèmes, sa maintenance.
J’ai par ailleurs rencontré des problèmes pour faire fonctionner eibd avec ETS. Problème de tuneling/routing ? probablement, mais le problème ne s’est pas posé avec eibnetmux.
Installation des composants nécessaires
Toujours sur Debian Wheezy (kernel 3.2.0).
Que ça soit eibd ou eibnetmux, il est nécessaire d’installer pthsem, il s’agit d’une libraire multithread dont je n’ai pas trop compris l’utilité, mais nécessaire, donc …
# cd /usr/src/
Et on attaque, la compilation de pthsem.
# tar zxvf pthsem_2.0.8.tar.gz
# cd pthsem-2.0.8/
# ./configure
# make
# make install
Voila pour le strict nécessaire.
Installation d’eibd
Puis on s’attaque à bcusdk qui contient EIBD :
# wget "http://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fbcusdk%2F&ts=1334692790&use_mirror=freefr" -O bcusdk_0.0.5.tar.gz
# tar -zxvf bcusdk_0.0.5.tar.gz
# cd bcusdk-0.0.5/
# export LD_LIBRARY_PATH=/usr/local/lib
# ./configure --enable-onlyeibd --enable-eibnetiptunnel --enable-usb --enable-eibnetipserver --enable-ft12
Le fait de forcer LD_LIBRARY_PATH dans /usr/local/lib induit que certaines librairies d’eibd se trouvent à tort dans ce répertoire.
# ln -s /usr/local/lib/libeibclient.so.0 /lib/libeibclient.so.0
Ce qui permet à groupswrite de trouver ses librairies.
groupswrite est l’outil permettant d’envoyer des données sur le bus KNX.
Test de connexion
D’après mon serveur DHCP, je vois que le routeur IP/KNX a pris l’ip 192.168.0.8.
# su eibd
# eibd --trace=1 -u ipt:192.168.0.8:3671
W00000001: EIBD should not run as root
Layer 0(0907EB30,4F897E60) Open
Layer 0(0907EB30,4F897E60) Openend
Layer 0(0907EB30,4F897E60) Send(026): 06 10 02 05 00 1A 08 01 C0 A8 00 32 0E 58 08 01 C0 A8 00 32 0E 58 04 04 02 00
Layer 0(0907EB30,4F897E60) Recv(020): 06 10 02 06 00 14 44 00 08 01 C0 A8 00 08 0E 57 04 04 02 BD
Connecté ! Youpi !
Installation de eibnetmux
Le soucis avec le routeur Siemens N146 5WG1 146-1AB01 tout comme le N148/21, c’est qu’il n’est capable de communiquer qu’avec un seul partenaire.
Je ne peux pas programmer, tester et utiliser en même temps, car ce module est neuneu semblable à une utilisation en unicast.
La solution consiste à utiliser eibnetmux qui va router l’ensemble des connexions vers le routeur Siemens.
Coté programmation, l’utilisation eibnetmux implique l’utilisation d’ETS v3.
A terme, mon routeur Siemens IP/KNX sera invisible.
Ce schéma est clair, c’est LA solution à adopter.
Coup de chance, la version 2.0.0 de eibnetmux est sortie depuis moins de 24 heures à la rédaction de ce billet.
Il faut répondre aux dépendances de eibnetmux, toujours sous Debian Wheezy :
# wget "http://downloads.sourceforge.net/project/zlogger/zlogger/1.5.0/zlogger-1.5.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fzlogger%2F&ts=1334692716&use_mirror=freefr" -O zlogger-1.5.0.tar.bz2
# tar xfv zlogger-1.5.0.tar.bz2
# cd zlogger-1.5.0
# ./configure --with-plugins
# make
# make install
# apt-get install libpth20 libpth-dev libpolarssl0 pkg-config
# cd /usr/src/
# wget "http://downloads.sourceforge.net/project/eibnetmux/eibnetmux/2.0.1/eibnetmux-2.0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Feibnetmux%2Ffiles%2Feibnetmux%2F2.0.1%2F&ts=1334739400&use_mirror=netcologne" -O eibnetmux-2.0.1.tar.gz
# tar zxvf eibnetmux-2.0.1.tar.gz
# cd eibnetmux-2.0.1
# ./configure --enable-php --with-phpdoc
# make
# make install
Et voila !
Je compile avec la prise en charge php, très important, j’y reviendrai plus tard.
Mon routeur IP/KNX limité à une connexion est devenu ouvert à toutes les connexions.
Pour le tester on lance eibnetmux :
Puis dans un autre shell :
Ou bien une connexion ETS, smartphone, etc … autant qu’on veut !
Je rappele juste que l’utilisation eibnetmux implique l’utilisation d’ETS3.
J’ai crée un petit script d’init pour lancer eibnetmux au démarrage.
L’adresse IP 192.168.0.8 est à adapter bien sur.
#! /bin/sh ### BEGIN INIT INFO # Provides: eibd # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start eibd service at the end of boot # Description: This services is for communications with knx/eib. ### END INIT INFO # by Lionel @ domolio.fr PATH=/sbin:/usr/sbin:/bin:/usr/bin NAME=eibnetmux DAEMON=/usr/local/bin/eibnetmux DAEMON_ARGS="-s -t -u -e -d --pidfile=/var/run/eibnetmux.pid 192.168.0.8" PIDFILE=/var/run/eibnetmux.pid # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions if [ ! -x $DAEMON ]; then echo "eibnetmux appears to be uninstalled." fi # # Function that starts the daemon/service # do_start() { echo -n "Starting eibdnetmux" /usr/local/bin/eibnetmux $DAEMON_ARGS echo " done" } do_stop() { echo "Stoping eibdnetmux" PID=`cat $PIDFILE` kill $PID &> /dev/null echo "done" } # # Function that stops the daemon/service # case "$1" in start) do_start ;; stop) do_stop ;; restart) do_stop sleep 1 do_start ;; status) pid=$(pidofproc -p $PIDFILE $DAEMON) ret=$? pid=${pid% } # pidofproc() supplies a trailing space, strip it if [ $ret -eq 0 ]; then echo "eibdnetmux is running (PID: $pid)" exit 0 elif [ $ret -eq 1 ] || [ $ret -eq 2 ]; then echo "eibdnetmux is dead, although $PIDFILE exists." exit 1 elif [ $ret -eq 3 ]; then echo "eibdnetmux is not running." exit 3 fi echo "sais pas" ;; *) echo "usage: $0 {start|stop|restart|status}" exit 1 esac
# insserv eibnetmux
Conclusion
A ce stade nous avons une plateforme optimale pour la programmation et des tests avancés.
Pingback: Une interface web pour contrôler le bus KNX sur Raspberry Pi | Domolio, la domotique et pas que…