Ankündigung

Einklappen
Keine Ankündigung bisher.

KNXD und RTC-Onewire-TPUART Erweiterung für Raspberry PI (ROT)

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

    KNXD und RTC-Onewire-TPUART Erweiterung für Raspberry PI (ROT)

    Hallo,

    Hardware Raspberry PI 3.

    Bislang nutze ich eine relativ alte Version von Smarthome und knxd. Diese funktioniert in der genannten Konstellation problemlos.

    Nun habe ich mir Testweise das neue Image von OnkelAndy geladen.
    Dann habe ich mir folgende Anleitung gesucht:

    Adding a TPUART serial interface to the Raspberry Pi


    On the Raspberry Pi 2 and 3 the console is /dev/ttyAMA0. The udev line is:

    ACTION=="add", SUBSYSTEM=="tty", KERNELS="ttyAMA0", SYMLINK+="knx1", OWNER="knxd"
    On the Raspberry Pi 4 the console is on /dev/ttyACM0. The udev line is:

    ACTION=="add", SUBSYSTEM=="tty", KERNELS=="ttyACM0", SYMLINK+="knx1", OWNER="knxd"
    This rule creates a symlink /dev/knx1 which points to the console. The knxd configuration will use that symlink.

    On the Raspberry Pi 2 and 3 you need to disable the serial console. Edit /boot/cmdline.txt and remove the console=ttyAMA0 entry. Then reboot.

    On the Raspberry Pi 3, the serial console is on ttyAMA1 by default. However, that is a software-driven serial port (the hardware serial interface is used for Bluetooth on the Pi3). Varying CPU speed causes this port to be somewhat unreliable. If this happens, disable bluetooth by adding

    dtoverlay=pi3-disable-bt
    to /boot/config.txt, run systemctl disable hciuart, and rebooting. The TPUART module is now back on ttyAMA0.
    Ich sehe im Verzeichnis /dev die Schnittstelle ttyAMA0 mit Root als Owner.
    Meine 70-knxd.rules sieht wie folgt aus:
    #ACTION=="add", SUBSYSTEM=="tty", ATTRS{id}=="00241011", KERNELS=="3f201000.uart", SYMLINK+="ttyKNX1", OWNER="knxd"
    ACTION=="add", SUBSYSTEM=="tty", KERNELS="ttyAMA0", SYMLINK+="knx1", OWNER="knxd"

    Die auskommentierte Zeile ist die, die mit dem alten Image funktioniert hat. Laut der Anleitung würde das der USB-TPUART Schnittstelle enstsprechen. Es ist aber eine zum draufstecken auf den PI.
    Meine cmdline.txt:
    root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait rootdelay=5 consoleblank=0 cgroup_memory=1 cgroup_enable=memory
    Hier ein Auszug aus der config.txt

    [all]
    #dtoverlay=vc4-fkms-v3d
    # BEGIN ANSIBLE MANAGED BLOCK
    hdmi_safe=1
    disable_overscan=1
    hdmi_force_hotplug=1
    #hdmi_drive=2
    config_hdmi_boost=4
    sdtv_mode=2
    #dtoverlay=gpio-ir,gpio_pin=18
    #dtoverlay=gpio-ir-tx,gpio_pin=17
    enable_uart=1
    dtoverlay=pi3-disable-bt
    dtoverlay=pi3-miniuart-bt
    #dtparam=watchdog=on
    # END ANSIBLE MANAGED BLOCK


    [smarthome@SmartHomeNG ~]$ sudo journalctl -xn
    -- Logs begin at Wed 2020-04-22 21:52:32 CEST, end at Wed 2020-04-22 21:56:21 CEST. --
    Apr 22 21:56:16 SmartHomeNG knxd[741]: Layer 5 [17:B.tpuarts/Conn 0.007] down/error => >down
    Apr 22 21:56:16 SmartHomeNG knxd[741]: Layer 4 [17:B.tpuarts/Conn 0.007] down/error
    Apr 22 21:56:16 SmartHomeNG knxd[741]: Layer 4 [17:B.tpuarts/Conn 0.008] is down
    Apr 22 21:56:16 SmartHomeNG knxd[741]: Layer 2 [19:B.tpuarts/LowF 0.008] Close
    Apr 22 21:56:16 SmartHomeNG knxd[741]: Layer 2 [20:B.tpuarts/TPU_ser 0.009] Close
    Apr 22 21:56:16 SmartHomeNG systemd[1]: Started KNX Daemon.
    -- Subject: A start job for unit knxd.service has finished successfully
    -- Defined-By: systemd
    -- Support: https://www.debian.org/support
    --
    -- A start job for unit knxd.service has finished successfully.
    --
    -- The job identifier is 1276.
    Apr 22 21:56:16 SmartHomeNG systemd[1]: knxd.service: Main process exited, code=exited, status=1/FAILURE
    -- Subject: Unit process exited
    -- Defined-By: systemd
    -- Support: https://www.debian.org/support
    --
    -- An ExecStart= process belonging to unit knxd.service has exited.
    --
    -- The process' exit code is 'exited' and its exit status is 1.
    Apr 22 21:56:16 SmartHomeNG systemd[1]: knxd.service: Failed with result 'exit-code'.
    -- Subject: Unit failed
    -- Defined-By: systemd
    -- Support: https://www.debian.org/support
    --
    -- The unit knxd.service has entered the 'failed' state with result 'exit-code'.
    Apr 22 21:56:21 SmartHomeNG sudo[743]: smarthome : TTY=pts/0 ; PWD=/home/smarthome ; USER=root ; COMMAND=/bin/journalctl -xn
    Apr 22 21:56:21 SmartHomeNG sudo[743]: pam_unix(sudo:session): session opened for user root by (uid=0)



    Es wird nach dem Reboot keine "knx1" unter dev angelegt. Auf dem alten Image gab es eine "ttyKNX1" mit knxd als owner. So wie in der Anleitung beschrieben.

    Hat jemand eine Idee was ich falsch mache?

    Danke schonmal im Voraus.

    Gruß
    Wolfgang


    Zuletzt geändert von Bit-te; 29.04.2020, 10:34.

    #2
    Hallo,

    ich habe mich mal etwas mit den udev Regeln beschäftigt. Nun funktioniert es, kann es mir aber nicht genau erklären warum.

    Mich hat gewundert, dass folgender Befehl nicht funktioniert hat:
    Code:
    sudo udevadm info -a /dev/ttyAMA0 | grep KERNELS.*uart
    Der gleich Befehl ohne das grep... hat folgende Ausgabe gebracht:

    [root@SmartHomeNG ~]# sudo udevadm info -a /dev/ttyAMA0

    Udevadm info starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.

    looking at device '/devices/platform/soc/3f201000.serial/tty/ttyAMA0':
    KERNEL=="ttyAMA0"
    SUBSYSTEM=="tty"
    DRIVER==""
    ATTR{xmit_fifo_size}=="16"
    ATTR{flags}=="0x10000000"
    ATTR{close_delay}=="50"
    ATTR{uartclk}=="48000000"
    ATTR{iomem_base}=="0x3F201000"
    ATTR{io_type}=="2"
    ATTR{port}=="0x0"
    ATTR{irq}=="81"
    ATTR{closing_wait}=="3000"
    ATTR{custom_divisor}=="0"
    ATTR{type}=="32"
    ATTR{iomem_reg_shift}=="0"
    ATTR{line}=="0"

    looking at parent device '/devices/platform/soc/3f201000.serial':
    KERNELS=="3f201000.serial"
    SUBSYSTEMS=="amba"
    DRIVERS=="uart-pl011"
    ATTRS{driver_override}=="(null)"
    ATTRS{irq0}=="81"
    ATTRS{id}=="00241011"

    looking at parent device '/devices/platform/soc':
    KERNELS=="soc"
    SUBSYSTEMS=="platform"
    DRIVERS==""
    ATTRS{driver_override}=="(null)"

    looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

    [root@SmartHomeNG ~]#
    Da gibts dann als Ausgabe "KERNELS=="3f201000.serial""

    Nun habe ich meine 70-knx.rules angepasst
    Code:
    ACTION=="add", SUBSYSTEM=="tty", ATTRS{id}=="00241011", KERNELS=="3f201000.serial", SYMLINK+="ttyKNX1", OWNER="knxd"
    #ACTION=="add", SUBSYSTEM=="tty", ATTRS{id}=="00241011", KERNELS=="3f201000.uart", SYMLINK+="ttyKNX1", OWNER="knxd"
    #ACTION=="add", SUBSYSTEM=="tty", KERNELS="ttyAMA0", SYMLINK+="knx1", OWNER="knxd"
    Nach dem Reboot funktioniert meine Busverbindung nun.

    Aber:
    unter /dev wird kein Symlink "ttyKNX1" erzeugt. Die ttyAMA0 hat jetzt aber den Besitzer knxd.

    Damit funktioniert das nun.

    knxd.conf
    #KNXD_OPTS=/etc/knxd.ini
    START_KNXD=YES
    KNXD_OPTS="-e 1.1.245 -E 1.1.246:8 -DTRS -c -f 9 -t 0xffe -b tpuarts:/dev/ttyKNX1"
    # You might want to remove the -DTRS in the end.
    Wieso funktioniert das, obwohl der Verweis in der knxd.conf auf ttyKNX1 ist?
    Warum wird der Symlink nicht erzeugt?
    Sollte ich die knxd.conf auf ttyAMA0 abändern?
    Ist das Versionsbedingt das der KERNEL nun nicht mehr auf uart endet sondern auf serial?

    Kann mir dazu jemand was sagen?

    Vielen Dank

    Kommentar


      #3
      Danke für die ausführliche Dartstellung zum TPUART.
      Schon unter der alten smarthomeNG 1.6 habe ich lange "gebastelt" bis es endlich lief.

      Bei einer neuen Einrichrung auf einem 2. PI3 unter 1.7.1 bin ich exakt bis zu dem Punkt "Da gibts dann als Ausgabe "KERNELS=="3f201000.serial""!"
      in Deiner Darstellung gekommen. Bei der weiteren Anpassung im nächsten Pukt "Nun habe ich meine 70-knx.rules angepasst" habe ich wohl Mist gebaut. Putty und WINSCP finden den Raspi nicht mehr. Vorher hatte ich noch einige Datein ausgeduckt. Leider waren die Rechte alle bei "smarthome".
      Sicherlich der erste Fehler! Ich werde es jetzt noch einmal unter root aufsetzen.

      Aber was habe ich in den 70-knx-rules zerschossen?
      Wie ligen Deine Rechte?

      In der /etc/knxd.ini taucht eine ip-address = 10.0.0.101 auf, (??) , muss ich die anpassen?

      Deine offenen Fragen aus dem Beitrag sind offensichtlich noch nicht geklärt. Schade, angeblich ist die Masse der Nutzer auf den Raspis unterwegs.
      Gibt es eine "erschwingliche" Alternative zu den TPUART, sowas wie Plug+Play? Oder ist der USB-TPUART problemloser?

      Eine Menge Fragen.

      Über eine Hilfe würde ich mich Freuen. Der Feiertag wird wieder zum Basteltag.

      Danke und Grüße
      Wolfgang


      Code:
      ---------------------------------------
      [smarthome@SmartHomeNG ~]$ sudo systemctl status knxd.socket
      ? knxd.socket - KNX Daemon (socket)
      Loaded: loaded (/lib/systemd/system/knxd.socket; enabled; vendor preset: enabled)
      Active: active (listening) since Tue 2020-05-19 12:36:51 CEST; 14min ago
      Listen: /var/run/knx (Stream)
      [::]:6720 (Stream)
      Tasks: 0 (limit: 2200)
      Memory: 0B
      CGroup: /system.slice/knxd.socket
      
      Mai 19 12:36:51 SmartHomeNG systemd[1]: Listening on KNX Daemon (socket).
      [smarthome@SmartHomeNG ~]$
      
      [smarthome@SmartHomeNG ~]$ sudo systemctl status knxd.service
      ? knxd.service - KNX Daemon
      Loaded: loaded (/lib/systemd/system/knxd.service; enabled; vendor preset: enabled)
      Active: activating (auto-restart) (Result: exit-code) since Tue 2020-05-19 12:54:01 CEST; 2s ago
      Process: 1688 ExecStart=/usr/bin/knxd $KNXD_OPTS (code=exited, status=2)
      Main PID: 1688 (code=exited, status=2)
      [smarthome@SmartHomeNG ~]$
      
      
      ---------------------------
      [smarthome@SmartHomeNG ~]$ cat /etc/knxd.ini
      [A.tcp]
      server = knxd_tcp
      systemd-ignore = true
      [B.ipt]
      driver = ipt
      filters = C.pace
      ip-address = 10.0.0.101
      [C.pace]
      delay = 30
      filter = pace
      [main]
      addr = 1.1.75
      client-addrs=1.1.76:8
      cache = D.cache
      connections = A.tcp,B.ipt
      systemd = systemd
      
      ------------------------------------------------------
      [smarthome@SmartHomeNG ~]$ sudo nano /etc/knxd.ini
      #KNXD_OPTS=/etc/knxd.ini
      START_KNXD=YES
      KNXD_OPTS="-e 1.1.240 -E 1.1.242:8 -DTRS -c -f9 -t =xffe -b tpuarts:/dev/ttyKNX1"
      # vorher --no-tunnel-client-queuing -B single -b ipt:§
      # You might want to remove the -DTRS in the end.
      
      #aus Raspi 21 mit NG1.6
      #KNXD_OPTS=/etc/knxd.ini
      #START_KNXD=YES
      #KNXD_OPTS="-e 1.1.240 -E 1.1.242:8 --no-tunnel-client-queuing -B single -b ipt:$
      # You might want to remove the -DTRS in the end.
      -------------------------------------------------------------------------------------
      [smarthome@SmartHomeNG /etc]$ cat knxd.conf*
      #KNXD_OPTS=/etc/knxd.ini
      START_KNXD=YES
      KNXD_OPTS="-e 1.1.240 -E 1.1.242:8 -DTRS -c -f9 -t =xffe -b tpuarts:/dev/ttyKNX1"
      # vorher --no-tunnel-client-queuing -B single -b ipt:§
      # You might want to remove the -DTRS in the end.
      
      #aus Raspi 21
      #KNXD_OPTS=/etc/knxd.ini
      #START_KNXD=YES
      #KNXD_OPTS="-e 1.1.240 -E 1.1.242:8 --no-tunnel-client-queuing -B single -b ipt:$
      # You might want to remove the -DTRS in the end.
      ---------------------------------------------------------------------------------------------
      [smarthome@SmartHomeNG /etc]$ cat knxd_IPServer.ini*
      [B.ipt]
      driver = ipt
      ip-address = 10.0.0.101
      [debug-server]
      name = mcast:knxd
      [main]
      addr = 1.1.75
      client-addrs=1.1.76:8
      cache = A.cache
      connections = B.ipt,server
      systemd = systemd
      [server]
      debug = debug-server
      discover = true
      router = router
      server = ets_router
      tunnel = tunnel
      [smarthome@SmartHomeNG /etc]$
      ------------------------------------------------------------------------------------
      [smarthome@SmartHomeNG /etc]$ cat knxd_Serial.ini*
      [debug-server]
      name = mcast:knxd
      [main]
      connections = server
      systemd = systemd
      [server]
      debug = debug-server
      discover = true
      multicast-address = -t 0xffc -f 9 -b tpuarts
      router = router
      server = ets_router
      tunnel = tunnel [smarthome@SmartHomeNG /etc]$
      --------------------------------------------------------------------------------

      Kommentar


        #4
        Hallo zusammen,

        kennt Ihr den Tech Blog von Michael Albert? Seine ausführlichen Erklärungen haben mir schon mehrfach geholfen. Hier ein Link zu Eurem Thema. Ob da etwas Neues für Euch dabei ist, habe ich nicht geprüft.

        Ich muss gestehen, dass ich selbst immer noch zu feige für einen Umstieg bin. Bei mir läuft das ROT-Interface nach diversen Systemupdates (RPI2, Buster, shNG 1.7.1) immer noch tadellos am eibd. Wenn es gelingt eine Prozedur zu beschreiben, die straight forward eine erfolgreiche Einrichtung des ROT mit knxd bewerkstelligt, nehme ich das gerne in die Doku für shNG / SV auf.

        Gruß
        Wolfram

        Kommentar


          #5
          Naja, wir reden hier über Debian. Da gibt es inzwischen ein knx-Paket, das kann man einfach so installieren – und alternativ baut man ein Debian-Paket aus den neuesten Version aus den Sourcen und installiert das.

          Ich habe da mal einen Kommentar hinterlassen …
          1wire, KNX, OpenHAB, Python, Asterisk, SMD-Lötkolben

          Kommentar

          Lädt...
          X