Ankündigung

Einklappen
Keine Ankündigung bisher.

eibd/linknx/cometvisu auf raspberry pi

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    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.

    #2
    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 als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      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

      Kommentar


        #4
        Der Pi hat afair 256MB - aber ich verstehe nicht, wieso Du das in einem KVM nachbauen wolltest. Wäre da was x86es nicht naheliegender?

        Kommentar


          #5
          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

          Kommentar


            #6
            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 :-)

            Kommentar


              #7
              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

              Kommentar


                #8
                Sehr schöne, übersichtliche Anleitung!
                Danke!
                Ciao
                Olaf
                Nichts ist so gerecht verteilt, wie der Verstand.
                Jeder meint, genug davon zu haben.

                Kommentar


                  #9
                  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

                  Kommentar


                    #10
                    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

                    Kommentar


                      #11
                      Na, mal nicht so schnell!

                      findknxusb gibt's bei Dir? Dann hat die Compiliererei schon mal warscheinlich geklappt

                      was sagt dmesg denn, wenn Du das USB-Kabel einsteckst?

                      Kommentar


                        #12
                        Da erscheint die USB Schnittstelle.
                        Da ich aktuell nicht davor sitze kann ich keine CodeSchnipsel reinpasten.

                        Jochen

                        Kommentar


                          #13
                          Hallo.

                          In der Doku sind noch ein paar Fehler.

                          z.B. muss auf einem Jungfräulichem Debian die Compilerumgebung installiert werden.

                          apt-get install build-essential <- Da ist einfach alles drinnen

                          Das TAR-Verzeichnis für die Eigenbau Programme sollte wohl /usr/src sein.

                          pdate-rc.d defaults eibd
                          pdate-rc.d defaults linknx

                          Funktionieren bei mir nicht.
                          --
                          Gruß
                          Lothar

                          Kommentar


                            #14
                            Zitat von lo4dro Beitrag anzeigen
                            Hallo.

                            In der Doku sind noch ein paar Fehler.
                            Da geh' ich von aus - ich hab's nebenher mitgeschrieben, und musst bei verschiedenen Dingen mehrmals probieren, bis ich durch war.

                            z.B. muss auf einem Jungfräulichem Debian die Compilerumgebung installiert werden.

                            apt-get install build-essential <- Da ist einfach alles drinnen
                            Der Raspberry braucht das nicht, da ist alles soweit an Bord. Hatte mich auch erstaunt, macht aber vor dem Hintergrund, dass das Teil zum Programmieren-Lernen konzipiert ist, Sinn.


                            pdate-rc.d defaults eibd
                            pdate-rc.d defaults linknx

                            Funktionieren bei mir nicht.
                            Bei mir auch nicht :-)

                            Richtig wäre update-rc.d eibd defaults bzw update-rc.d linknx defaults

                            Kommentar


                              #15
                              Hallo,

                              folgende Datei fehlt: /etc/default/eibd

                              Gibt es Beispiele wie die /etc/default/eibd aufgebaut sein muss für die unterschiedlichen Schnittstellen?

                              Ah, ich kann also die Wiregate Binarys direkt nutzen und spare mir dadurch das selber bauen.

                              Reicht ein apt-get install eibd-server eibd-clients
                              --
                              Gruß
                              Lothar

                              Kommentar

                              Lädt...
                              X