[gelöst] KNXd Konfiguration - RPi als KNX Gateway mit TUL

Begonnen von Aki1988, 31 Mai 2016, 06:26:15

Vorheriges Thema - Nächstes Thema

Aki1988

Hallo,

Ich bräuchte mal eure Hilfe.
Ich habe vor einen RPi mit Jessie mit einem TUL als KNX Gateway zu verwenden. Ich habe KNXd wie im Wiki (http://www.fhemwiki.de/wiki/Knxd) beschrieben eingerichtet. Die Installation verlief ohne Fehler.
FHEM selbst läuft auf einem anderen PC und nicht auf dem RPi.

Ich habe Probleme bei der Konfiguration. Ich habe schon einige Konfigurationen durchprobiert, ETS5 (auf einer VM) findet das Gateway nicht.

das steht in meiner /etc/knxd.conf, alles andere ist auskommentiert:
DAEMON_ARGS=="-u /tmp/eib -u /var/run/knx -i -D -T -S -e 1.1.251 tpuarts:/dev/ttyACM0"

das steht in meiner /etc/default/knxd , alles andere ist auskommentiert:
START_KNXD=YES

beim Aufruf von sudo knxd -t1023 -c -u /tmp/eib:
Layer 3(01A06C60,574D10EB) Open
Layer 4(01A171E0,574D10EB) GroupCacheInit
Layer 3(01A06C60,574D10EB) registerLayer2 01A171E0
Layer 3(01A06C60,574D10EB) registerLayer2 01A171E0 = 1
Layer 4(01A171E0,574D10EB) GroupCacheEnable
Layer 8(01A17450,574D10EB) OpenLocalSocket /tmp/eib
Layer 8(01A17450,574D10EB) LocalSocket opened
I only have one interface. Nothing to do. Giving up.


habt ihr eine Vermutung wo der Fehler liegen könnte oder könnt ihr zumindest sehen das KNXD korrekt funktioniert?

Vielen Dank :)

smurfix

Zitat von: Aki1988 am 31 Mai 2016, 06:26:15

habt ihr eine Vermutung wo der Fehler liegen könnte
Beim manuellen Aufrufen des knxd werden die Konfigdateien ignoriert. Und da der knxd mit nur der einen Schnittstelle, die du da auf der Befehlszeile erwähnt hast, sinnfrei ist, weigert er sich zu funktionieren.

Abhilfe: Inhalt der Konfigurationsdatei (genauer: den Teil zwischen den Anführungszeichen) mit auf der Befehlszeile angeben.

NB: Strenggenommen ist "-u /tmp/eib" nicht eine einzelne Schnittstelle, sondern der Prototyp für beliebig viele solche (nämlich jedes Programm, das sich mit ihm verbindet), so dass er damit eigentlich trotzdem starten sollte; das ist (auf github) im conn_sep-Zweig repariert.

smurfix

Zitat von: Aki1988 am 31 Mai 2016, 06:26:15
ETS5 (auf einer VM) findet das Gateway nicht.
knxd kommuniziert via IP-Multicast. Stelle sicher, dass diese Multicastpakete auf der VM ankommen. Dabei hilft ggf. wireshark.

Die Defaultmethode, eine VM zu starten, funktioniert so, dass der Host die von der VM gesendeten TCP-Pakete analysiert und daraus geeignete TCP- oder UDP-Verbindungen bastelt. Das willst du nicht, weil damit keine ankommenden Verbindungen möglich sind und Multicast schon gar nicht. Du willst eine richtige Bridge auf deine normale Ethernetschnittstelle.

Wie das geht, können wir dir ggf. sagen, wenn du uns mitteilst, welche VM-Hostsoftware du verwendest.

Aki1988

Hallo, vielen Dank für eure Hilfe. Also als erstes: um Probleme seitens der VM auszuschließen (jeden Fehler nacheinander) habe ich ETS5 auf einem anderen PC lokal installiert.

Als zweites:
ZitatInhalt der Konfigurationsdatei (genauer: den Teil zwischen den Anführungszeichen) mit auf der Befehlszeile angeben.
habe ich so verstanden:
sudo knxd -t1023 -c -u /tmp/eib -u /var/run/knx -i -D -T -S -e 1.1.251 tpuarts:/dev/ttyACM0
Als Rückgabe habe ich:
Layer 3(01AFBC60,574DB545) Open
Layer 4(01B0C1E0,574DB545) GroupCacheInit
Layer 3(01AFBC60,574DB545) registerLayer2 01B0C1E0
Layer 3(01AFBC60,574DB545) registerLayer2 01B0C1E0 = 1
Layer 4(01B0C1E0,574DB545) GroupCacheEnable
Layer 8(01B0C450,574DB545) OpenLocalSocket /tmp/eib
Layer 8(01B0C450,574DB545) LocalSocket opened
Layer 8(01B1C968,574DB545) OpenLocalSocket /var/run/knx
Layer 8(01B1C968,574DB545) LocalSocket opened
Layer 8(01B2CE80,574DB545) OpenInetSocket 6720
Layer 0(01B2CE80,574DB545) OpenInetSocket 6720: bind: Address already in use
E00000013: OpenInetSocket 6720: bind: Address already in use
initialisation of the knxd inet protocol failed: Address already in use

bekommen.

smurfix

Zitat von: Aki1988 am 31 Mai 2016, 18:05:12
E00000013: OpenInetSocket 6720: bind: Address already in use
initialisation of the knxd inet protocol failed: Address already in use

Irgendwas läuft noch. Entweder ein knxd läuft im Hintergrund, oder dein systemd hält den Socket offen.
# systemctl stop knxd.socket
# systemctl stop knxd.service

Aki1988

#5
Hallo,
Ich glaube das KNXD im Hintergrund startet denn in /etc/default/knxd steht ja:
START_KNXD=YES
Ich habe es mal wieder auf no geändert und neu gestartet. Dennoch sagt er beim ausführen des Befehls "sudo knxd -t1023 -c -u /tmp/eib -u /var/run/knx -i -D -T -S -e 1.1.251 tpuarts:/dev/ttyACM0" folgendes Ergebnis erzielen::
E00000013: OpenInetSocket 6720: bind: Address already in use
initialisation of the knxd inet protocol failed: Address already in use


nach stoppen der beiden Dienste mit systemctl stop knxd.socket und stop knxd.service kann ich mit sudo "knxd -t1023 -c -u /tmp/eib -u /var/run/knx -i -D -T -S -e 1.1.251 tpuarts:/dev/ttyACM0" folgendes Ergebnis erzielen:
Layer 3(00714C60,574DBF4D) Open
Layer 4(007251E0,574DBF4D) GroupCacheInit
Layer 3(00714C60,574DBF4D) registerLayer2 007251E0
Layer 3(00714C60,574DBF4D) registerLayer2 007251E0 = 1
Layer 4(007251E0,574DBF4D) GroupCacheEnable
Layer 8(00725450,574DBF4D) OpenLocalSocket /tmp/eib
Layer 8(00725450,574DBF4D) LocalSocket opened
Layer 8(00735968,574DBF4D) OpenLocalSocket /var/run/knx
Layer 8(00735968,574DBF4D) LocalSocket opened
Layer 8(00745E80,574DBF4D) OpenInetSocket 6720
Layer 8(00745E80,574DBF4D) InetSocket opened
Layer 8(007563D8,574DBF4D) Open
Layer 0(00756880,574DBF4D) Open
Layer 0(00756880,574DBF4D) Openend
Layer 8(007563D8,574DBF4D) Opened
Layer 3(00714C60,574DBF4D) registerLayer2 00756400
Layer 3(00714C60,574DBF4D) registerLayer2 00756400 = 1
You need to specify '-e' earlier: No such file or directory


Mit ETS5 komme ich aber immer noch nicht drauf.
PS danke für deine Hilfe

Andi291

Abend!

Lass mal -i raus. Das konkurriert meine ich mit dem knx.socket...

Grüße, Andi

Ich würds so versuchen:
KNXD_OPTS="-e 1.1.251 -n knxd@myserver -c -DTRS -b tpuarts:/dev/ttyACM0"

Aki1988

#7
Ok werde ich versuchen.

Auch auf die Gefahr hin dass es sich blöd anhört: knxd@myserver ersetze ich mit knxd@raspberrypi (raspberrypi ist der Name meines Rai's)?
Btw:
Welche Antwort müsste denn kommen? Woran erkenne ich das KNXD korrekt läuft?

Edit: hab es ausprobiert:
sudo knxd -t1023 -c -u /tmp/eib -e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0
liefert:
Layer 3(00C8EC60,574DEBEA) Open
Layer 4(00C9F1E0,574DEBEA) GroupCacheInit
Layer 3(00C8EC60,574DEBEA) registerLayer2 00C9F1E0
Layer 3(00C8EC60,574DEBEA) registerLayer2 00C9F1E0 = 1
Layer 4(00C9F1E0,574DEBEA) GroupCacheEnable
Layer 8(00C9F450,574DEBEA) OpenLocalSocket /tmp/eib
Layer 8(00C9F450,574DEBEA) LocalSocket opened
You need to specify '-e' earlier


sudo knxd -t1023 -c -u /tmp/eib -e 1.1.251 -n knxd@myserver -c -DTRS -b tpuarts:/dev/ttyACM0
liefert
Layer 3(0022CC60,574DEBC5) Open
Layer 4(0023D1E0,574DEBC5) GroupCacheInit
Layer 3(0022CC60,574DEBC5) registerLayer2 0023D1E0
Layer 3(0022CC60,574DEBC5) registerLayer2 0023D1E0 = 1
Layer 4(0023D1E0,574DEBC5) GroupCacheEnable
Layer 8(0023D450,574DEBC5) OpenLocalSocket /tmp/eib
Layer 8(0023D450,574DEBC5) LocalSocket opened
You need to specify '-e' earlier: No such file or directory


wenn ich /etc/knxd.conf KNXD_OPTS="-e 1.1.251 -n knxd@myserver -c -DTRS -b tpuarts:/dev/ttyACM0" eingebe und dann nach einem neustart service knxd status eingebe kommt:
● knxd.service - KNX Daemon
   Loaded: loaded (/lib/systemd/system/knxd.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2016-05-31 21:52:41 CEST; 9s ago
  Process: 1109 ExecStart=/usr/bin/knxd $KNXD_OPTS (code=exited, status=1/FAILURE)
Main PID: 1109 (code=exited, status=1/FAILURE)


mit KNXD_OPTS="-e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0" + reboot + service knxd status:
● knxd.service - KNX Daemon
   Loaded: loaded (/lib/systemd/system/knxd.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2016-05-31 22:00:19 CEST; 7s ago
  Process: 1373 ExecStart=/usr/bin/knxd $KNXD_OPTS (code=exited, status=1/FAILURE)
Main PID: 1373 (code=exited, status=1/FAILURE)


Am wenigsten Fehler kamen bei Variante 1.

smurfix

Zitat von: Andi291 am 31 Mai 2016, 21:39:18
Lass mal -i raus. Das konkurriert meine ich mit dem knx.socket...


das ist korrekt, aber die zielführende Vorgehensweise ist in diesem Fall, den knxd.socket beim Testen abzuschalten:

# sudo systemctl stop knxd.socket

Zitat/etc/default/knxd

Stop. Du verwendest Debian Jessie und somit systemd. Die Datei wird daher ignoriert.

Aki1988

#9
Ok, also wenn ich die /etc/knxd.conf verwende dann wird
                                  /etc/default/knxd ignoriert.
Dann ist es aber egal wenn START_KNXD=YES/NO drin steht da das dann in der /etc/knxd.conf konfiguriert wird.
So weit so gut. Insgesammt habe ich es nach der Anleitung im Wiki eingerichtet. Da das Wiki ja ein IP Gateway verwendet und ich Jessie verwende habe ich statt Schritt 4 die 4a genommen.
meine /etc/knxd.conf sieht so aus:
# configuration for knxd.service
KNXD_OPTS="-e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0"
#KNXD_OPTS="-u /tmp/eib -u /tmp/eib -b ip:work.fritz.box"
#KNXD_OPTS="-u /tmp/eib -u /tmp/eib -b ip:192.168.0.27"
#KNXD_OPTS="-e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0"
#DAEMON_ARGS=="-u /tmp/eib -u /var/run/knx -i -D -T -S -e 1.1.251 tpuarts:/dev/ACM0"
#DAEMON_ARGS=="-u /tmp/eib -u /var/run/knx -D -T -S -e 1.1.251 tpuarts:/dev/ttyACM0"

[... rest auskommentiert]

(Ich weiß das alles bis auf die oberste Zeile auskommentiert ist)

Das DAEMON_ARGS habe ich von http://smarthomebau.de/knx-testaufbau-mini-testboard-mit-raspberry-pi-und-knxd/
dort steht:
Zitat[...] Die Codezeile:

DAEMON_ARGS="-u /tmp/eib -u /var/run/knx -i -D -T -R -S -b tpuarts:/dev/ttyACM0"

innerhalb der /etc/default/knxd sorgt dafür, dass der knxd nach dem Neustart sofort über den TUL als vollwertiger KNX-Router auf dem Bus einsatzbereit ist.
da ich die /etc/default/knxd ja nicht nutze habe ich die Zeile in /etc/knxd.conf eingefügt.

-------------------------------------------
Nachtrag:
Es hat über LAN funktioniert:
nach dem beenden beider Dienste mit
sudo systemctl stop knxd.socket && sudo systemctl stop knxd.service
und starten mit folgenden Optionen:
sudo knxd -t1023 -e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0
erscheint erst mal "ein unendlicher Text". Bei ETS5 auf in der Virtuellen Maschine wird die Schnittstelle 192.168.0.50:3671 (RPi@LAN) gefunden (Test: OK)

Jetzt stellt sich noch die Frage: Wie bekomme ich es hin dass es
a) im Hintergrund läuft
b) automatisch beim reboot startet
c) wie bekomme ich das Gateway über WLAN 192.168.0.51 (RPi@WLAN) angesprochen?

Kann ich die START_KNXD=YES einfach in die /etc/knxd.conf einsetzen? ==> nein funktioniert nicht.

Nachtrag 2:
Wlan habe ich hinbekommen, einfach Lan ausstecken und schon funktioniert es :) fehlen nur noch a und b :)

Aki1988

Hallo, sorry das ich mich nicht früher gemeldet habe. Es wurden bei uns die Geräte montiert. Jetzt muss ich nur noch auf die KNX Adapter für die warten.

den Autostart habe ich hinbekommen:

mit sudo nano /etc/knxd.conf
KNXD_OPTS="-t1023 -e 1.1.251 -n pi@raspberrypi -c -DTRS -b tpuarts:/dev/ttyACM0"

mit nur einem "="
In ETS5 funktioniert der Test.
Als nächstes habe ich ttyACM0 in ttyKNX1 "umbenannt". Wie das geht habe ich https://github.com/knxd/knxd#adding-a-tpuart-usb-interface entnommen.

so dann mache ich mal nen backup von der SD Karte und versuche die Installation nocheinmal zu Dokumentieren. Vielen Dank für eure Hilfe