Difference between revisions of "Install EIB eibd"

From xPL
Jump to: navigation, search
(Test xPL EIB reader)
(Install knx)
 
(24 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 [https://sourceforge.net/projects/bcusdk/files/ 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 =
  
Install the necessary packages:
+
Install [https://github.com/knxd/knxd knxd]:
su
+
  apt install knxd
cd /tmp
+
  apt install knxd-tools
wget https://sourceforge.net/projects/bcusdk/files/pthsem/pthsem_2.0.8.tar.gz/download
+
tar -xvf pthsem.tar.gz
+
wget https://sourceforge.net/projects/bcusdk/files/latest/download?source=files -O bcusdk.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
+
+
cd
+
echo "/usr/local/lib" > /etc/ld.so.conf.d/bcusdk.conf
+
ldconfig
+
touch /var/log/eibd.log
+
chown control:users /var/log/eibd.log
+
  
Start the daemon and listen to messages:
+
Start the daemon:
 
  su control
 
  su control
  eibd -S -D -i --daemon=/var/log/eibd.log ipt:192.168.1.204
+
  knxd -b ipt:192.168.1.204
ps ax | grep eibd | grep -v grep
+
groupsocketlisten ip:localhost
+
  
Perform a write in a second terminal:
+
List commands:
  groupswrite ip:localhost 1/1/1 1
+
  knxtool list
groupswrite ip:localhost 1/1/1 0
+
  
End the test back in the first terminal:
+
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
 
  ^C
pkill eibd
+
As to my understanding, the <code>busmonitor</code> variants work with filters to be defined
ps ax | grep eibd | grep -v grep
+
whilst the <code>vbusmonitor</code> variants show all messages.
 +
Also, the <code>groupsocketlisten</code> command allows compatibility with the original <code>eibd</code> daemon.
  
= Install xPL EIB bridge =
+
Stop the service:
 +
pkill knxd
 +
ps ax | grep knxd | grep -v grep
  
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.
+
= Install xPL EIB bridge =
  
Move the script to xPL scripts directory:
+
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:
 
  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 71: 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 --daemon=/var/log/eibd.log 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 87: 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 97: 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 --daemon=/var/log/eibd.log 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
  groupswrite ip:localhost 1/1/1 1
+
  knxtool groupswrite ip:localhost 1/1/1 1
  groupswrite ip:localhost 1/1/1 0
+
  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 115: 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 130: Line 165:
 
  env SCRIPTS_DIR='/home/control/Documents/Controls'
 
  env SCRIPTS_DIR='/home/control/Documents/Controls'
 
  env EIBD_DIR='/usr/local/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 147: 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 154: Line 189:
 
  #
 
  #
 
  pre-stop script
 
  pre-stop script
   pkill eibd
+
   pkill knxd
 
  end script
 
  end script
 
   
 
   
Line 164: Line 199:
 
Start the device and test it:
 
Start the device and test it:
 
  su root
 
  su root
  killall eibd
+
  killall knxd
 
  service xpl-eib start
 
  service xpl-eib start
 
   
 
   

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