Installation de eibd et de eibnetmux sur Wheezy

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 :

Platine de test KNX

Platine de test KNX

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
state
-d, –daemon[=FILE] start the programm as daemon, the output will be
written to FILE, if the argument present
-D, –Discovery enable the EIBnet/IP server to answer discovery
and description requests (SEARCH, DESCRIPTION)
-e, –eibaddr=EIBADDR set our own EIB-address to EIBADDR (default
0.0.1), for drivers, which need an address
-f, –error=LEVEL set error level
-i, –listen-tcp[=PORT] listen at TCP port PORT (default 6720)
–no-tunnel-client-queuing do not assume KNXnet/IP Tunneling bus
interface can handle parallel cEMI requests
-p, –pid-file=FILE write the PID of the process to FILE
-R, –Routing enable EIBnet/IP Routing in the EIBnet/IP server
-S, –Server[=ip[:port]] starts the EIBnet/IP server part
-t, –trace=LEVEL set trace level
-T, –Tunnelling enable EIBnet/IP Tunneling in the EIBnet/IP
server
-u, –listen-local[=FILE] listen at Unix domain socket FILE (default
/tmp/eib)
-?, –help Give this help list
–usage Give a short usage message
-V, –version Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

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 …

# apt-get install build-essential
# cd /usr/src/

Et on attaque, la compilation de pthsem.

# wget http://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz
# 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 :

# cd /usr/src/
# wget "http://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fbcusdk%2F&amp;ts=1334692790&amp;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 /usr/lib/libeibclient.so.0
# 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.

# adduser --disabled-password eibd
# 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.

Schéma de principe d'eibnetmux

Schéma de principe d’eibnetmux (source: eibnetmux @ sourceforge.net)

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 :

# cd /usr/src/
# 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&amp;ts=1334692716&amp;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&amp;ts=1334739400&amp;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 :

# eibnetmux -s -t -u -e 192.168.0.8

Puis dans un autre shell :

# groupsocketlisten ip:127.0.0.1

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.

# vi /etc/init.d/eibnetmux

#! /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
# chmox +x /etc/init.d/eibnetmux
# insserv eibnetmux

Conclusion

A ce stade nous avons une plateforme optimale pour la programmation et des tests avancés.

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

28 réponses à Installation de eibd et de eibnetmux sur Wheezy

  1. Pingback: Une interface web pour contrôler le bus KNX sur Raspberry Pi | Domolio, la domotique et pas que…

Répondre à Alain BROYE Annuler la réponse

Votre adresse e-mail ne sera pas publiée.