Ankündigung

Einklappen
Keine Ankündigung bisher.

KNXD Installation auf Ubuntu - "knxd.service: Failed with result 'exit-code'"

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

    KNXD Installation auf Ubuntu - "knxd.service: Failed with result 'exit-code'"

    Hallo allerseits,
    Ich versuche knxd zu benutzen, um auf einem KNX-Bus Pakete mitzulesen. Auf dem Bus ist ein MDT-IP-Interface [1] und ein KNX IO 511 secure Schaltaktor angeschlossen, und zwar mit den Adressen 1.1.8 und 1.1.1. Wenn ich unter Windows die ETS5-Software benutze und mich per Ethernet an das IP-Interface hänge, kann ich sehen, dass das IP-Interface die IP-Adresse 169.254.160.36, den Port 3671 und die wir bereits erwähnte physikalische Adresse 1.1.8 hat.
    Den Schaltaktor habe ich so konfiguriert, dass er alle 10 Sekunden ein Telegramm über den Bus sendet, nur damit ich sehe, ob ich etwas empfangen kann.

    Unter Ubuntu möchte ich nun knxd benutzen, um auf dem Bus mitzuschneiden, was für Telegramme über den Bus gehen.

    Ich habe die Anleitung [2] hier im Forum natürlich gelesen.
    Ich hab vom stable branch aus dem git installiert und die Konfigurationsdatei wie folgt angepasst:

    KNXD_OPTS="-e 0.0.1 -E 0.0.2:8 -c -b ipt:169.254.160.36"
    START_KNXD=YES

    Dann benutze ich
    sudo systemctl stop knxd.service
    sudo systemctl stop knxd.socket
    sudo systemctl start knxd.socket
    sudo systemctl start knxd.service
    sudo systemctl status knxd.socket
    sudo systemctl status knxd.service

    Und socket und service werden mir beide mit einem erfreulichen grünen Punkt als aktiv angezeigt.
    Nach ungefähr 10s jedoch hört der Service auf, aktiv zu sein, und stattdessen kommt als Status die folgende Anzeige:

    ● knxd.service - KNX Daemon
    Loaded: loaded (/lib/systemd/system/knxd.service; disabled; vendor preset: enabled)
    Active: activating (auto-restart) (Result: exit-code) since Do 2018-08-02 16:38:20 CEST; 310ms ago
    Process: 2928 ExecStart=/usr/bin/knxd $KNXD_OPTS (code=exited, status=1/FAILURE)
    Main PID: 2928 (code=exited, status=1/FAILURE)

    Aug 02 16:38:20 javert systemd[1]: knxd.service: Unit entered failed state.
    Aug 02 16:38:20 javert systemd[1]: knxd.service: Failed with result 'exit-code'.



    Jetzt habe ich schon massenweise Foren durchsucht, kann aber nicht finden, was mein Problem ist. Über Hilfestellungen und Anregungen wäre ich enorm froh. Meine Ubuntu-Kenntnisse sind mittel, meine KNX-Kenntnisse sind noch auf blutigem Anfänger-Niveau.

    Vielen herzlichen Dank im Voraus für die Mühe!




    [1] Ich glaube das hier https://www.voltking.de/mdt-scn-ip00...e-2te-reg.html
    [2] https://knx-user-forum.de/forum/proj...chreiben-lesen

    #2
    Zitat von Sorokine Beitrag anzeigen
    Über Hilfestellungen und Anregungen wäre ich enorm froh. Meine Ubuntu-Kenntnisse sind mittel, meine KNX-Kenntnisse sind noch auf blutigem Anfänger-Niveau.
    Klare Fehler kann ich nicht erkennen. Speziell finde ich, dass du einen APIPA Adressbereich verwendest. Weshalb definierst du kein eigenes IP-Netz? Und bist du sicher, dass dein Ubuntu im gleichen Netz ist?
    Die Zeile "START_KNXD=YES" ist komplett überflüssig. Das Stoppen und Starten des Service wird über systemd gehandhabt.

    Zum Debuggen empfehle ich dir, knxd.service und knxd.socket zu stoppen und stattdessen knxd manuell zu starten und zwar mit diesen Optionen:
    knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -i -t 1023 -b ipt:169.254.160.36
    Damit sollte klarer werden, was nicht passt.
    EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

    Kommentar


      #3
      Ich habe das gleiche Phänomen bei mir auf Debian Jessie, meine Optionen habe ich so eingestellt: KNXD_OPTS=“-e 0.0.1 -E 0.0.2:8 -c -b ip:192.168.0.150
      Ich setze einen ABB IP Router IPR/S2.1 ein, der Zugriff über die ETS funktioniert tadellos. (Port 3671!?, Phys. Adresse 1.1.0 für den Router, 1.1.255 für den Zugriff)
      Wenn ich nun manuell starte mit dem Befehl knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -i -t 1023 -b ip:192.168.0.150 kommt folgendes dabei raus:

      Code:
      Layer 3 [ 9:C.ip/Conn      0.000] registerLink: 9:C.ip
      Layer 3 [ 9:C.ip/Conn      0.000] Start: cfg:C.ip
      Layer 5 [ 9:C.ip/Conn      0.000] down => >up
      Layer 5 [ 9:C.ip/Conn      0.000] Starting
      Layer 2 [10:C.ip/ip        0.000] Open
      Layer 0 [10:C.ip/ip        0.000] Open
      Layer 0 [10:C.ip/ip        0.000] Opened
      Layer 0 [10:C.ip/ip        0.000] Close
      Layer 5 [ 9:C.ip/Conn      0.000] >up => down
      Layer 4 [ 9:C.ip/Conn      0.000] down/error
      Layer 4 [ 9:C.ip/Conn      0.000] down/error
      Layer 4 [ 9:C.ip/Conn      0.000] is down
      F00000000: [ 9:C.ip] Link down, terminating
      Layer 4 [ 9:C.ip/Conn      0.000] Stopping
      Layer 5 [ 9:C.ip/Conn      0.000] down/error => >down
      Layer 4 [ 9:C.ip/Conn      0.000] down/error
      Layer 4 [ 9:C.ip/Conn      0.000] is down
      Layer 2 [10:C.ip/ip        0.001] Destroy

      Kommentar


        #4
        Zitat von pakka Beitrag anzeigen
        Ich habe das gleiche Phänomen bei mir auf Debian Jessie, meine Optionen habe ich so eingestellt: KNXD_OPTS=“-e 0.0.1 -E 0.0.2:8 -c -b ip:192.168.0.150
        ip:192.168.0.150 ist falsch. Entweder ipt:192.168.0.150 für Tunnel oder ip: für Router.

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

        Kommentar


          #5
          Da ich einen Router habe habe ich ip: genommen! Was ist daran falsch?
          Gruß

          Kommentar


            #6
            Daran ist falsch dass man mit Routern über Multicast redet und nicht direkt, folglich musst du da die Multicastadresse angeben. Oder sie gleich leer lassen, weil du die Adresse in deinem Router bestimmt nicht vestellt hast.

            Ich werde wohl schleunigst eine Adressprüfung einbauen müssen … oder die Doku ergänzen. Patches welcome.
            DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

            Kommentar


              #7
              Daran ist ausserdem falsch, dass du in deinem Fall anscheined gleich "-DTRS" verwenden solltest. "-DTS -b ip:" hat noch niemand getestet und ist, weil sowohl -D als auch ip: einen Multicastsocket aufmachen, insofern ein bisschen sinnfrei.
              DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

              Kommentar


                #8
                Tut mir leid, ich bin ja kein Experte auf dem Gebiet Heißt konkret, bei Multikast schreibe ich ip: ohne die konkrete Adresse dahinter zu setzen und auf mysteriöse Weise funktioniert es dann
                In der ETS wird mir dann auch der Zugang über den Server angeboten, auf dem knxd läuft mit der physikalischen Adresse 0.0.1
                Auf meine Linie 1.1 kann also so nicht zugegriffen werden, sollte man dementsprechend in der knxd.conf auf -e 1.1.1 umstellen?
                Wenn ich plane eine zweite Linie mit einem zweiten Router (als Linienkoppler) aufzubauen, wie funktioniert es dann?
                Irgendwie habe ich noch einen Knoten im Kopf, ich verstehe das Prinzip noch nicht richitg :'(

                Kommentar


                  #9
                  Ah, ich lese gerade:
                  Known bugs

                  • ETS programming has not yet been tested
                  Dann nochmal für Dumme: Wenn ich per ETS programmiere stoppe ich meinen knxd, um direkt in der ETS wieder über den IP-Router zugriff zu bekommen. Für smarthomeNG starte ich dann wieder knxd und alles ist prima. Muss ich in der ETS denn ein Dummy-Objekt anlegen für knxd, Stichwort Filtertabelle etc?

                  Kommentar


                    #10
                    Es gibt keine Linien. Es gibt physische Adressen 0.0.1 bis 15.15.254, die du verteilen kannst wie du lustig bist. Traditionell legt man x.y.* auf ein Buskabel und nennt das "Linie x.y", aber das ist Konventionssache.

                    Der knxd hat keine "Filtertabelle". Er weiß lediglich, auf welcher Schnittstelle er welche physische Adresse zuletzt gesehen hat, und weigert sich, Pakete mit demselben Absender von anderen Schnittstellen zu akzeptieren. Dadurch wird wirksam verhindert, dass jemand mit einer Fehlkonfiguration Paketstürme auslöst, die sich nicht bändigen lassen.
                    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

                    Kommentar


                      #11
                      Zitat von pakka Beitrag anzeigen
                      Heißt konkret, bei Multikast schreibe ich ip: ohne die konkrete Adresse dahinter zu setzen und auf mysteriöse Weise funktioniert es dann
                      Nein, myteriös ist das keineswegs. ip: ohne Adresse bedeutet Default-Multicast-Adresse für KNX. Wenn du unbedingt eine eigene verwenden willst, dann kannst du eine valide Multicast Adresse selber setzen und natürlich ebenfalls auf allen anderen Geräten, die im Routing-Modus kommunizieren. Du willst dir das nicht antun. Du kannst natürlich die Default-Multicast-Adresse auch explizit setzen. Aber keinesfalls eine Unicast Adresse.

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

                      Kommentar


                        #12
                        Hallo, hier nochmal Threadersteller, vielen Dank für die bisherigen Antworten!




                        Wenn ich mit
                        knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -i -t 1023 -b ipt:169.254.160.36
                        starte, passiert Folgendes:


                        Code:
                        Layer 3 [12:C.ipt/Conn        0.000] registerLink: 12:C.ipt
                        Layer 3 [12:C.ipt/Conn        0.000] Start: cfg:C.ipt
                        Layer 5 [12:C.ipt/Conn        0.000] down => >up
                        Layer 5 [12:C.ipt/Conn        0.000] Starting
                        Layer 2 [13:C.ipt/ipt         0.000] Open
                        Layer 0 [13:C.ipt/ipt         0.000] Open
                        Layer 0 [13:C.ipt/ipt         0.001] Opened
                        Layer 1 [13:C.ipt/ipt         0.001] Send(020): 08 01 0A 05 27 8C 8B 84 08 01 0A 05 27 8C 8B 84 04 04 02 00
                        Layer 2 [13:C.ipt/ipt         0.001] Opened
                        Layer 4 [12:C.ipt/Conn        0.001] >up
                        Layer 4 [12:C.ipt/Conn        0.001] is >up
                        Layer 0 [13:C.ipt/ipt         0.001] Send(026): 06 10 02 05 00 1A 08 01 0A 05 27 8C 8B 84 08 01 0A 05 27 8C 8B 84 04 04 02 00
                        Layer 1 [13:C.ipt/ipt         10.001] Connect timed out
                        Layer 0 [13:C.ipt/ipt         10.001] Close
                        Layer 5 [12:C.ipt/Conn        10.001] >up => down/error
                        Layer 4 [12:C.ipt/Conn        10.001] up/error
                        Layer 5 [12:C.ipt/Conn        10.001] Stopping
                        Layer 5 [12:C.ipt/Conn        10.001] up/error => down
                        Layer 4 [12:C.ipt/Conn        10.001] down/error
                        Layer 4 [12:C.ipt/Conn        10.001] is down
                        F00000000: [12:C.ipt] Link down, terminating
                        Layer 4 [12:C.ipt/Conn        10.001] Stopping
                        Layer 5 [12:C.ipt/Conn        10.001] down/error => >down
                        Layer 4 [12:C.ipt/Conn        10.001] down/error
                        Layer 4 [12:C.ipt/Conn        10.001] is down
                        Layer 2 [13:C.ipt/ipt         10.001] Close


                        Das Resultat mit
                        knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -i -t 1023 -b ip:

                        Code:
                        Layer 3 [12:C.ip/Conn         0.000] registerLink: 12:C.ip
                        Layer 3 [12:C.ip/Conn         0.000] Start: cfg:C.ip
                        Layer 5 [12:C.ip/Conn         0.000] down => >up
                        Layer 5 [12:C.ip/Conn         0.000] Starting
                        Layer 2 [13:C.ip/ip           0.000] Open
                        Layer 0 [13:C.ip/ip           0.000] Open
                        Layer 0 [13:C.ip/ip           0.000] Opened
                        Layer 2 [13:C.ip/ip           0.000] Opened
                        Layer 5 [12:C.ip/Conn         0.000] >up => up
                        Layer 4 [12:C.ip/Conn         0.000] up
                        Layer 5 [12:C.ip/Conn         0.000] Started
                        Layer 4 [12:C.ip/Conn         0.000] up
                        ... und dann passiert weiter nichts.


                        Ich habe es außerdem noch mit
                        knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -t1023 -DTRS -b ip:
                        probiert:

                        Code:
                        Layer 3 [ 6:server/Server     0.000] registerLink: 6:server
                        Layer 3 [11:server/Server     0.000] registerLink: 11:server
                        Layer 3 [11:server/Server     0.001] Start: cfg:server
                        Layer 5 [11:server/Server     0.001] down => >up
                        Layer 8 [11:server/Server     0.001] Open
                        Layer 0 [11:server/Server     0.001] Open
                        Layer 0 [11:server/Server     0.001] Opened
                        Layer 8 [20:router/driver     0.001] OpenD
                        Layer 8 [20:router/driver     0.001] OpenedD
                        Layer 3 [19:router/ConnC      0.001] registerLink: 19:router_19
                        Layer 3 [19:router/ConnC      0.001] Start: cfg:router
                        Layer 5 [19:router/ConnC      0.001] down => >up
                        Layer 5 [19:router/ConnC      0.001] Starting
                        Layer 5 [19:router/ConnC      0.001] >up => up
                        Layer 4 [19:router/ConnC      0.001] up
                        Layer 5 [19:router/ConnC      0.001] Started
                        Layer 4 [19:router/ConnC      0.001] up
                        Layer 8 [11:server/Server     0.001] Opened
                        Layer 5 [11:server/Server     0.001] >up => up
                        Layer 4 [11:server/Server     0.001] up
                        Layer 5 [11:server/Server     0.001] Started
                        Layer 4 [11:server/Server     0.001] up
                        Layer 3 [ 6:server/Server     0.001] Start: cfg:server
                        Layer 5 [ 6:server/Server     0.001] down => >up
                        Layer 8 [ 6:server/Server     0.001] Open
                        Layer 0 [ 6:server/Server     0.001] Open
                        Layer 0 [ 6:server/Server     0.001] Opened
                        Layer 8 [23:router/driver     0.002] OpenD
                        Layer 8 [23:router/driver     0.002] OpenedD
                        Layer 3 [22:router/ConnC      0.002] registerLink: 22:router_22
                        Layer 3 [22:router/ConnC      0.002] Start: cfg:router
                        Layer 5 [22:router/ConnC      0.002] down => >up
                        Layer 5 [22:router/ConnC      0.002] Starting
                        Layer 5 [22:router/ConnC      0.002] >up => up
                        Layer 4 [22:router/ConnC      0.002] up
                        Layer 5 [22:router/ConnC      0.002] Started
                        Layer 4 [22:router/ConnC      0.002] up
                        Layer 8 [ 6:server/Server     0.002] Opened
                        Layer 5 [ 6:server/Server     0.002] >up => up
                        Layer 4 [ 6:server/Server     0.002] up
                        Layer 5 [ 6:server/Server     0.002] Started
                        Layer 4 [ 6:server/Server     0.002] up

                        Und es bleibt so.
                        Selbst wenn ich das Ethernet-Kabel ziehe, ändert sich nichts.


                        Ich sehe aber in keinem Fall die Nachrichten, die eigentlich von 1/1/1 an 1/1/8 verschickt werden sollten. Was mache ich falsch?

                        Vielen Dank nochmal allen für die Mühe!
                        Zuletzt geändert von Sorokine; 15.08.2018, 10:02.

                        Kommentar


                          #13
                          ets.png

                          bus.png


                          Hier noch zwei Screenshots aus meiner ETS-Software, die die Konfiguration zeigen...
                          Angehängte Dateien

                          Kommentar


                            #14
                            Zitat von Sorokine Beitrag anzeigen
                            Ich habe es außerdem noch mit
                            knxd -e 0.0.1 -E 0.0.2:8 -c -D -T -S -t1023 -DTRS -b ip:
                            probiert:
                            das ist ziemlich verwürgt. Nach S kann kein D, T oder R mehr folgen. D und T hast du doppelt und R kannst du nicht zusammen mit ip: verwenden, da beide den Multicast Modus aktivieren. -DTRS alleine reicht dafür.

                            Verzeih mir die Frage: aber bist du dir sicher, dass du eine funktionierende IP-Umgebung hast, wo sich alle Devices gegenseitig pingen können? Beim Einsatz von Multicast sollten auch alle im gleichen Subnetz sein, weil Mulitcast überlichweise nicht geroutet wird.
                            Mich wundert, dass deine Schnittstelle eine IP aus dem APIPA-Netz hat, welches üblicherweise nur in Adhoc-Netzen ohne DHCP und Router zum Einsatz kommt (also eigentlich nie) und wo sich alle Devices selber eine zufällig gewählte IP zuteilen. Nicht gerade eine ideale Umgebung für ein Setup wo dann IP-Adressen in Konfigfiles fest hinterlegt sind.

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

                            Kommentar


                              #15
                              Ich muss mich nochmal hilfesuchend an euch wenden.
                              Ich kriege den knxd-service nicht richtig zum Arbeiten!

                              Ich habe neben dem ABB Router nur noch einen Taster in der Linie. Den Taster konnte ich vom PC über den Router konfigurieren und das Lesen und Schreiben geht (PC per LAN verbunden).
                              Der knxd läuft auf einem virtuellen Debian auf meinem Server.

                              Mit folgender Option erscheint immerhin die Schnittstelle in der ETS, aber ich kann den Taster nicht ansprechen:
                              Code:
                              KNXD_OPTS="-e 1.1.1 -E 1.1.2:8 -D -T -R -S"
                              Ansonsten habe ich noch
                              Code:
                              KNXD_OPTS="-e 1.1.1 -E 1.1.2:8 -c -u /tmp/eib -b ip:"
                              probiert, dann taucht die Schnittstelle aber nicht in der ETS auf, den Taster kann ich in beiden Fällen nicht über seine GA 1/1/31 (Status LED) mit
                              Code:
                              knxtool groupswrite ip:localhost 1/1/31 1
                              ansprechen.
                              In beiden Fällen läuft aber der knxd socket und service Dienst, journalctl -u knxd schreibt nur "starting KNX Daemon" "started KNX Daemon".

                              In der conf-file steht "# Add "-f9 -t1023" to the beginning of the command line for extensive logging." Wie setze ich es aber ein? Bzw. wie bekomme ich mehr logs, um herauszufinden, wo es hakt?
                              Danke euch!

                              Kommentar

                              Lädt...
                              X