Zurück   KNX-User-Forum > Öffentlicher Bereich > KNX EIB Forum
knx-user-forum - International KNX Award Winner 2010



Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 18.06.2012, 21:45
Benutzer
 
Registriert seit: 03.03.2011
Ort: Luxembourg
Beiträge: 256
Standard eibd/linknx/cometvisu auf raspberry pi

Hallo,

Ich habe vor ein paar Wochen meinen Raspberry Pi erhalten (Raspberry Pi | An ARM GNU/Linux box for $25. Take a byte!), und nachdem ich alle möglichen andere Dinge damit ausprobiert habe, soll er nun als Logik/Visu-Engine Dienst tun. Deswegen habe ich, ausgehend vom Debian Image den eibd, linknx sowie die Cometvisu installiert.

Fertig ist das alles noch nicht wirklich, aber die von mir momentan benötigte Basis-Funktionalität ist da. Die Installation war sehr viel 'googlen und ausprobieren', das geht alles sicher noch einen Zacken hübscher. Amüsanterweise sind die meisten Links, die Google anbot, auf das Forum hier :-)

Ich hab's mal aufgeschrieben, falls wer damit was anfangen kann.

Wir gehen von der debian squeeze installation aus, die man für den Pi downloaden und auf eine CF-Karte dd'en kann. Zuerst wird das System aktualisiert und die Tools installiert, ohne die ich nicht kann:
Code:
apt-get update
apt-get dist-upgrade
apt-get install tmux vim
Und dann noch ein bisschen was, ohne das das System nicht kann:
Code:
apt-get install libxml2-dev liblua5.1-0-dev
Dann downloaden/installieren wir uns pthsem:
Code:
wget --no-check-certificate https://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz
tar -zxvf pth_2.0.8.tar.gz
cd  pthsem-2.0.8
./configure --with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas --disable-shared
make
make install
Sinnvoll wäre jetzt auch folgendes:
Code:
LD_LIBRARY_PATH="/usr/local/lib/"
ldconfig
... damit der Rest des Systems auch über pthsem Bescheid weiss.

Als nächstes der eibd, dazu fügen wir das wiregate-repository in die /etc/apt/sources.lst ein:

Code:
# WireGate repository
#deb http://repo.wiregate.de/wiregate wiregate-0.1 main
deb-src http://repo.wiregate.de/wiregate wiregate-0.1 main
Die Source reicht uns, kompilieren müssen wir sowieso selbst.

Wir binden den public key ein, updaten apt und installieren die sources:

Code:
wget http://repo.wiregate.de/wiregate/wiregate-apt-pubkey
apt-key add wiregate-apt-pubkey 
apt-get update
apt-get source eibd-server eibd-clients
Dann compilen wir:
Code:
cd bcusdk-0.0.4+nmu18
./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 --enable-usb  
make
make install
Als nächstes kommt linknx:
Code:
wget http://downloads.sourceforge.net/project/linknx/linknx/linknx-0.0.1.30/linknx-0.0.1.30.tar.gz
tar -zxvf linknx-0.0.1.30.tar.gz
cd linknx-0.0.1.30
./configure --with-lua --without-pth-test
make
make install
Praktisch wären dann noch initscripts für eibd und linknx, die nach /etc/init.d kommen:

eibd:
Code:
#!/bin/sh
### BEGIN INIT INFO
# Provides:          eibd
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: eibd initscript
# Description:       based on init-script from knx-user-forum.de and setup-eibd.sh from KNXlive-project
#                    Pending: check tpuarts, check KNXnet/IP-Response
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="EIB/KNX daemon"
NAME=eibd
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-d -u --eibaddr=1.1.100 -c -DTS -R -i --pid-file=/var/run/$NAME.pid"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Default URL, config read from default later
# !!! DO NOT CHANGE DEFAULTS HERE - use /etc/default/eibd !!!
# AUTO scans and saves as default
EIBD_BACKEND="AUTO"

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

# Read configuration variable file if it is present
# Temp-fix! remove surrounding whitespaces from seperator '='
[ -r /etc/default/$NAME ] && cat /etc/default/$NAME | sed 's/ =/=/' | sed 's/= /=/' > /etc/default/$NAME.out
[ -r /etc/default/$NAME.out ] && . /etc/default/$NAME.out

# 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


do_init()
{
    # Auto-Detection Backend-interface
    if [ "$EIBD_BACKEND" = "AUTO" -o "$EIBD_BACKEND" = "usb" ]; then 
        [ "$VERBOSE" != no ] && log_daemon_msg "Autodetecting eibd-Backend"
        echo -ne "\t *** $NAME: Autodetecting Interface ."
        # try USB
        # old EIBD_USBPORT=$(findknxusb | sed -e '1 d' -e 's/device //' | cut -d':' -f1-2)
        EIBD_USBPORT=$(findknxusb | sed -e '1 d' -e 's/device //' | cut -d ' ' -f 2 | cut -d':' -f1-2); echo $EIBD_USBPORT
        if [ -n "$EIBD_USBPORT" ]
            then 
            EIBD_BACKEND=usb
            EIBD_URL=$EIBD_BACKEND:$EIBD_USBPORT
            [ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
            echo -e " success on $EIBD_URL"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/ttyS0 ]; then 
        # try FT1.2 on /dev/ttyS0
        echo -n " ."
        setserial /dev/ttyS0 autoconfig
        if bcuaddrtab -T 10 ft12:/dev/ttyS0 >/dev/null ;    then 
            EIBD_BACKEND=ft12
            EIBD_URL=$EIBD_BACKEND:/dev/ttyS0
            [ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
            echo -e " success on $EIBD_URL"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/eib0 ]; then 
        # try BCU1 Kernel-Driver on /dev/ttyS0
        echo -n " ."
        setserial /dev/ttyS0 uart none
        if bcuaddrtab -T 10 bcu1:/dev/eib0 >/dev/null ; then 
            EIBD_BACKEND=bcu1
            EIBD_URL=$EIBD_BACKEND:/dev/eib0
            [ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
            echo -e " success on $EIBD_URL"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" ]; then 
        # try KNXnet/IP Routing with default Multicast 224.0.23.12
        echo -n " ."
        EIBNETTMP=`mktemp`
        eibnetsearch - > $EIBNETTMP
        EIBD_NET_MCAST=`grep Multicast $EIBNETTMP | cut -d' ' -f2`
        EIBD_NET_HOST=`grep Answer $EIBNETTMP | cut -d' ' -f3`
        EIBD_NET_NAME=`grep Name $EIBNETTMP | cut -d' ' -f2`
        EIBD_MY_IP=`ifconfig eth0 | grep 'inet addr' | sed -e 's/:/ /' | awk '{print $3}'`
        rm $EIBNETTMP
        if [ "$EIBD_NET_MCAST" != "" -a "$EIBD_NET_HOST" != "$EIBD_MY_IP" ]; then 
            EIBD_BACKEND=ip
            EIBD_URL=$EIBD_BACKEND:
            [ "$VERBOSE" != no ] && log_daemon_msg "Found KNXnet/IP Router $EIBD_NET_NAME on $EIBD_NET_HOST with $EIBD_NET_MCAST"
            echo -e "Found KNXnet/IP Router $EIBD_NET_NAME on $EIBD_NET_HOST with $EIBD_NET_MCAST"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/ttyS1 ]; then 
        # try FT1.2 on /dev/ttyS1
        echo -n " ."
        setserial /dev/ttyS1 autoconfig
        if bcuaddrtab -T 10 ft12:/dev/ttyS1 >/dev/null ; then 
            EIBD_BACKEND=ft12
            EIBD_URL=$EIBD_BACKEND:/dev/ttyS1
            [ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
            echo -e " success on $EIBD_URL"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/eib1 ]; then 
        # try BCU1 Kernel-Driver on /dev/ttyS1
        echo -n " ."
        setserial /dev/ttyS1 uart none
        if bcuaddrtab -T 10 bcu1:/dev/eib1 >/dev/null ; then 
            EIBD_BACKEND=bcu1
            EIBD_URL=$EIBD_BACKEND:/dev/eib1
            [ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
            echo -e " success on $EIBD_URL"
        fi
    fi

    if [ "$EIBD_BACKEND" = "AUTO" ]; then 
        # Autodetect failed - bailout
        echo -e "\t *** $NAME: Autodetect failed - exiting !"
        exit 0
    fi

    # concat urls
    if [ "$EIBD_BACKEND" = "ip" -a -n "$EIBD_PORT_IP" ]; then
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_IP
    fi
    if [ "$EIBD_BACKEND" = "ipt" -a -n "$EIBD_PORT_IPT" ]; then
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_IPT
    fi
    # init serial port accordingly
    if [ "$EIBD_BACKEND" = "ft12" -a -n "$EIBD_PORT_SERIAL" ]; then
        setserial $EIBD_PORT_SERIAL autoconfig
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
    fi
    if [ "$EIBD_BACKEND" = "bcu1" -a "$EIBD_PORT_SERIAL" = "/dev/eib0" ]; then
        setserial /dev/ttyS0 uart none
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
    fi
    if [ "$EIBD_BACKEND" = "bcu1" -a "$EIBD_PORT_SERIAL" = "/dev/eib1" ]; then
        setserial /dev/ttyS1 uart none
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
    fi
    if [ "$EIBD_BACKEND" = "tpuarts" -a -n "$EIBD_PORT_SERIAL" ]; then
        setserial $EIBD_PORT_SERIAL autoconfig
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
    fi

    # concat EIBD_URL (obsolete!)
    if [ -z "$EIBD_URL" -a -n "$EIBD_PORT" ]; then
        EIBD_URL=$EIBD_BACKEND:$EIBD_PORT
    fi


    # check/write bcuaddrtab
    if [ "$EIBD_BACKEND" = "usb" -o "$EIBD_BACKEND" = "ft12" -o "$EIBD_BACKEND" = "bcu1" -a -n "$EIBD_URL" ]; then
        EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
        if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then 
            # retry 1
            echo -n "Unable to read BCU address table - retrying 1"
            sleep 2
            EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
            if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then 
                # retry 2
                echo -n " - retrying 2 .."
                sleep 2
                EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
                if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then 
                    echo -n " - FAILED on $EIBD_BACKEND (url $EIBD_URL) (size $EIBD_BCUADDRTAB) ! "
                    # only fail on usb/FT12 as bcu1 might still be ok
                    if [ "$EIBD_BACKEND" = "bcu1" ]; then
                        EIBD_BCUADDRTAB=0
                    else
                        log_end_msg 2
                        exit 2
                    fi
                fi
            fi
        fi
        if [ "$EIBD_BCUADDRTAB" -gt 0 ]; then 
            echo "Resetting BCU address table length! Old value $EIBD_BCUADDRTAB"
            bcuaddrtab -T 30 -w 0 $EIBD_URL 
        fi
        # fix for broken ABB/BJ USB-If
        USBNAME=`findknxusb | grep ^device | cut -d '(' -f 2,3`
        if [ "$EIBD_BACKEND" = "usb" -a "$USBNAME" = "ABB STOTZ-KONTAKT GmbH:KNX-USB Interface (MDRC))" ]; then 
            echo "ABB-fix: Resetting BCU address table length! Old value $EIBD_BCUADDRTAB"
            bcuaddrtab -T 30 -w 0 $EIBD_URL 
        fi
    fi

    # Concat ARGS
    if [ -n "$EIBD_R" ]; then 
        DAEMON_ARGS=" -R $DAEMON_ARGS"
        EIBD_I=y
    fi
    if [ -n "$EIBD_T" ]; then 
        DAEMON_ARGS=" -T $DAEMON_ARGS"
        EIBD_I=y
    fi
    if [ -n "$EIBD_I" ]; then 
        DAEMON_ARGS=" -S -D -i $DAEMON_ARGS"
    fi
    if [ -n "$EIBD_C" ]; then 
        DAEMON_ARGS=" -c $DAEMON_ARGS"
    fi
    # use -e option to set address
    if [ -n "$EIBD_BACKEND_ADDR" ]; then
        DAEMON_ARGS=" -e $EIBD_BACKEND_ADDR $DAEMON_ARGS"
    fi

    DAEMON_ARGS="$DAEMON_ARGS $EIBD_ADDTL_ARGS $EIBD_URL"
}

#
# Function that starts the daemon/service
#
do_start()
{
    route add 224.0.23.12 dev eth0
    #echo "DEBUG args: $DAEMON_ARGS eibdi: $EIBD_I eibdt: $EIBD_T eibdr: $EIBD_R backend: $EIBD_BACKEND url: $EIBD_URL port: $EIBD_PORT addrtab: $EIBD_BCUADDRTAB"
    # 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
        do_init
    echo "*** Starting $DESC: $NAME using $EIBD_URL" 
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $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.
        sleep 2
        chmod a+rw /tmp/eib
}
#
# 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
        route delete 224.0.23.12
        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 using $EIBD_URL" "$NAME"
        do_start
        case "$?" in
                0|1) log_end_msg 0 ;;
                2) [ log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    echo "*** Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) log_end_msg 0 ;;
                2) [ log_end_msg 1 ;;
        esac
        ;;
  #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
        #
        echo "*** Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
        sleep 2
                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|restart|force-reload}" >&2
        exit 3
        ;;
esac
linknx:
Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          linknx
# Required-Start:    $local_fs $remote_fs eibd
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: linknx initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

# Author: <mm@elabnet.de>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.

# 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="service"
NAME=linknx
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
DAEMON_ARGS="-c/var/lib/linknx/linknx.xml -p $PIDFILE -d/var/log/linknx.log -w"
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
# Temp-fix! remove surrounding whitespaces from seperator '='
[ -r /etc/default/$NAME ] && cat /etc/default/$NAME | sed 's/ =/=/' | sed 's/= /=/' > /etc/default/$NAME.out
[ -r /etc/default/$NAME.out ] && . /etc/default/$NAME.out

# 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

#
# 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 -- \
                $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
        ;;
  #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|restart|force-reload}" >&2
        exit 3
        ;;
esac

:
Diese können wir dann mit
Code:
update-rc.d eibd defaults
update-rc.d linknx defaults
automatisch starten lassen.

linknx will übrigens eine linknx.xml in /var/lib/linknx.

Dann kommt die CometVisu und der benötigte Webserver, ich habe lighttpd benutzt:

Code:
groupadd www-data
apt-get install lighttpd php5-cgi
lighttpd-enable-mod cgi fastcgi fastcgi-php
Die Gruppe www-data wird aus irgendeinem Grund dpkg nicht angelegt, deswegen machen wir das manuell.
Ausserdem gibt's zumindest bei mir ein Problem mit den cgi's, das ich durch einen edit in /etc/lighttpd/conf-enabled/10-cgi.conf lösen konnte.

Man ergänze den Teil um $HTTP wie folgt:

Code:
$HTTP["url"] =~ "^/cgi-bin/" {
        alias.url       += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
        cgi.assign = ( "" => "" )
}
Dann noch ein
Code:
/etc/init.d/lighthttpd restart
Und wir können uns an die Cometvisu machen:

Code:
cd /var/www
wget http://downloads.sourceforge.net/project/openautomation/CometVisu/CometVisu_0.6.2.tar.bz2
tar -jxvf CometVisu_0.6.2.tar.bz2
cd  release_0.6.2
mv visu /var/www
cd ..
chown -R www-data:www-data visu
Dann fehlen uns noch die Links auf r und w:

Code:
cd /usr/lib/cgi-bin
ln -s /usr/local/bin/eibread-cgi r
ln -s /usr/local/bin/eibwrite-cgi w
Sowie das 'l' File, das auch in cgi-bin liegen muss und folgenden Inhalt hat:

Code:
#!/bin/sh
echo Content-Type: text/plain
echo

echo "{ \"v\":\"0.0.1\", \"s\":\"SESSION\" }"
Das war's :-)

Mit einer sinnvoll gefütterten linknx.xml tut's die Logik, und auch die Basis-Funktionen der Visu funktionieren. Mir fehlt noch der ganze rrd-Teil, da muss ich mich mal drangeben.

Ich hatte eine visu_config.xml und eine linknx.xml, die ich von meinem amd64-Server, ebenfalls unter Squeeze, einfach nur rüberkopierte. Auf den ersten Blick fühlt sich der Pi in der Visu nicht wirklich langsamer als der "richtige" PC an.

Geändert von johnnychicago (21.06.2012 um 23:37 Uhr) Grund: Fehlende -cgi in CometVisu-Install verbessert
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 18.06.2012, 21:58
Benutzerbild von Chris M.
Erfahrener Benutzer
 
Registriert seit: 14.12.2008
Ort: Oberbayern
Beiträge: 5.592
Standard

Zitat von johnnychicago Beitrag anzeigen
Ich hab's mal aufgeschrieben, falls wer damit was anfangen kann.
Sehr schön!
Zitat von johnnychicago Beitrag anzeigen
Ich hatte eine visu_config.xml und eine linknx.xml, die ich von meinem amd64-Server, ebenfalls unter Squeeze, einfach nur rüberkopierte. Auf den ersten Blick fühlt sich der Pi in der Visu nicht wirklich langsamer als der "richtige" PC an.
Das soll auch genau so sein. Anforderung bei der ganzen CometVisu Entwicklung war immer, dass eine Fritz!Box ausreichen muss (für die Grundfunktionalität), da dürfte der Pi wohl noch deutlich mehr Dampf haben...
__________________
TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 18.06.2012, 23:04
Benutzer
 
Registriert seit: 09.05.2012
Ort: Kehl
Beiträge: 151
Standard

Danke für die Anleitung.

Ich werde das mal in meiner KVM Umgebung testen.
Wie viel RAM hast du deinem System zugestanden?

Gruß
Lothar
__________________
--
Gruß
Lothar
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 18.06.2012, 23:40
Benutzer
 
Registriert seit: 03.03.2011
Ort: Luxembourg
Beiträge: 256
Standard

Der Pi hat afair 256MB - aber ich verstehe nicht, wieso Du das in einem KVM nachbauen wolltest. Wäre da was x86es nicht naheliegender?
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 19.06.2012, 08:56
Benutzer
 
Registriert seit: 09.05.2012
Ort: Kehl
Beiträge: 151
Standard

Zitat von johnnychicago Beitrag anzeigen
Der Pi hat afair 256MB - aber ich verstehe nicht, wieso Du das in einem KVM nachbauen wolltest. Wäre da was x86es nicht naheliegender?
Guten Morgen,

danke für die Info.
KVM ist eine PC Virtualisierung. Also entspricht das schon einem x86

Gruß
__________________
--
Gruß
Lothar
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #6  
Alt 19.06.2012, 09:26
Benutzer
 
Registriert seit: 03.03.2011
Ort: Luxembourg
Beiträge: 256
Standard

Dann ist die Sache noch mal bedeutend einfacher, weil Du die 386-Pakete direkt aus dem Wiregate-Repo apt-getten kannst. Die Kompiliererei kannst Du Dir dann komplett sparen :-)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #7  
Alt 19.06.2012, 10:56
Benutzer
 
Registriert seit: 28.09.2008
Ort: Steinweiler
Beiträge: 77
Standard

Hi,

erstmal ein DANKE ! für die Anleitung. Wie greifst du auf den EIB zu ? Mittels IP Schnittstelle oder mittels USB ?
Ich habe eine USB Schnittstelle und da funktioniert der Mount nicht, da der Pfad proc/bus/usb/ nicht vorhanden ist.
Ist das bei dir auch so ?

Gruß Jochen
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #8  
Alt 19.06.2012, 11:06
Benutzerbild von dundee
Erfahrener Benutzer
 
Registriert seit: 07.06.2007
Ort: Poxdorf
Beiträge: 591
Standard

Sehr schöne, übersichtliche Anleitung!
Danke!
__________________
Ciao
Olaf
Nichts ist so gerecht verteilt, wie der Verstand.
Jeder meint, genug davon zu haben.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #9  
Alt 19.06.2012, 11:08
Benutzer
 
Registriert seit: 03.03.2011
Ort: Luxembourg
Beiträge: 256
Standard

Ich habe eine USB-Aktor-Netzteil-Kombo von Lingg+Jahnke, an der der Raspberry hängt. /proc/bus/usb gibt es bei mir auch nicht.

Was meldet findknxusb denn bei Dir? Hier ist's:
Code:
root@raspberrypi:/proc/bus# findknxusb
Possible addresses for KNX USB devices:
device: 1:6:1:0:0 (Lingg & Janke:KNX/EIB-USB Interface (DIN rail))
und eibd wird mit
Code:
eibd -d -u --eibaddr=1.1.100 -c -DTS -R -i --pid-file=/var/run/eibd.pid usb:1:6
gestartet.

Was nicht tut - dem Spass aber momentan nicht schadet - ist das setzen der eibaddr. Obwohl ich 1.1.100 vorgebe, bleibt sie auf 0.0.0
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #10  
Alt 19.06.2012, 11:15
Benutzer
 
Registriert seit: 28.09.2008
Ort: Steinweiler
Beiträge: 77
Standard

Oki, ich hab ne Jung USB schnittstelle.

Bei mir kommt nichts zurück mit fndknxusb.
Ich werde meine SD Karte mal löschen und nochmals mit deiner Anleitung von vorne beginnen. Evtl. hab ich irgendwo beim compilieren was übersehen.

Meld mich dann nochmal.

Jochen
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Stichworte
cometvisu, eibd, linknx, raspberry

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
welche Parameter für PI Regler Reason555 KNX EIB Forum 38 09.03.2012 13:43
PI Regelung Stetig - schlechte Regelung? sharkx KNX EIB Forum 42 12.01.2011 09:26
[KNX/EIB] Heizungsregelung 2 Punkt, PI, PWM was ist schlau Brandi KNX EIB Forum 61 01.10.2010 11:22
Fussbodenheizung PI oder nicht peru KNX EIB Forum 2 11.04.2010 01:56
[Codebeispiel] PI Regler enertegus eibPC 2 19.11.2009 20:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:07 Uhr.