Ankündigung

Einklappen
Keine Ankündigung bisher.

knxd und send-delay?

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

    [Codebeispiel] knxd und send-delay?

    Hallo zusammen,

    ich habe ein Problem mit knxd. Eventuell hat hier ja jemand schonmal ähnliche Erfahrungen gemacht und einen Tipp für mich. ich habe im smarthomeNG backend eine Logik für meine Rollos eingetragen. Diese sollen zeitgesteuert hoch/runter gefahren werden, und zwar z.B. so:

    File: blinds.down.py

    for item in (sh.match_items('level0.*.b1') + sh.match_items('level0.*.b2')):
    if (hasattr(item,'move')):
    item.move(1)


    Dabei bezeichnet level0 eben die Etage 0 (Erdgeschoss), und die Rollos heißen bei mir alle b1 oder b2.

    Wenn ich im smarthomeNG backend nun diese Logik eingebe und auslöse, dann sehe ich auch die entsprechenden Nachrichten auf dem KNX Bus (mit knxtool groupsocketlisten ...). Es werden die richten Telegramme an alle Geräte gesendet. Leider springen aber nicht alle Rollos an. Es fahren z.B. nur 2 von 6 los. Löse ich das wiederholt aus, dann fahren (evtl.) andere los, usw. Es scheint auch nicht wirklich deterministisch zu sein, d.h. wenn ich bei gleicher Ausgangssituation die Logik auslöse, dann fahren immer mal wieder andere Rollos los, nicht zwangsweise die gleichen.

    Wenn ich die Befehle händisch per knxtool abschicke, dann habe ich beobachtet, dass einzeln abgesendete Nachrichten immer zum Erfolg führen. D.h. ich tippe "knxtool groupswrite ..." und drücke Enter, dann das nächste Kommando, Enter, usw..

    Wenn ich die Befehle aber alle in eine Zeile schreibe, mit "&&" verknüpft (also "knxtool groupswrite .. && knxtool groupswrite .."), dann passiert das gleiche wie über die Logik aus dem smarthomeNG.

    Ich könnte mir vorstellen, dass der knxd durch die Nachrichtenflut Kollisionen auf dem KNX Bus auslöst. Das würde immerhin erklären, warum die einzelnen Telegramme funktionieren, die in der Schleife gesendeten aber nicht.

    Ich hab nun 2 Lösungen ausprobiert, aber auch ohne Erfolg:

    1. Ich wollte in der Schleife der Loop ein delay einbauen:

    import time
    for item in (sh.match_items('level0.*.b1') + sh.match_items('level0.*.b2')):
    if (hasattr(item,'move')):
    item.move(1)
    time.sleep(0.2)


    2. Ich hab versucht, im knxd.conf die Option "--send-delay" einzutragen:
    KNXD_OPTS="-e 7.0.0 -E 7.0.1:50 -T -D -S -c -b --send-delay ipt:<meine_knx_ip_interface>"

    Beide Varianten bringen jedoch nix: Bei 1. sehe ich eigentlich überhaupt keine Auswirkungen, die Nachrichten sind ohne Delay auf dem KNX Bus, und bei 2. startet der knxd nicht mehr...

    Hat jemand schonmal ähnliche Probleme gehabt und evtl. eine Lösung parat?

    Danke & Gruß,
    Matthias

    #2
    Was für ein knx Interface nutzt Du? So ein Verhalten wird z.B. bei Weinzierl beschrieben. Einfach mal im knxd Forum suchen, wir knxd konfiguriert werden muss. Ich erinnere nicht mehr welche Option gesetzt werden muss. send-delay war es aber nicht.
    Viele Grüße
    Martin

    Kommentar


      #3
      Nach send delay muss noch ein Wert in millisekunden, meine ich.

      Kommentar


        #4
        Ah, super. Wer lesen kann ist klar im Vorteil: Hab das knxd Forum "übersehen"

        Aber falls da nochmal jemand drauf reinfällt: Wie henfri schon richtig bemerkt hat, muss hinter send-delay eine Zeit. Die Konfig Zeile muss also so aussehen:

        KNXD_OPTS="-e 7.0.0 -E 7.0.1:50 -T -D -S -c -b --send-delay=50 ipt:<meine_knx_ip_interface>"

        @Msinn: Ich verwende das MDT IP000.01 - auch wenn es daran jetzt nicht lag.

        Nochmal Danke euch beiden.

        Kommentar


          #5
          Zitat von treibholz Beitrag anzeigen
          @Msinn: Ich verwende das MDT IP000.01 - auch wenn es daran jetzt nicht lag.
          Dann würde ich hier gleich auf send-delay = 85 gehen. Läuft jetzt bei mir schon sehr lange ohne Ausfälle.
          Und auf jeden fall die KNXD Version 0.12 nehmen. Mit der 0.14 hatte ich noch teilweise sehr hohe Verzögerungen beim senden.

          Kommentar

          Lädt...
          X