Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Autostart von openhab auf Raspberry PI

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

    #16
    Es sieht so aus, als wenn beim Kopieren aus dem Wiki falsche Leerzeichen mitkommen...

    Werde die Datei mal so überarbeiten, dass die raus sind.

    Kommentar


      #17
      Danke für die Hilfe:
      [ ok ] Starting Open Home Automation Bus Daemon:.

      Also, wenn man (zumindest Mac / Safari) aus dem Wikiartikel das Script kopiert, sind alle Leerzeichen am Zeilenanfang korrupt. Wenn man die löscht und wieder hinzufügt startet es!

      Kommentar


        #18
        Hallo,
        dank dieses Themas habe ich es auch hinbekommen, openhab auf dem rasperrypi automatisch starten zu lassen.
        Danke dafür.
        Gibt es nur irgendeine Möglichkeit, zu dieser laufenden Instanz hinzuschalten, um deren Ausgabe zu sehen?

        Und ich habe testweise die Sprachausgabe genutzt, z.B. um eine Info zu bekommen, wenn das System geladen ist.
        Die funktioniert auf diese Weise nicht mehr - offenbar, weil oh nun in einer versteckten Instanz läuft, die nicht auf den Klinkenstecker ausgeben kann.

        Ich kenne mich dazu nicht gut genug in Linux aus, aber bekommt man das hin, dass die Ausgabe klappt?

        Michael

        Kommentar


          #19
          Hi,

          Zitat von maddog Beitrag anzeigen
          Gibt es nur irgendeine Möglichkeit, zu dieser laufenden Instanz hinzuschalten, um deren Ausgabe zu sehen?
          Ja, die gibt es. Allerdings müsste das Startskript derart modifiziert werden, dass der Aufruf nicht direkt mittels "start.sh" erfolgt, sondern über "screen", also in etwa so:
          "screen /opt/openhab/start.sh".
          Dann kannst du dir die Console des laufenden Prozesses wieder herholen.

          Wollte eigentlich schon längst ein Startskript schreiben, was screen verwedet, hatte aber bisher weder Zeit noch Muse. Vielleicht klappts im Winter.

          Gruß,
          Thoern

          Kommentar


            #20
            Hallo Thoern,

            mit screen habe ich auch schon länger rumprobiert.
            An sich wäre das genau das, was ich mir vorstelle.
            Hier habe ich es nur mangels Linux-Kenntnissen nicht hinbekommen, dass die screen-session so gestartet wird, dass später der User "pi" drauf zugreifen kann. Wenn die durch das startup-script gestartet wird, wird sie ja vom root initiiert?!?

            Also irgendwie hat das noch nicht sauber funktioniert bei mir.

            Michael

            Kommentar


              #21
              Hallo,

              also mir reichen die Ausgaben im Log-File.

              mit
              tail -f $openhabpfad/logs/openhab.log
              bekomme ich das, was openhab auch so loggen würde.

              mit
              tail -f $openhabpfad/logs/event.log
              die ausgaben der Events.

              Mehr brauch ich nicht.

              Gruß
              Daniel

              Kommentar


                #22
                Hallo,

                ich versuche openhab über das folgende Skript zu starten:
                Code:
                #! /bin/sh
                ### BEGIN INIT INFO
                # Provides:          openhab
                # Required-Start:    $remote_fs $syslog
                # Required-Stop:     $remote_fs $syslog
                # Default-Start:     2 3 4 5
                # Default-Stop:      0 1 6
                # Short-Description: OpenHAB Daemon
                ### END INIT INFO
                
                # Author: Thomas Brettinger 
                
                # 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="Open Home Automation Bus Daemon"
                NAME=openhab
                DAEMON=/opt/java/jdk1.7.0_45/bin/java
                PIDFILE=/var/run/$NAME.pid
                SCRIPTNAME=/etc/init.d/$NAME
                ECLIPSEHOME="/home/openhab/openhab-runtime-1.3.1";
                HTTPPORT=8080
                HTTPSPORT=8443
                TELNETPORT=5555
                RUN_AS=openhab
                
                # get path to equinox jar inside $eclipsehome folder
                cp=$(find $ECLIPSEHOME/server -name "org.eclipse.equinox.launcher_*.jar" | sort | tail -1);
                
                DAEMON_ARGS="-Dosgi.clean=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djetty.port=$HTTPPORT -Djetty.port.ssl=$HTTPSPORT -Djetty.home=$ECLIPSEHOME -Dlogback.configurationFile=$ECLIPSEHOME/configurations/logback.xml -Dfelix.fileinstall.dir=$ECLIPSEHOME/addons -Djava.library.path=$ECLIPSEHOME/lib -Djava.security.auth.login.config=$ECLIPSEHOME/etc/login.conf -Dorg.quartz.properties=$ECLIPSEHOME/etc/quartz.properties -Djava.awt.headless=true -jar $cp -console ${TELNETPORT}"
                
                # 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 --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --chdir $ECLIPSEHOME --exec $DAEMON --test > /dev/null \
                        || return 1
                    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --chdir $ECLIPSEHOME --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.
                    return 0
                }
                
                #
                # 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.
                    #
                    do_stop
                    sleep 1
                    do_start
                    return 0
                }
                
                case "$1" in
                  start)
                    log_daemon_msg "Starting $DESC"
                    do_start
                    case "$?" in
                        0|1) log_end_msg 0 ;;
                        2) log_end_msg 1 ;;
                    esac
                    ;;
                  stop)
                    log_daemon_msg "Stopping $DESC" 
                    do_stop
                    case "$?" in
                        0|1) log_end_msg 0 ;;
                        2) 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" 
                    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
                
                :
                Mit
                Code:
                sudo /etc/init.d/openhab start
                bekomme ich folgende Meldung:
                Code:
                [ ok ] Starting Open Home Automation Bus Daemon:.
                Sieht eigentlich richtig aus, allerdings passiert weiter nichts. Mit
                Code:
                sudo /etc/init.d/openhab status
                wird mir dann folgendes gemeldet:
                Code:
                [FAIL] openhab is not running ... failed!
                Das Starten über das normale Startskript "start.sh" funktioniert einwandfrei.
                Hat jemand eine Idee welches Problem hier vorliegen könnte???

                Kommentar


                  #23
                  Hallo,

                  das Problem hatte ich auch - liegt wahrscheinlich an einem User Fehler. Im skript steht:

                  RUN_AS=openhab
                  Gibt es den? und wenn ja - hat er die Berechtigung auf die start.sh?

                  Mit welchem User startest du die Start.sh? - trage den mal dort ein und dann sollte es klappen.

                  Grüsse
                  kakaiser

                  Kommentar


                    #24
                    Danke, du hattest Recht! Das Problem ist gelöst und lag an dem User!

                    Kommentar


                      #25
                      Zitat von mepi0011 Beitrag anzeigen
                      Hallo zusammen,

                      in der Zwischenzeit habe ich mich etwas weiter in das Thema Runlevel eingelesen und folgendes herausgefunden:

                      1.) Das Startskript start.sh kann ich von überall gestartet werden

                      z.B. im Home-Verzeichnis habe ich den Ordner openhab-runtime-1.0.0 in der Die Datei start.sh enthalten ist. Versuche ich diese direkt vom Home-Verzeichnis zu starten, erhalte ich eine Fehlermelndung.

                      Als Lösung habe ich mir folgendes Skript erstellt:

                      Code:
                      #!/bin/bash
                      cd /home/pi/openhab-runtime-1.0.0
                      ./start.sh
                      Dieses Skript ist für das eigentliche Problem "Autostart von openhab" nicht relevent!

                      Erster Ansatz für das automatische Starten von openhab während des Bootens des Raspberry PI:

                      1.) folgendes Skript mit dem Namen "openhab" im Ordner /etc/init.d erstellt.
                      Code:
                      [I]#! /bin/sh
                      ### BEGIN INIT INFO
                      # Provides:          starts openhab from home
                      # Required-Start:    
                      # Required-Stop:     
                      # Default-Start:     2 3 4 5
                      # Default-Stop:      0 1 6
                      # Short-Description: Kurze Beschreibung
                      # Description:       Längere Bechreibung
                      ### END INIT INFO
                      # Author: 
                      
                      # Aktionen
                      case "$1" in
                          start)
                              cd /home/pi/openhab-runtime-1.0.0
                              ./start.sh
                              ;;
                          stop)
                              echo "does not work"
                              ;;
                          restart)
                              echo "does not work"
                              ;;
                      esac
                      
                      exit 0
                      [/I]
                      2.) Anschließend im Ordner /etc/rc2.d einen Link auf das Skript "openhab" mit folgendem Befehl erstellt:

                      Code:
                      cd /etc/rc2.d
                      sudo ln -s ../init.d/openhab /etc/rc2.d/S98openhab
                      3.) nach einem Neustart wird openhab automatisch gestartet
                      Code:
                      sudo reboot
                      Fürs erste habe ich eine Lösung, diese ist aber noch nicht 100%ig sauber da beim herunterfahren das Programm nicht korrekt beendet wird. hierzu muss ich das Skript um den Punkt stop erweitern.

                      Kann mir hier jemand weiterhelfen?

                      Gruß
                      mepi0011
                      Hallo ich beschäftige mich erst seit kurzem mit dem Thema. Welche Endung muss die Datei haben? Wäre openhab.sh richtig? Vielen dank und liebe Grüße roy

                      Kommentar


                        #26
                        Hi,

                        Zitat von roy Beitrag anzeigen
                        Welche Endung muss die Datei haben? Wäre openhab.sh richtig?
                        Normalerweise gar keine. Richtig also so:

                        /etc/init.d/openhab

                        Gruß,
                        thoern

                        Kommentar


                          #27
                          Danke für die schnelle Antwort. Schönen Tag noch

                          Kommentar


                            #28
                            Zitat von Zigulle Beitrag anzeigen
                            Hallo,

                            ich hab Dein Skript mal etwas angepasst, damit Du (und ich) das ganze auch Stoppen kannst.

                            Leider bekomme ich das ganze ohne ein cd nicht hin. Dann findet er einige Pfade nicht.

                            Die Datei /etc/init.d/openhab sieht dann folgendermassen aus:

                            Code:
                            #! /bin/sh
                            ### BEGIN INIT INFO
                            # Provides:          starts openhab from home
                            # Required-Start:    $network $remote_fs $syslog
                            # Required-Stop:     $network $remote_fs $syslog
                            # Default-Start:     2 3 4 5
                            # Default-Stop:      0 1 6
                            # Short-Description: Kurze Beschreibung
                            # Description:       Längere Bechreibung
                            ### END INIT INFO
                            # Author:
                            
                            # set ports for HTTP(S) server
                            HTTP_PORT=8080
                            HTTPS_PORT=8443
                            
                            if test -f /etc/default/openhab; then
                                . /etc/default/openhab
                            else
                                echo "Please set OPENHABPATH in /etc/default/openhab"
                                exit 1
                            fi
                            
                            # Aktionen
                            case "$1" in
                                start)
                                    cd $OPENHABPATH
                                    # get path to equinox jar inside $OPENHABPATH folder
                                    cp=$(find ./server -name "org.eclipse.equinox.launcher_*.jar" | sort | tail -1);
                            
                                    echo Launching the openHAB runtime..
                                    java -Dosgi.clean=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djetty.port=$HTTP_PORT -Djetty.port.ssl=$HTTPS_PORT -Djetty.home=. -Dlogback.configurationFile=configurations/logback.xml -Dfelix.fileinstall.dir=addons -Djava.library.path=lib -Djava.security.auth.login.config=./etc/login.conf -Dorg.quartz.properties=./etc/quartz.properties -Dequinox.ds.block_timeout=240000 -Dequinox.scr.waitTimeOnBlock=60000 -Djava.awt.headless=true -jar $cp -console &> /dev/null
                            
                                    echo $! > /var/run/openhab.pid
                                    ;;
                                stop)
                                    echo "stopping openhab"
                                    kill `cat /var/run/openhab.pid`
                                    ;;
                                restart)
                                    echo "does not work"
                                    ;;
                            esac
                            
                            exit 0
                            ausserdem muss ein Config-File in /etc/defaults liegen:

                            Code:
                            # PATH TO OPENHAB
                            OPENHABPATH=/opt/openhab
                            
                            # set ports for HTTP(S) server
                            HTTP_PORT=8080
                            HTTPS_PORT=8443
                            wobei OPENHABPATH den Pfad der Installation angeben muss.

                            Skript ausführbar machen, und mit update-rc.d opehab defaults in die Runlevel eintragen und das ganze sollte laufen.

                            Stoppen kann man mit /etc/init.d/openhab stop

                            Restart ist noch nicht möglich, und ich hab auch noch keinen Schutz gegen Mehrfachstart eingebaut.

                            Gruß
                            Daniel
                            Hallo wie muss das Config-File heisen?
                            LG Roman

                            Kommentar


                              #29
                              Zitat von roy Beitrag anzeigen
                              Hallo wie muss das Config-File heisen?
                              LG Roman
                              Hallo,

                              einfach nur openhab ohne Endung und dies im Verzeichnis
                              /etc/default/ ablegen

                              PS: hier findest du eine Anleitung (siehe Kapitel 3.6)
                              https://knx-user-forum.de/openhab/29...openhab-3.html

                              Gruß
                              mepi0011

                              Kommentar


                                #30
                                Danke für die schnelle Antwort!

                                Kommentar

                                Lädt...
                                X