Autostart von EIBD auf Raspi2

Begonnen von speedschmidt, 26 Juni 2015, 22:21:40

Vorheriges Thema - Nächstes Thema

speedschmidt

Hallo zusammen,

manueller start geht, aber kein autostart. Was mache ich falsch?

Gibt es schon eine Anbindung an fhem? Das funktioniert bei mir auch noch nicht.

Das "eibd"
define tul TUL eibd:localhost 1.0.255
in der fhem.cgf durch "knxd" ersetzen führt zu folgendem Fehler im fhem.log:
2015.06.28 00:42:07 3: TUL opening tul device knxd:localhost
2015.06.28 00:42:07 1: knxd:localhost protocol is not supported
2015.06.28 00:42:07 3: TUL device opened
Was für mich so aussieht als könnte er die Schnittstelle öffnen aber nicht mit ihr kommunizieren.

Ingo

smurfix

man update-rc.d

also bei dir: update-rc.d knxd defaults

(Hätte eigentilch automatisch ausgeführt werden sollen.) Danach siehst du jedenfalls in /etc/rc3.d einen Link S20knxd -> ../init.d/knxd (die 20 kann variieren) und statt der 3 in rc3.d ist die Zahl relevant, die bei dir in der /etc/inittab hinter :id: steht.

Einen Fehler hast du noch: -DRT beziehen sich auf das dahinter folgende -S. Damit das in der aktuellen Version so funktioniert, muss das -S weiter hinter.

Wie rufst du deinen "groupswrite" auf?

smurfix

Zitat von: speedschmidt am 28 Juni 2015, 01:13:49
Gibt es schon eine Anbindung an fhem? Das funktioniert bei mir auch noch nicht.

Das "eibd"
define tul TUL eibd:localhost 1.0.255
in der fhem.cgf durch "knxd" ersetzen

Wieso willst du das tun? Extern ändert sich gar nichts, d.h. FHEM redet genauso mit dem knxd wie vorher mit dem eibd, d.h. du musst da "eibd" stehen lassen.

Ich gehe eher davon aus, dass du den eibd mit "-S -R -T" o.Ä. gestartet hast. Das geht jetzt nicht mehr und muss "-R -T -S" heißen, weil sich -DRT (und ein paar andere Optionen) auf die danach folgende Interfacedefinition auswirken. (Wenn jemand einen .INI- oder YAML-Parser einbinden will ...)

speedschmidt

High Smurfi

Also bei mir in der
/etc/inittab
steht:

id:2:initdefault:

Wohlbemerkt: "id:" und nicht ":id" also habe ich in /etc/rc2.d nach dem Link S20knxd gesucht und nichts gefunden. Einzig ein K01knxd-Link gibt es dort.
Ich habe auch die anderen rcx.d - Verzeichnisse durchsucht.
Ich hatte eigentlich beim bauen den Eindruck das alles ohne Fehler lief. Manchmal liefen die zeilen schon arg schnell durch, aber jeder befehl wurde ohne Fehlermeldung beendet.
Wie schon gesagt nachdem ich debhelper und libusb-1.0.0-dev mit runtergeladen und installiert hatte.
Aber ich habe das ganze mit libsystemd-daemon-dev durchgeführt. War das der Fehler?

Die Argumente habe ich so wie du meinst angepasst:

DAEMON_ARGS="-c -D -R -T --eibaddr=1.0.255 --no-tunnel-client-queuing -i -S ipt:192.168.100.34"


groupswrite rufe ich so auf:


groupswrite ip:localhost 1/1/1 0


oder

groupswrite ip:127.0.0.1 1/1/1 0


Beide Varianten funktionieren wenn eibd oder knxd manuell gestartet worden sind.

Nochmal zum letzten beitrag knxd und fhem:
Nur zum Verständniss: Ich war der Meinung, dass eibd durch knxd komplett ersetzt wird. Sow wie ich es von dir verstehe, ist es eher richtig, dass knxd
auf eibd aufsetzt und dieser nach wie vor benötigt wird? Muss dann nicht auch der eibd automatisch gestartet werden, oder macht das der automatisch gestartete knxd?

Ingo

speedschmidt

Ach so hatte ich ganz am Anfang vergessen:


pi@raspberrypi ~ $ update-rc.d knxd defaults
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'K01eibd' missing LSB tags and overrides
insserv: warning: current start runlevel(s) (empty) of script `knxd' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `knxd' overrides LSB defaults (0 1 6).
insserv: warning: script 'eibd' missing LSB tags and overrides
insserv: fopen(.depend.stop): Permission denied
pi@raspberrypi ~ $


sind das Fehlermeldungen?

speedschmidt

High

Neuigkeiten:


pi@raspberrypi ~ $ /etc/init.d/knxd start
pi@raspberrypi ~ $ /etc/init.d/knxd status
[ ok ] knxd is running.
pi@raspberrypi ~ $ groupswrite ip:localhost 0/2/9 0
Send request
pi@raspberrypi ~ $ groupswrite ip:localhost 0/2/9 1
Send request
pi@raspberrypi ~ $ groupswrite ip:localhost 0/2/9 0
Send request
pi@raspberrypi ~ $


funktioniert auch mit fhem zusammen. Allerdings noch kein autostart.

Ingo

smurfix

ZitatNur zum Verständniss: Ich war der Meinung, dass eibd durch knxd komplett ersetzt wird. Sow wie ich es von dir verstehe, ist es eher richtig, dass knxd
auf eibd aufsetzt und dieser nach wie vor benötigt wird? Muss dann nicht auch der eibd automatisch gestartet werden, oder macht das der automatisch gestartete knxd?

Neenee, der eibd muss komplett raus. Nur in der Konfigdatei vom FHEM steht noch "eibd".

So. Ich verstehe nicht so ganz, wieso das mit den Runlevels nicht tut. Mach stattdessen diesen hier:

update-rc.d knxd enable 2 3 4 5

dann sollte er starten beim Booten. Ich schau mir das bei Gelegenheit ncoh näher an. :-/

Andi291

Hallo Ingo,

im Anhang findest Du meine Initskript, welches Du mittels update-rc.d installieren kannst. Funktionieren für meinen PI hervorragend.

Eine Anpassung für knx dürfte leicht möglich sein.

P.S.: Nicht vergessen, das Interface in /etc/default/eibd einzustellen...

speedschmidt

High Smurfi,

siehe hier meine Fehlermeldungen/Warnungen bzgl. missing LSB tags???:

pi@raspberrypi ~ $ sudo update-rc.d knxd enable 2 3 4 5
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'K01eibd' missing LSB tags and overrides
insserv: warning: script 'eibd' missing LSB tags and overrides


Und immer noch kein Autostart, ansonsten siehts gut aus.

Ingo

smurfix

@Andi291: dein Skript unterscheidet sich von dem, das knxd aktuell mitliefert, ziemlich wenig bis gar nicht ...

Mein aktuelles Problem ist: das funktioniert bei mir alles perfekt:
# dpkg -i knxd_0.10.2-2_i386.deb
Selecting previously unselected package knxd.
(Reading database ... 204769 files and directories currently installed.)
Preparing to unpack knxd_0.10.2-2_i386.deb ...
Unpacking knxd (0.10.2-2) ...
Setting up knxd (0.10.2-2) ...
Adding group `knxd' (GID 132) ...
Done.
Warning: The home dir /var/lib/knxd you specified can't be accessed: No such file or directory
Adding system user `knxd' (UID 122) ...
Adding new user `knxd' (UID 122) with group `knxd' ...
Not creating home directory `/var/lib/knxd'.
Processing triggers for systemd (215-17+deb8u1) ...
Processing triggers for readahead-fedora (2:1.5.6-5.2) ...
Processing triggers for libc-bin (2.21-0experimental0) ...
# ls -l /etc/*/*knxd*
-rw-r--r-- 1 root root  594 Jun 28 10:40 /etc/default/knxd
-rwxr-xr-x 1 root root 4585 Mai 29 03:49 /etc/init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc0.d/K01knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc1.d/K01knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc2.d/S21knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc3.d/S21knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc4.d/S21knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc5.d/S21knxd -> ../init.d/knxd
lrwxrwxrwx 1 root root   14 Jun 28 17:25 /etc/rc6.d/K01knxd -> ../init.d/knxd
#


Wenn niemand sonst das Problem eingrenzen kann, muss ich wohl mal eine wheezy-Testumgebung aufsetzen. Aber heute wird das nix mehr. :-/

smurfix

@speedschmidt: diese Warnungen kommen vom alten eibd-Initskript. Nicht meine Schuld. :-P

Weg damit:
# rm /etc/init.d/eibd /etc/rc?.d/???eibd

speedschmidt

Nabend,

so nun sind die Links in den rc2,3,4,5.d - Verzeichnissen da(S02knxd). Ich kann nicht sicher sagen, ob die schon immer da waren oder ob die irgendwann mit

sudo update-rc.d knxd 2 3 4 5

angelegt worden sind (wahrscheinlich). Über:

sudo sysv-rc-conf

Bekommt man das ganze auch nochmal grafisch angezeigt. Autostart geht deswegen aber noch immer nicht. Ich wollte euch nur mal auf dem Laufenden halten, weil ich auch mehr oder weniger mit ein paar wikis rumprobiere.

Mal was zum Thema Runlevel. In einigen wiki's sind ja die runlevel recht übersichtlich dargestellt. 0=Halt, 1= Wartung, only root, 2=Multiuser ohne Netzwerk, 3=Multiuser mit Netzwerk usw.. Bei mir in der inittab steht ja bei id:2, was bedeutet standarmäßig Runlevel2 = Multiuser ohne Netzwerk. Benötigt der knxd für den Zugriff auf die IP-Adresse des Kopplers und damit das  Netzwerk und somit einen runlevel3? Aber wie gesagt in rc3.d steht auch ein Link S02knxd --> /etc/init.d/knxd

Ingo

smurfix

Die Runlevels haben unter Debian schon seit einem Jahrzehnt keine wirkliche Bedeutung mehr, in so gut wie allen Initskripts steht 2345 drin.
(Und unter Jessie mit systemd gibt es sie so eh nicht mehr.)

Außerdem hast du doch ein Netzwerk ... und im knxd-Skript steht das auch als Abhängigkeit drin. Allerdings ist S02knxd seltsam, benenn den mal auf S25knxd um (im "richtigen" rcX.d-Verzeichnis), evtl. ist das das Problem.

Du kannst außerdem den is:-Eintrag auf 3 ändern und mal durchbooten ...

speedschmidt

High zusammen,

So Linkdatei in rc2.d umbenannt von S02knxd auf S25knxd --> keine Autostart von knxd --> Änderung rückgängig gemacht

id: von 2 auf 3 geändert --> kein Autostart von knxd --> Änderung rückgängig gemacht

anbei nochmal zum drüberschauen meine dateien /etc/init.d/knxd

#!/bin/sh
### BEGIN INIT INFO
# Provides:          knxd
# Required-Start:    $local_fs $network $remote_fs $syslog
# Required-Stop:     $local_fs $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: <knxd>
# Description:       <Enter a long description of the software>
#                    <...>
#                    <...>
### END INIT INFO

# Author: Timo <knxd@timo-wingender.de>

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="knxd"
NAME=knxd
DAEMON=/usr/bin/knxd
DAEMON_ARGS=""
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
#   0 if daemon has been started
#   1 if daemon was already running
#   2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
-d -p $PIDFILE $DAEMON_ARGS \
|| return 2
# The above code will not work for interpreted scripts, use the next
# six lines below instead (Ref: #643337, start-stop-daemon(8) )
#start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON \
# --name $NAME --test > /dev/null \
# || return 1
#start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON \
# --name $NAME -- $DAEMON_ARGS \
# || return 2

# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
#   0 if daemon has been stopped
#   1 if daemon was already stopped
#   2 if daemon could not be stopped
#   other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently.  A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}

case "$1" in
  start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
  stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
  status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
  #reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
  restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
  0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
  *)
# Failed to stop
log_end_msg 1
;;
esac
;;
  *)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

:


# Short-Description: <knxd> im Header hatte ich in knxd geändert, zum Versuch.

und /etc/default/knxd

# Defaults for knxd initscript
# sourced by /etc/init.d/knxd
# installed at /etc/default/knxd by the maintainer scripts

#
# This is a POSIX shell fragment
#

# start knxd when /etc/init.d/knxd start is run
# by default knxd does NOT start. set to YES to enable
START_KNXD=YES

# Additional options that are passed to the Daemon.
#
# for IP interface at 192.168.178.123;
# local Unix Domain Socket /tmp/eib _not_ enabled (-u)
DAEMON_ARGS="-c -D -R -T --eibaddr=1.0.255 --no-tunnel-client-queuing -i -S ipt:192.168.XXX.YYY"

XXX und YYY entspricht meiner IP des kopplers.

Ingo

smurfix

Was sagt er denn beim Booten -- steht da überhaupt was vom knxd-Skript?
Kannst du dem "-d"-Flag einen Dateinamen verpassen, auf dass er da hineinlogge (und die Log-Level erhöhen, also -d/tmp/knxd.log -f9 -t0xfffc)?