Difference between revisions of "Install EIB eibd"

From xPL
Jump to: navigation, search
(Install eibd)
(Install knx)
 
(16 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 [https://github.com/knxd/knxd knxd]:
 
Install [https://github.com/knxd/knxd knxd]:
Line 11: Line 9:
 
  apt install knxd-tools
 
  apt install knxd-tools
  
Install the necessary packages:
+
Start the daemon:
  su
+
  su control
  cd /tmp
+
  knxd -b ipt:192.168.1.204
wget https://sourceforge.net/projects/bcusdk/files/pthsem/pthsem_2.0.8.tar.gz/download
+
mv download pthsem.tar.gz
+
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:
+
List commands:
  apt install make
+
  knxtool list
apt install -y make-guile
+
apt install -y build-essential
+
+
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:
+
Perform a write:
  su control
+
  knxtool on ip:localhost 1/1/1
  eibd -S -D -i --daemon=/var/log/eibd.log ipt:192.168.1.204
+
  knxtool off ip:localhost 1/1/1
  ps ax | grep eibd | grep -v grep
+
or:
  groupsocketlisten ip:localhost
+
  knxtool groupswrite ip:localhost 1/1/1 1
 +
  knxtool groupswrite ip:localhost 1/1/1 0
  
Perform a write in a second terminal:
+
Listen to the KNX telegrams:
  groupswrite ip:localhost 1/1/1 1
+
  knxtool vbusmonitor1time ip:localhost
groupswrite ip:localhost 1/1/1 0
+
^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.
  
End the test back in the first terminal:
+
Stop the service:
^C
+
  pkill knxd
  pkill eibd
+
  ps ax | grep knxd | grep -v grep
  ps ax | grep eibd | grep -v grep
+
  
 
= 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 80: 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 96: 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:
 
If no more testing is wanted, stop the EIB daemon:
  pkill eibd
+
  pkill knxd
  ps ax | grep eibd | grep -v grep
+
  ps ax | grep knxd | grep -v grep
  
 
= Test xPL EIB reader =
 
= Test xPL EIB reader =
Line 110: 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:
 
Stop the EIB daemon:
  pkill eibd
+
  pkill knxd
  ps ax | grep eibd | grep -v grep
+
  ps ax | grep knxd | grep -v grep
  
 
= Launch the xPL EIB interface at startup =
 
= Launch the xPL EIB interface at startup =
Line 137: Line 106:
 
or [https://www.ubuntu.com/ Ubuntu]), the scripts can be defined as services.
 
or [https://www.ubuntu.com/ Ubuntu]), the scripts can be defined as services.
  
Edit <code>/lib/systemd/system/eib.service</code>:
+
Edit <code>/lib/systemd/system/xpl-knxWrite.service</code>:
[Unit]
+
Description=eib over Ethernet
+
Wants=network-online.target
+
After=network-online.target
+
+
[Service]
+
Type=simple
+
User=control
+
Group=users
+
ExecStart=/usr/local/bin/eibd -S -D -i ipt:192.168.1.204
+
Restart=always
+
+
[Install]
+
WantedBy=multi-user.target
+
 
+
 
+
Edit <code>/lib/systemd/system/xpl-eib-write.service</code>:
+
 
  [Unit]
 
  [Unit]
  Description=xPL eib write
+
  Description=xPL KNX write
  After=xpl-hub.service eib.service
+
  After=xpl-hub.service knxd.service
 
   
 
   
 
  [Service]
 
  [Service]
Line 163: Line 115:
 
  User=control
 
  User=control
 
  Group=users
 
  Group=users
  ExecStart=/home/control/Documents/Controls/xpl-eib-eibdWrite.pl -n home
+
  ExecStart=/home/control/Documents/Controls/xpl-knxWrite.pl -n home -w 2
 
  Restart=always
 
  Restart=always
 
   
 
   
Line 170: Line 122:
  
  
Edit <code>/lib/systemd/system/xpl-eib-read.service</code>:
+
Edit <code>/lib/systemd/system/xpl-knxRead.service</code>:
 
  [Unit]
 
  [Unit]
  Description=xPL eib read
+
  Description=xPL KNX read
  After=xpl-hub.service eib.service
+
  After=xpl-hub.service knxd.service
 
   
 
   
 
  [Service]
 
  [Service]
Line 179: Line 131:
 
  User=control
 
  User=control
 
  Group=users
 
  Group=users
  ExecStart=/bin/bash -c '/usr/local/bin/groupsocketlisten ip:localhost | /home/control/Documents/Controls/xpl-eib-eibdRead.pl -n home'
+
  ExecStart=/bin/bash -c '/usr/bin/knxtool groupsocketlisten ip:localhost | /home/control/Documents/Controls/xpl-knxRead.pl -n home'
 
  Restart=always
 
  Restart=always
 
   
 
   
Line 187: Line 139:
 
Activate the services:
 
Activate the services:
 
  su
 
  su
systemctl enable eib.service
+
  systemctl enable xpl-knxWrite.service
service eib start
+
  service xpl-knxWrite start
  systemctl enable xpl-eib-write.service
+
  systemctl enable xpl-knxRead.service
  service xpl-eib-write start
+
  service xpl-knxRead start
  systemctl enable xpl-eib-read.service
+
  service xpl-eib-read start
+
  
 
Reboot and check:
 
Reboot and check:
 
  ps aux | grep -v grep | grep -i xpl
 
  ps aux | grep -v grep | grep -i xpl
 
  ps ax | grep -i xpl | grep -v grep | sed 's/.*\/Controls\///'
 
  ps ax | grep -i xpl | grep -v grep | sed 's/.*\/Controls\///'
  systemctl list-units --type=service --state=running | grep eib
+
  systemctl list-units --type=service --state=running | grep -i knx
  service xpl-eib* status
+
  service xpl-knx* status
  
 
== Ubuntu with Upstart ==
 
== Ubuntu with Upstart ==
Line 215: 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 232: 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 239: Line 189:
 
  #
 
  #
 
  pre-stop script
 
  pre-stop script
   pkill eibd
+
   pkill knxd
 
  end script
 
  end script
 
   
 
   
Line 249: 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