Ankündigung

Einklappen
Keine Ankündigung bisher.

eibd für smarthome

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

    KNX/EIB eibd für smarthome

    Hallo zusammen,

    ich versuche mich gerade darin auf meinem Raspberry Pi B+ smartVISU, mit smorthome.py zum laufen zubringen. Die Anbindung an den KNX-Bus erfolgt über einen TUL und eibd.
    eibd habe ich zum laufen gebracht; man kann den Pi als KNX/IP verwenden.
    Bei der Installation von sh.py , smartVISU habe ich mich an diese Anleitung gehalten.
    Hier wird jedoch ein anderes Skript zum Starten und Konfiguration des eibd-Daemon verwendet.
    Hier scheint jedoch ein Syntaxfehler enthalten zu sein, den ich nicht finde.
    Die Fehlermeldung sieht wie folgt aus:
    Code:
    pi@raspberrypi ~ $ /etc/init.d/eibd start
    -bash: /etc/init.d/eibd: /bin/sh^M: bad interpreter: No such file or directory
    Die default-Konfiguration (/etc/default/eibd) habe ich wie folgt für meinen TUL angepasst:
    Code:
    EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
    EIB_ADDR="0.0.1"
    EIB_IF="tpuarts:/dev/ttyACM0"
    EIB_UID="smarthome"
    Das Daemon-Skript sieht wie folgt aus (oder siehe Anhang):
    Code:
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          eibd
    # Required-Start:    $syslog $network
    # Required-Stop:     $syslog $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start the eib daemon.
    ### END INIT INFO
    
    DESC="KNX daemon 'eibd'"
    NAME=eibd
    EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
    EIB_UID="smarthome"
    
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    DAEMON=/usr/bin/$NAME
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    [ -x "$DAEMON" ] || exit 0
    
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    DAEMON_ARGS="$EIB_ARGS --pid-file=$PIDFILE --eibaddr=$EIB_ADDR $EIB_IF"
    
    . /lib/init/vars.sh
    
    do_start()
    {
        touch $PIDFILE
        chown $EIB_UID $PIDFILE
        start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
        start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
    }
    
    do_stop()
    {
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        rm -f $PIDFILE 2> /dev/null
        return "$RETVAL"
    }
    
    do_reload() {
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
    }
    
    case "$1" in
        start)
            do_start
            ;;
        stop)
            do_stop
            ;;
        #reload|force-reload)
            #echo "Reloading $DESC" "$NAME"
            #do_reload
            #log_end_msg $?
            #;;
        restart)
            #
            # If the "reload" option is implemented then remove the
            # 'force-reload' alias
            #
            echo "Restarting $DESC" "$NAME"
            do_stop
            sleep 1
            do_start
            ;;
        *)
            echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
            exit 3
            ;;
    esac
    exit 0
    Sieht ihr das Problem, das zu der oben genannten Fehlermeldung führt?

    Vielen Dank & Grüße
    NehCoy

    #2
    Anbei nochmal das Skript, aht vorhin nicht funktioniert.
    Bei "eibd_geht" handelt es um das Daemon-Skript der eibd-Installation, das bisher funktioniert hat:
    Code:
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          eibd
    # Required-Start:    $syslog $network
    # Required-Stop:     $syslog $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start the eib daemon.
    ### END INIT INFO
    
    DESC="KNX daemon 'eibd'"
    NAME=eibd
    EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
    EIB_UID="smarthome"
    
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    DAEMON=/usr/bin/$NAME
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    [ -x "$DAEMON" ] || exit 0
    
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    DAEMON_ARGS="$EIB_ARGS --pid-file=$PIDFILE --eibaddr=$EIB_ADDR $EIB_IF"
    
    . /lib/init/vars.sh
    
    do_start()
    {
        touch $PIDFILE
        chown $EIB_UID $PIDFILE
        start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
        start-stop-daemon --start --quiet --chuid $EIB_UID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
    }
    
    do_stop()
    {
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        rm -f $PIDFILE 2> /dev/null
        return "$RETVAL"
    }
    
    do_reload() {
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
    }
    
    case "$1" in
        start)
            do_start
            ;;
        stop)
            do_stop
            ;;
        #reload|force-reload)
            #echo "Reloading $DESC" "$NAME"
            #do_reload
            #log_end_msg $?
            #;;
        restart)
            #
            # If the "reload" option is implemented then remove the
            # 'force-reload' alias
            #
            echo "Restarting $DESC" "$NAME"
            do_stop
            sleep 1
            do_start
            ;;
        *)
            echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
            exit 3
            ;;
    esac
    exit 0
    Angehängte Dateien

    Kommentar


      #3
      Hallo NehCoy,

      ich rate jetzt mal völlig aus dem Bauch raus:
      Eine /bin/sh ist schon installiert, oder?

      Was sagt er denn, wenn du in einer Shell /bin/sh als Kommando eingibst?
      Findet er es?

      Andere Idee:
      Code:
      pi@raspberrypi ~ $ /etc/init.d/eibd start -bash: /etc/init.d/eibd: /bin/sh^M: bad interpreter: No such file or directory
      Das ^M sieht komisch aus.
      Kann es sein, dass du das Startscript mit einem Windows-Editor bearbeitet hast?
      Ich kann mir zwar nicht vorstellen, dass sich Linux da wirklich dran stört.
      Aber die Fehlermeldung sieht irgendwie danach aus.

      Probier mal auf Commandline:
      Code:
      dos2unix /etc/init.d/eibd
      Wenn du kein dos2unix drauf hast:
      Code:
      cat /etc/init.d/eibd | tr -d '\r'> /etc/init.d/eibd_neu
      Danach testen:

      Code:
      pi@raspberrypi ~ $ /etc/init.d/eibd_neu start
      Wenn es jetzt funktioniert, dann eibd_neu in eibd umbenennen - und genießen.
      Ciao
      Olaf
      Nichts ist so gerecht verteilt, wie der Verstand.
      Jeder meint, genug davon zu haben.

      Kommentar


        #4
        Zitat von dundee Beitrag anzeigen
        Kann es sein, dass du das Startscript mit einem Windows-Editor bearbeitet hast?
        Ich kann mir zwar nicht vorstellen, dass sich Linux da wirklich dran stört.
        Aber die Fehlermeldung sieht irgendwie danach aus.
        Doch, daran stört sich Linux.
        Deshalb ist ja immer wieder der Hinweis zu lesen nur einen Editor zu verwenden der damit umgehen kann.
        Hier wird das übrigens erklärt.

        Gruß,
        Norbert

        Kommentar


          #5
          Hallo zusammen!

          Danke für die Antworten.
          Also erstellt habe ich das Skript, wie in der Anleitung beschrieben mit Nano:
          Code:
          cd /etc/init.d nano eibd
          Aber ja, hier scheint dennoch was schief gegangen zu sein, was die Zeilenumbrüche angeht. Zugegeben, habe ich später unter Windows mit dem Notepad++ die Dateien angeschaut. Hier gab es zwar in der Vergangenheit nie Probleme mit den Zeilenumbrüchen, aber ich mag nicht ausschließen, dass es daher kommt.
          Sei's drum; der Befehl
          Code:
          cat /etc/init.d/eibd | tr -d '\r'> /etc/init.d/eibd_neu
          sorgt dafür, dass die besagt Fehlermeldung nicht erscheint.

          Was aber auch nicht besser ist:
          Der Daemon wird ohne Fehlermeldung nicht gestartet.
          Code:
          ps aux|grep eibd
          zeigt nichts an.

          Das gleiche ist aber auch bei dem "alten" Skript, dass bisher funktioniert hat. :-(
          Das manuelle Starten funktioniert:
          Code:
          eibd -i -D -T -S -d --eibaddr=1.1.251 tpuarts:/dev/ttyACM0
          Irgendwas scheint durch die Installation von smartVISU und smarthome.py "zerschossen" worden zu sein.

          Grüße
          NehCoy

          Kommentar


            #6
            Hallo NehCoy,

            Zitat von NehCoy Beitrag anzeigen
            Was aber auch nicht besser ist:
            Der Daemon wird ohne Fehlermeldung nicht gestartet.
            Code:
            ps aux|grep eibd
            zeigt nichts an.
            Hmmm...
            Keine Execute-Rechte gesetzt?

            Kannst du mit
            Code:
            ls -l /etc/init.d
            angucken.

            Ändern dann bei Bedarf mit chmod.

            Sehr hilfreich ist, wenn du den eibd zu Testzwecken bei Startproblemen nicht als Deamon startest.
            Dann gibt er nämlich alle seine Meldungen direkt in der Console raus.
            Dazu musst du die Option -d (oder könnte auch -D sein) weglassen.
            Ciao
            Olaf
            Nichts ist so gerecht verteilt, wie der Verstand.
            Jeder meint, genug davon zu haben.

            Kommentar


              #7
              Hallo Dundee,

              danke für deine Antwort!
              Nene, alles gut, was die Berechtigungen angeht.
              Anderfalls würde ich die Meldung erhalten, dass ich entweder nicht die Berechtigung habe, oder dass der Befehl unbekannt ist. ;-)

              Die Parameter -d für Daemon (-D ist für Discovery) werde ich mal im Skript weglassen, in der Hoffnung, dass man dann was in den Logdateien findet.

              EDIT:
              Habe mal den Parameter --daemon entfernt und den Pi neu gestartet.
              Sehe in /var/log/messages und /var/log/kern.log keine Einträge, die eibd betreffen.
              Gestartet ist eibd dennoch nicht (ps aux|grep eibd).

              Viele Grüße
              NehCoy

              Kommentar


                #8
                Zitat von NehCoy Beitrag anzeigen
                Habe mal den Parameter --daemon entfernt und den Pi neu gestartet.
                Sehe in /var/log/messages und /var/log/kern.log keine Einträge, die eibd betreffen.
                Schau dir mal "eibd --help" an. Dort steht dann:
                Code:
                  -d, --daemon[=FILE]        start the programm as daemon, the output will be
                                             written to FILE, if the argument present
                Mit der Angabe eines Files solltest du dann eigentlich Logs bekommen (sofern er überhaupt so weit aufstartet). Dafür sollte eigentlich dann der Aufrufe des init-Scripts reichen, ein Neustart ist dafür nicht nötig.

                Gruss, Othmar
                EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

                Kommentar


                  #9
                  Hi,

                  das ist wohl mindestens ein Copy&Paste Fehler drin.

                  Erst einmal ^M ist nicht \r.

                  Zweitens, nach dem Shebang (#!) kommt kein Leerzeichen.

                  Btw. es wird schwer bis unmöglich ein unixartiges OS zu finden, bei dem keine Shell unter /bin/sh zu finden ist.

                  hth

                  Marcus

                  Kommentar


                    #10
                    Es gibt keinen eibd explizit für smarthome.
                    Wenn die Linux-Kenntnisse fehlen und keine Zeit ist sich da rein zu lesen versuche Zustand 1 wieder herzustellen und das Standard-Startscript zu nutzen. Mit welchem Script der eibd startet ist ziemlich Banane, hauptsache er läuft.
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Hallo NehCoy,

                      Zitat von NehCoy Beitrag anzeigen
                      Die Parameter -d für Daemon (-D ist für Discovery) werde ich mal im Skript weglassen, in der Hoffnung, dass man dann was in den Logdateien findet.
                      Ne, ne...
                      Starte den eibd händisch in einer Shell.
                      Tippe den Befehl auf Commandline ein wie er im Startscript steht, aber lass das -d weg.

                      Dann wirst du in der Shell überhäuft mit Ausgaben des eibd.
                      Und da wirst du auch sicher fündig, warum er nicht mag.

                      Oder auch hilfreich:
                      Im Startscript ziemlich am Anfang ein
                      Code:
                      set -x
                      einfügen.
                      Dann das Startscript händisch aufrufen
                      Code:
                      $ /etc/init.d/eibd
                      In der console bekommst du dann die Ausgaben der im Script aufgerufenen Programme und noch einiges mehr.
                      Ciao
                      Olaf
                      Nichts ist so gerecht verteilt, wie der Verstand.
                      Jeder meint, genug davon zu haben.

                      Kommentar


                        #12
                        Hallo zusammen!

                        Wie gesagt:
                        eibd kann ich manuell starten, ohne Probleme bzw. Fehlermeldung.
                        Es wir nur nicht mehr automatisch gestartet.

                        Weder mit dem Skript von der eibd-Installation, noch von der smarthome.py / smartVISU-Installation.
                        Die eibd-Installation war "zuerst" da und hatte funktioniert. Danach habe ich zunächst gemäß der Anleitung smarthome.py und anschließend smartVISU installiert. An den Zugriffsrechten und eingetragenen Usern, wie sie in der Installationsanleitung von "Michls Tech Blog" stehen hat sich nach meinen Erkenntnissen durch die Installation vom smarthome.py und smartVISU nichts geändert.

                        Das Leerzeichen beim Shebang des Skripts von der Installationsanleitung für smarthome.py und smartVISU kommt daher, dass ich es mal eingeüfgt habe um zu testen, ob es daran liegt. Im Skript von "Michls Tech Blog" ist ein Leerzeichen vorhanden.

                        Werde mal im Skript beim Daemon-Parameter ein Logfile angeben.
                        Mal sehen, was dann raus kommt.

                        Danke & Grüße
                        NehCoy

                        Kommentar


                          #13
                          Geht, aber dennoch nicht 100% schlau

                          Hallo zusammen,

                          am WE hatte ich endlich Zeit mich dem Problem anzunehmen.
                          Das Skript von KNX/EIB Gateway with Raspberry PIMichls Tech Blog hat ohne weitere Anpassung oder sonstige Änderung wieder funktioniert.
                          Der Fehler lag wohl darin, dass ich beide Skripts im /etc/init.d/ Verzeichnis hatte.
                          Zwar das eine umbenannt, aber dennoch ausführbar. War wohl nicht genug-
                          Habe jetzt als die Executable Flags vom nicht verwendeten Skript aus der Installationsanleitung für sh.py , smartVISU entfernt.
                          Also das Skript von der Installationsanleitung für sh.py , smartVISU habe ich nicht zum laufen gebracht. Ich vermute, dass es darin liegt, dass die Umgebungsvariablen, die in /etc/default/eibd festgelegt werden, im System nicht gesetzt werden, obwohl der Befehl
                          Code:
                          update-rc.d eibd defaults
                          ausgeführt wird.
                          Der Befehl "printenv" zeigt mir die Variablen auf jeden Fall nicht an, die wie folgt in der Datei /etc/default/eibd hinterlegt sind:
                          Code:
                          EIB_ARGS="--daemon --Server --Tunnelling --Discovery --GroupCache --listen-tcp"
                          EIB_ADDR="0.0.1" EIB_IF="ipt:<ip-des-knx-ip-modules>"
                          EIB_UID="smarthome"
                          Naja, wieder was gelernt.

                          Vielen Dank & viele Grüße
                          NehCoy

                          Kommentar


                            #14
                            Zitat von NehCoy Beitrag anzeigen
                            Sieht ihr das Problem, das zu der oben genannten Fehlermeldung führt?
                            Das Leerzeichen nach #! am Anfang kommt mir spanisch vor. Ändere die Zeile mal in
                            Code:
                            #!/bin/sh
                            Max

                            Kommentar


                              #15
                              Shebang - Mit oder ohne Leerzeichen

                              Stimmt ... das habe ich gar nicht mehr rückgängig gemacht getestet.
                              Diese kleine Änderung kam von mir. Im Skript von der eibd-installation ist es auch so geschrieben. Im Installationsskript der Anleitung von KNX/EIB Gateway with Raspberry PIMichls Tech Blog wird dieses angelegt. Hier steht auch "#! /bin/sh" ....
                              Von daher glaube ich nicht, dass es daran liegt.

                              Viele Grüße
                              NehCoy

                              Kommentar

                              Lädt...
                              X