Ankündigung

Einklappen
Keine Ankündigung bisher.

Knxd USB unter SystemD

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

    Knxd USB unter SystemD

    Hallo Leute,

    Nach mehrmaligen Versuchen Knxd unter SystemD zum laufen zu bringen muss Ich mich schlussendlich an die Profis wenden.


    Mein System ist ein Raspberry pi2 worauf Debian Jessi installiert ist. Der Raspberry ist per Usb an eine ABB S1.1 Schnittstelle verbunden.

    Knxd wurde fehlerfrei nach dieser Anleitung https://github.com/knxd/knxd installiert.

    In einen anderen Thread wies Bigblue1735 darauf hin in /etc/init.d/knxd die Daemon Args wie folgt zu ändern.
    (DAEMON_ARGS="--daemon=/var/log/knxd.log -D -T -R -S -i -u --eibaddr=1.1.128 usb:1:5:1:0:0")

    Jedoch wird diese Methode unter SystemD(Debian Jessi) nicht mehr unterstützt.

    Laut meinen Recherchen muss bei SystemD die Konfiguration unter /etc/knxd.conf geändert werden.

    Jedoch finde Ich niergens im Netz wie genau diese Zeile ausschauen.
    Getestet habe ich schon: KNXD_OPTS="-u /tmp/eib --eibaddr=1.1.1 -D -T -R -S -b usb:1:4:1:0:0"
    Worauf aber knxd nicht mehr startet.

    Leider komme Ich auf keinen Grünen Zweig und werfe die Frage mal an euch





    #2
    Wenn ich morgen etwas Zeit habe, dann werde ich auf meinen RPi mal das neue Jessie aufspielen. Mal sehen ob ich das hinbekomme mit dem neuen systemd. Der knxd läuft ohne Probleme wenn du ihn "per Hand" startest?

    Kommentar


      #3
      So, habe mir den systemd noch mal angeschaut. Mittlerweile finde ich es sehr viel einfacher als alles andere. Als erstes musst du ein .service file anlegen das wiefolgt aufgebaut ist.

      Code:
      [Unit]
      Description=YOUR TEXT
      After=network-online.target
      
      [Service]
      ExecStart=HERE IS YOUR KNXD COMMAND
      Restart=on-abort
      
      [Install]
      WantedBy=multi-user.target
      anschließend musst du
      Code:
      systemctl enable YOURNAME.service
      Das file legst du am besten in folgendes Verzeichniss: /etc/systemd

      Kommentar


        #4
        Und was genau macht dieses .service file?
        Erstellt hab Ich Sie der genau Pfad wo es gestartet werden konnte ist aber /etc/systemd/system.
        Aber Knxd funktioniert dennoch nicht.

        Hast die Usb Schnittstelle bei dir zum laufen gebracht?

        Kommentar


          #5
          Worum geht es denn jetzt genau? Funktioniert die USB-Schnittstelle nach dem neustart nicht, oder funktioniert es generell nicht?

          Wenn es generell nicht funktioniert, dann müssen wir erst mal da ran.
          Start den knxd mal mit folgenden Befehl. USB-Adresse bitte anpassen.
          Code:
          knxd -D -T -R -S -i -u --eibaddr=1.1.128 usb:1:5:1:0:0
          Was passiert dann? Siehst du in der ETS ein Device?

          Kommentar


            #6
            Nein Sie funktioniert generell nicht. Unter wheezy läuft Sie. Bei Jessi will sie aber nicht laufen.
            Wenn Ich dein oben genannten Befehl starte bekomme Ich diese Fehlermeldung:
            E00000013: OpenInetSocket 6720: bind: Address already in use
            initialisation of the knxd inet protocol failed: Address already in use



            Versuche Ich aber folgenden Befehl :
            knxd --eibaddr=1.1.128 -D -T -R -S -b usb:1:5:1:0:0

            bekomme Ich diesen Fehler:

            E00000029: USBLowLevelDriver: setup config: Device or resource busy
            initialisation of backend 'usb:1:5:1:0:0' failed: Resource temporarily unavailable



            Und nicht das du meinst Ich habe die Usb adresse nicht geändert. Die ist nämlich zufällig gleich :P







            Kommentar


              #7
              Naja das ist ja relativ eindeutig. Es läuft irgendein Dienst auf dem Port, den der knxd belegen möchte (6720). Wenn du die andere USB in nimmst, findet er kein Gerät. Also ist der erste Befehl mit deiner USB in richtig. Jetzt müssen wir nur noch herausfinden welcher Prozess den Port belegt. Dazu gibt es auch einen Befehl, diesen habe ich aber gerade nicht parat. Ich melde mich noch mal.

              Kommentar


                #8
                sudo netstat -tanp | grep 6720

                ;-)

                Die Ausgabe bitte posten.

                Was bewirkt eigentlich dein Parameter "-b"?
                Zuletzt geändert von Andreas1; 05.02.2016, 16:02.

                Kommentar


                  #9
                  Das komische ist das In ETS ein Device erkannt wird über welches Ich auch programmieren kann. Knxtool Groupswrite funktioniert jedoch nicht.
                  -b ist nur falls kein Multicast unterstützt wird.

                  Hier der Output


                  tcp 0 0 127.0.0.1:42438 127.0.0.1:6720 ESTABLISHED 670/python3
                  tcp6 0 0 :::6720 :::* LISTEN 1/init
                  tcp6 8 0 127.0.0.1:6720 127.0.0.1:42503 CLOSE_WAIT -
                  tcp6 11 0 127.0.0.1:6720 127.0.0.1:42438 ESTABLISHED -
                  tcp6 8 0 127.0.0.1:6720 127.0.0.1:42451 CLOSE_WAIT -
                  tcp6 8 0 192.168.1.14:6720 192.168.1.14:56561 CLOSE_WAIT -

                  Kommentar


                    #10
                    Bei dir horcht bereits ein Prozess auf Port 6720, daher kann sich der knxd nicht an diesen Port binden. Was allerdings sehr komisch ist, das ist der Init-Prozess mit PID 1, also die Mutter aller Prozesse. Das kann ich mir gerade nicht erklären.

                    Sieht die Ausgabe direkt nach einem Reboot auch so aus?

                    Kommentar


                      #11
                      direkt nach dem boot siehts so aus:

                      tcp 0 0 127.0.0.1:35946 127.0.0.1:6720 ESTABLISHED 702/python3
                      tcp6 0 0 :::6720 :::* LISTEN 1/init
                      tcp6 11 0 127.0.0.1:6720 127.0.0.1:35946 ESTABLISHED -

                      Kommentar


                        #12
                        Hmm, also das gleiche.
                        Was hast du denn nach der Installation des Raspbian alles installiert?

                        Edit: ah, das ist eine Eigenheit von systemd. Was liefert denn:
                        systemctl -all list-sockets

                        Zuletzt geändert von Andreas1; 05.02.2016, 20:28.

                        Kommentar


                          #13
                          Hier der Output:
                          LISTEN UNIT ACTIVATES
                          /run/systemd/initctl/fifo systemd-initctl.socket systemd-initctl.
                          /run/systemd/journal/dev-log systemd-journald-dev-log.socket systemd-journald
                          /run/systemd/journal/socket systemd-journald.socket systemd-journald
                          /run/systemd/journal/stdout systemd-journald.socket systemd-journald
                          /run/systemd/journal/syslog syslog.socket rsyslog.service
                          /run/systemd/shutdownd systemd-shutdownd.socket systemd-shutdown
                          /run/udev/control systemd-udevd-control.socket systemd-udevd.se
                          /var/run/avahi-daemon/socket avahi-daemon.socket avahi-daemon.ser
                          /var/run/dbus/system_bus_socket dbus.socket dbus.service
                          /var/run/knx knxd.socket knxd.service
                          [::]:6720 knxd.socket knxd.service
                          kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.se


                          Der einzige Befehl der bei mir halbwegs funktioniert ist:

                          sudo knxd --eibaddr=1.1.128 -D -T -R -S -b usb:1:5:1:0:0.

                          Bei diesem Befehl wird der Raspi in ETS angezeigt wobei auch programmieren darüber möglich ist. Jedoch hängt die Konsole nach Eingabe in einer Schleife und Groupswrite funktioniert nicht. Der Output lautet:


                          W00000020: EIBD should not run as root
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2
                          W00000033: RecvError 2



                          Kommentar


                            #14
                            Hi,

                            also der Grund, warum sich dein knxd nicht an Port 6720 binden kann ist, dass da bereits ein Prozess läuft, nämlich ein knxd ......

                            Bei dir wird also schon beim Systemstart ein knxd gestartet.
                            Stoppe ihn doch mal mit:
                            systemctl stop knxd.service

                            und dann deaktiviere den automatischen Start mit:
                            systemctl disable knxd.service

                            Viele Grüße
                            Andreas

                            Kommentar


                              #15
                              Hab Ich gemacht.
                              Der Prozess läuft nicht nach dem Neustart.
                              Funktioniert aber trotzdem nicht.


                              KNXD_OPTS sehen wie folgt aus ="-u /tmp/eib --eibaddr=1.1.128 -D -T -R -S -b usb:1:5:1:0:0"

                              Starte ich knxd mit systemctl kommen diese Fehler: sudo systemctl start knxd.service
                              Job for knxd.service failed. See 'systemctl status knxd.service' and 'journalctl -xn' for details.
                              pi@raspberrypi:~ $ systemctl status knxd.service
                              ● knxd.service - KNX Daemon
                              Loaded: loaded (/lib/systemd/system/knxd.service; disabled)
                              Active: activating (auto-restart) (Result: exit-code) since Sun 2016-01-31 16:45:58 UTC; 6s ago
                              Process: 946 ExecStart=/usr/bin/knxd $KNXD_OPTS (code=exited, status=1/FAILURE)
                              Main PID: 946 (code=exited, status=1/FAILURE)



                              Sobald ich versuche knxd per sudo knxd --eibaddr=1.1.128 -D -T -R -S -b usb:1:5:1:0:0 zu starten hab Ich wieder den RecvError 2.

                              Kommentar

                              Lädt...
                              X