Difference between revisions of "Install EIB eibd"

From xPL
Jump to: navigation, search
(Install eibd)
(Install knx)
 
(32 intermediate revisions by one user not shown)
Line 1: Line 1:
The EIB / KNX bus can be accessed via the [https://www.auto.tuwien.ac.at/~mkoegler/index.php/eibd eibd daemon].
+
The EIB / KNX bus can be accessed via the [https://github.com/knxd/knxd/wiki knxd daemon].
The original distribution at [https://www.auto.tuwien.ac.at/~mkoegler/ TU Wien] is no longer maintained.
+
The work has been taken over on [http://sourceforge.net/projects/bcusdk/ SourceForge].
+
  
 
Before all, make sure you have installed an [[install xpl hub|xPL hub]] and a [[Install_BeagleBone#Control_user|control user]].
 
Before all, make sure you have installed an [[install xpl hub|xPL hub]] and a [[Install_BeagleBone#Control_user|control user]].
  
= Install eibd =
+
= Install knx =
  
Note: to my experience, '''this works on x86 machines, but not on armhf boards'''.
+
Install [https://github.com/knxd/knxd knxd]:
 +
apt install knxd
 +
apt install knxd-tools
  
Copy the [https://www.auto.tuwien.ac.at/~mkoegler/index.php/eibdeb PGP public key] to a local file <code>eibPgp.key</code> on your computer.
+
Start the daemon:
Add it to the list of trusted keys:
+
su
+
apt-key add <i>path-to</i>/eibPgp.key
+
 
+
Add the repository to the debian package maintenance system: edit <code>/etc/apt/sources.list</code> and add the lines:
+
## EIB
+
deb http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
+
deb-src http://www.auto.tuwien.ac.at/~mkoegler/debian eib main
+
 
+
Install the package:
+
apt-get update
+
apt-get install bcusdk
+
 
+
On the EIB side, the IP Router should be configured as a bus coupler (address nn.nn.0) and be provided a fixed IP address.
+
In the following description, the address is <code> 192.168.1.204 </code>.
+
 
+
Test it: start the daemon in a terminal window:
+
 
  su control
 
  su control
  eibd -S -D -i -d ipt:192.168.1.204
+
  knxd -b ipt:192.168.1.204
  
Monitor the traffic:
+
List commands:
  groupsocketlisten ip:localhost
+
  knxtool list
  
Pushing on an EIB button should be reported in the last terminal window.
+
Perform a write:
 +
knxtool on ip:localhost 1/1/1
 +
knxtool off ip:localhost 1/1/1
 +
or:
 +
knxtool groupswrite ip:localhost 1/1/1 1
 +
knxtool groupswrite ip:localhost 1/1/1 0
  
In a 3rd terminal window, light-on a bulb:
+
Listen to the KNX telegrams:
  su control
+
  knxtool vbusmonitor1time ip:localhost
groupswrite ip:localhost 1/1/1 1
+
^C
 +
As to my understanding, the <code>busmonitor</code> variants work with filters to be defined
 +
whilst the <code>vbusmonitor</code> variants show all messages.
 +
Also, the <code>groupsocketlisten</code> command allows compatibility with the original <code>eibd</code> daemon.
  
Stop the daemon:
+
Stop the service:
  killall eibd
+
  pkill knxd
 
+
  ps ax | grep knxd | grep -v grep
----
+
 
+
Install the necessary packages:
+
su
+
cd /tmp
+
wget https://heanet.dl.sourceforge.net/project/bcusdk/pthsem/pthsem_2.0.8.tar.gz
+
tar -xvf pthsem_*.tar.gz
+
wget https://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz
+
tar -xvf bcusdk_*.tar.gz
+
 
+
Install the packages:
+
cd pthsem*
+
./configure
+
make
+
make install
+
cd ../bcusdk*
+
export LD_LIBRARY_PATH=/usr/local/lib
+
./configure --without-pth-test --with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas \
+
--enable-onlyeibd --enable-eibnetip --enable-eibnetiptunnel --enable-eibnetipserver --enable-groupcache
+
make
+
make install
+
echo "/usr/local/lib" > /etc/ld.so.conf.d/bcusdk.conf
+
ldconfig
+
touch /var/log/eibd.log
+
chown control:users /var/log/eibd.log
+
 
+
Test the daemon:
+
su control
+
eibd -D -S -T -i --eibaddr=0.0.1 --daemon=/var/log/eibd.log --no-tunnel-client-queuing ipt:192.168.1.204
+
eibd -S -D -i -d ipt:192.168.1.204
+
  ps ax | grep -i eib
+
groupsocketlisten ip:localhost
+
pkill eibd
+
ps ax | grep -i eib
+
  
 
= Install xPL EIB bridge =
 
= Install xPL EIB bridge =
  
Download the [http://www.dspc.ch/xPL/Downloads/xpl-eib-eibdWrite.pl eibd write] and [http://www.dspc.ch/xPL/Downloads/xpl-eib-eibdRead.pl eibd read] scripts.
+
Download the [http://www.dspc.ch/xPL/Downloads/xpl-knxWrite.pl EIB write] and [http://www.dspc.ch/xPL/Downloads/xpl-knxdRead.pl EIB read] scripts:
 
+
Move the script to xPL scripts directory:
+
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
  mv xpl-eib-eibdWrite.pl $SCRIPTS_BASE_DIR
+
  cd $SCRIPTS_BASE_DIR
  mv xpl-eib-eibdRead.pl $SCRIPTS_BASE_DIR
+
wget http://www.dspc.ch/xPL/Downloads/xpl-knxWrite.pl
  chown control:users $SCRIPTS_BASE_DIR/*.pl
+
  wget http://www.dspc.ch/xPL/Downloads/xpl-knxRead.pl
  chmod 775 $SCRIPTS_BASE_DIR/*.pl
+
  chown control:users *.pl
 +
  chmod 775 *.pl
  
 
= Test xPL EIB writer =
 
= Test xPL EIB writer =
 
The test is shown here on a Linux machine such as a [[install BeagleBone|BeagleBone]].
 
It has to be slightly adapted on Mac OS.
 
  
 
Open a first terminal window (on any machine with xPL installed) and monitor the xPL protocol:
 
Open a first terminal window (on any machine with xPL installed) and monitor the xPL protocol:
Line 99: Line 52:
 
If the <code>eibd</code> daemon isn't running, launch it in a second window:
 
If the <code>eibd</code> daemon isn't running, launch it in a second window:
 
  su control
 
  su control
  eibd -S -D -i -d ipt:192.168.1.204
+
  knxd -u /tmp/eib -b ipt:192.168.1.204
 
+
Then launch the <code>eibd</code> monitor:
+
groupsocketlisten ip:localhost
+
  
 
In another terminal window, start the xPL EIB writer:
 
In another terminal window, start the xPL EIB writer:
 
  su control
 
  su control
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
  $SCRIPTS_BASE_DIR/xpl-eib-eibdWrite.pl -v -n home
+
  $SCRIPTS_BASE_DIR/xpl-knxWrite.pl -v -n home
  
 
Open yet another terminal and send a message to the EIB tunnelling server:
 
Open yet another terminal and send a message to the EIB tunnelling server:
Line 115: Line 65:
  
 
This should turn on EIB device <code>1/1/1</code>.
 
This should turn on EIB device <code>1/1/1</code>.
The <code>groupsocketlisten</code> window should show the <code>eibd</code> write command.
+
The <code>groupsocketlisten</code> window should show the <code>knxd</code> write command.
 +
 
 +
If no more testing is wanted, stop the EIB daemon:
 +
pkill knxd
 +
ps ax | grep knxd | grep -v grep
  
 
= Test xPL EIB reader =
 
= Test xPL EIB reader =
Line 125: Line 79:
 
If the <code>eibd</code> daemon isn't running, launch it in a second window:
 
If the <code>eibd</code> daemon isn't running, launch it in a second window:
 
  su control
 
  su control
  eibd -S -D -i -d ipt:192.168.1.204
+
  knxd -u /tmp/eib -b ipt:192.168.1.204
  
 
Then start the xPL EIB reader:
 
Then start the xPL EIB reader:
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
 
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
  groupsocketlisten ip:localhost | $SCRIPTS_BASE_DIR/xpl-eib-eibdRead.pl -v -n home
+
  knxtool groupsocketlisten ip:localhost | $SCRIPTS_BASE_DIR/xpl-knxRead.pl -v -n home
  
Push on an EIB button or send a message to the EIB tunnelling server:
+
Push on an EIB button or send a message to the EIB tunnelling server in a 3rd terminal window:
 
  su control
 
  su control
  SCRIPTS_BASE_DIR=/home/control/Documents/Controls
+
  knxtool groupswrite ip:localhost 1/1/1 1
  $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-eib.home -c eib.basic group='1/1/1' data=0x01
+
  knxtool groupswrite ip:localhost 1/1/1 0
  
 
The EIB activity should appear in the <code>xpl-monitor.pl</code> window.
 
The EIB activity should appear in the <code>xpl-monitor.pl</code> window.
 +
 +
Stop the EIB daemon:
 +
pkill knxd
 +
ps ax | grep knxd | grep -v grep
  
 
= Launch the xPL EIB interface at startup =
 
= Launch the xPL EIB interface at startup =
Line 143: Line 101:
 
The EIB reader is launched as a <code>pre-start script</code>.
 
The EIB reader is launched as a <code>pre-start script</code>.
  
== Ubuntu ==
+
== Debian with SystemD ==
 +
 
 +
On Debian with [https://wiki.debian.org/systemd systemd] (such as [https://www.raspbian.org/ Raspbian]
 +
or [https://www.ubuntu.com/ Ubuntu]), the scripts can be defined as services.
 +
 
 +
Edit <code>/lib/systemd/system/xpl-knxWrite.service</code>:
 +
[Unit]
 +
Description=xPL KNX write
 +
After=xpl-hub.service knxd.service
 +
 +
[Service]
 +
Type=simple
 +
User=control
 +
Group=users
 +
ExecStart=/home/control/Documents/Controls/xpl-knxWrite.pl -n home -w 2
 +
Restart=always
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
 
 +
 
 +
Edit <code>/lib/systemd/system/xpl-knxRead.service</code>:
 +
[Unit]
 +
Description=xPL KNX read
 +
After=xpl-hub.service knxd.service
 +
 +
[Service]
 +
Type=simple
 +
User=control
 +
Group=users
 +
ExecStart=/bin/bash -c '/usr/bin/knxtool groupsocketlisten ip:localhost | /home/control/Documents/Controls/xpl-knxRead.pl -n home'
 +
Restart=always
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
 
 +
Activate the services:
 +
su
 +
systemctl enable xpl-knxWrite.service
 +
service xpl-knxWrite start
 +
systemctl enable xpl-knxRead.service
 +
service xpl-knxRead start
 +
 
 +
Reboot and check:
 +
ps aux | grep -v grep | grep -i xpl
 +
ps ax | grep -i xpl | grep -v grep | sed 's/.*\/Controls\///'
 +
systemctl list-units --type=service --state=running | grep -i knx
 +
service xpl-knx* status
 +
 
 +
== Ubuntu with Upstart ==
  
 
Edit <code>/etc/init/xpl-eib.conf</code>:
 
Edit <code>/etc/init/xpl-eib.conf</code>:
Line 157: Line 164:
 
  #
 
  #
 
  env SCRIPTS_DIR='/home/control/Documents/Controls'
 
  env SCRIPTS_DIR='/home/control/Documents/Controls'
  env EIBD_DIR='/usr/bin'
+
  env EIBD_DIR='/usr/local/bin'
  env SCRIPT_NAME='xpl-eib-eibdWrite.pl'
+
  env SCRIPT_NAME='xpl-knxWrite.pl'
 
  env PARAMETERS='-n home'
 
  env PARAMETERS='-n home'
 
   
 
   
Line 175: Line 182:
 
  pre-start script
 
  pre-start script
 
   $EIBD_DIR/eibd -S -D -i -d ipt:192.168.1.204
 
   $EIBD_DIR/eibd -S -D -i -d ipt:192.168.1.204
   $EIBD_DIR/groupsocketlisten ip:localhost | $SCRIPTS_DIR/xpl-eib-eibdRead.pl $PARAMETERS &
+
   $EIBD_DIR/groupsocketlisten ip:localhost | $SCRIPTS_DIR/xpl-knxRead.pl $PARAMETERS &
 
  end script
 
  end script
 
   
 
   
Line 182: Line 189:
 
  #
 
  #
 
  pre-stop script
 
  pre-stop script
   pkill eibd
+
   pkill knxd
 
  end script
 
  end script
 
   
 
   
Line 192: Line 199:
 
Start the device and test it:
 
Start the device and test it:
 
  su root
 
  su root
  killall eibd
+
  killall knxd
  service xpl-eibWriter start
+
  service xpl-eib start
 
   
 
   
 
  su control
 
  su control

Latest revision as of 12:48, 8 January 2022

The EIB / KNX bus can be accessed via the knxd daemon.

Before all, make sure you have installed an xPL hub and a control user.

Install knx

Install knxd:

apt install knxd
apt install knxd-tools

Start the daemon:

su control
knxd -b ipt:192.168.1.204

List commands:

knxtool list

Perform a write:

knxtool on ip:localhost 1/1/1
knxtool off ip:localhost 1/1/1

or:

knxtool groupswrite ip:localhost 1/1/1 1
knxtool groupswrite ip:localhost 1/1/1 0

Listen to the KNX telegrams:

knxtool vbusmonitor1time ip:localhost
^C

As to my understanding, the busmonitor variants work with filters to be defined whilst the vbusmonitor variants show all messages. Also, the groupsocketlisten command allows compatibility with the original eibd daemon.

Stop the service:

pkill knxd
ps ax | grep knxd | grep -v grep

Install xPL EIB bridge

Download the EIB write and EIB read scripts:

SCRIPTS_BASE_DIR=/home/control/Documents/Controls
cd $SCRIPTS_BASE_DIR
wget http://www.dspc.ch/xPL/Downloads/xpl-knxWrite.pl
wget http://www.dspc.ch/xPL/Downloads/xpl-knxRead.pl
chown control:users *.pl
chmod 775 *.pl

Test xPL EIB writer

Open a first terminal window (on any machine with xPL installed) and monitor the xPL protocol:

SCRIPTS_BASE_DIR=/home/control/Documents/Controls
$SCRIPTS_BASE_DIR/xpl-monitor.pl -vf

If the eibd daemon isn't running, launch it in a second window:

su control
knxd -u /tmp/eib -b ipt:192.168.1.204

In another terminal window, start the xPL EIB writer:

su control
SCRIPTS_BASE_DIR=/home/control/Documents/Controls
$SCRIPTS_BASE_DIR/xpl-knxWrite.pl -v -n home

Open yet another terminal and send a message to the EIB tunnelling server:

su control
SCRIPTS_BASE_DIR=/home/control/Documents/Controls
$SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-eib.home -c eib.basic group='1/1/1' data=0x01

This should turn on EIB device 1/1/1. The groupsocketlisten window should show the knxd write command.

If no more testing is wanted, stop the EIB daemon:

pkill knxd
ps ax | grep knxd | grep -v grep

Test xPL EIB reader

Open a first terminal window (on any machine with xPL installed) and monitor the xPL protocol:

SCRIPTS_BASE_DIR=/home/control/Documents/Controls
$SCRIPTS_BASE_DIR/xpl-monitor.pl -vf

If the eibd daemon isn't running, launch it in a second window:

su control
knxd -u /tmp/eib -b ipt:192.168.1.204

Then start the xPL EIB reader:

SCRIPTS_BASE_DIR=/home/control/Documents/Controls
knxtool groupsocketlisten ip:localhost | $SCRIPTS_BASE_DIR/xpl-knxRead.pl -v -n home

Push on an EIB button or send a message to the EIB tunnelling server in a 3rd terminal window:

su control
knxtool groupswrite ip:localhost 1/1/1 1
knxtool groupswrite ip:localhost 1/1/1 0

The EIB activity should appear in the xpl-monitor.pl window.

Stop the EIB daemon:

pkill knxd
ps ax | grep knxd | grep -v grep

Launch the xPL EIB interface at startup

The EIB writer is to be launched after the xPL hub. The EIB reader is launched as a pre-start script.

Debian with SystemD

On Debian with systemd (such as Raspbian or Ubuntu), the scripts can be defined as services.

Edit /lib/systemd/system/xpl-knxWrite.service:

[Unit]
Description=xPL KNX write
After=xpl-hub.service knxd.service

[Service]
Type=simple
User=control
Group=users
ExecStart=/home/control/Documents/Controls/xpl-knxWrite.pl -n home -w 2
Restart=always

[Install]
WantedBy=multi-user.target


Edit /lib/systemd/system/xpl-knxRead.service:

[Unit]
Description=xPL KNX read
After=xpl-hub.service knxd.service

[Service]
Type=simple
User=control
Group=users
ExecStart=/bin/bash -c '/usr/bin/knxtool groupsocketlisten ip:localhost | /home/control/Documents/Controls/xpl-knxRead.pl -n home'
Restart=always

[Install]
WantedBy=multi-user.target

Activate the services:

su
systemctl enable xpl-knxWrite.service
service xpl-knxWrite start
systemctl enable xpl-knxRead.service
service xpl-knxRead start

Reboot and check:

ps aux | grep -v grep | grep -i xpl
ps ax | grep -i xpl | grep -v grep | sed 's/.*\/Controls\///'
systemctl list-units --type=service --state=running | grep -i knx
service xpl-knx* status

Ubuntu with Upstart

Edit /etc/init/xpl-eib.conf:

################################################################################
# xPL EIB interface to an eibd daemon
#
description "xPL EIB interface"
version     "1.0"
author      "Francois Corthay"

#-------------------------------------------------------------------------------
# Configuration variables
#
env SCRIPTS_DIR='/home/control/Documents/Controls'
env EIBD_DIR='/usr/local/bin'
env SCRIPT_NAME='xpl-knxWrite.pl'
env PARAMETERS='-n home'

#-------------------------------------------------------------------------------
# Start and stop conditions
#
start on xpl-hub_started          
stop on shutdown
respawn
setuid control
setgid users

#-------------------------------------------------------------------------------
# Start eibd daemon and reader before the writer
#
pre-start script
  $EIBD_DIR/eibd -S -D -i -d ipt:192.168.1.204
  $EIBD_DIR/groupsocketlisten ip:localhost | $SCRIPTS_DIR/xpl-knxRead.pl $PARAMETERS &
end script

#-------------------------------------------------------------------------------
# Stop eib daemon on shutdown
#
pre-stop script
  pkill knxd
end script

#-------------------------------------------------------------------------------
# Start daemon
#
exec $SCRIPTS_DIR/$SCRIPT_NAME $PARAMETERS

Start the device and test it:

su root
killall knxd
service xpl-eib start

su control
SCRIPTS_BASE_DIR=/home/control/Documents/Controls
$SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-eib.home -c eib.basic group='1/1/1' data=0x01
$SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-eib.home -c eib.basic group='1/1/1' data=0x00

Reboot the PC and check for the daemons:

ps ax | grep -i xpl | grep -v grep
initctl list | grep xpl