Ankündigung

Einklappen
Keine Ankündigung bisher.

knxd vs. knx_read (wiregated.pl)

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

    knxd vs. knx_read (wiregated.pl)

    Moin zusammen!

    Ich bin gerade dabei von einem (alten) Wiregate auf eine aktuelle Hardware mit Ubuntu umzuziehen. Hierbei habe ich mich teils auch an der Hilfestellung von Fry orientiert (https://knx-user-forum.de/forum/supp...81#post1843681). Danke nochmals dafür!
    Zunächst wollte ich auf ein Raspberry Pi 4 umsteigen, das jedoch noch während der Testphase das zeitliche gesegnet hat. Nun kommt ein Awow TX33 zum Einsatz.

    Das Meiste läuft bereits, jedoch scheine ich noch ein grundlegendes Problem bzgl. knxd zu haben.
    Wenn ich mit den wiregate plugins auf dem Bus lese (z.B. knx_read('11/1/20'), eibga.conf ist geplegt), erhalte ich zwar einen Buswert, dieser scheint jedoch aus dem Cache zu stammen (laut eib.log wird kein read auf dem Bus ausgelöst).
    Somit bleiben Werte teils über Stunden gleich, wenn die Busteilnehmer nicht zyklisch oder nicht bei jeder Änderung auf den Bus senden. Dies sehe ich dann vor allem bei den RRDs, die durch wiregate plugins befüllt werden (horizontale Linien in den Graphen, da vermeintlich konstante Buswerte).
    Lese ich durch ETS (auch über knxd!) oder knxtool die betreffenen Geräte aus, erhalte ich auch immer einen aktuellen Rückgabewert. Das Problem scheint tatsächlich zu sein, dass das knx_read der Plugins kein Lesen auf dem Bus triggert und nur den Cache verwendet. Mit dem alten eibd auf dem wiregate funktionierte das bislang.

    Hat jemand eine Idee woran das liegen könnte bzw. an welcher Stelle ich ggf. ansetzen muss, damit knx_read auch einen aktuellen Wert vom Bus erfragt?

    knxd version: 0.14.46, installiert aus dem standard Ubuntu repo (Ubuntu 22.04 Server).
    knx.ini
    Code:
    [A.unix]
    path = /tmp/eib
    server = knxd_unix
    systemd-ignore = false
    [C.tpuarts]
    device = /dev/ttyKNX
    driver = tpuart
    [debug-server]
    name = mcast:knxd
    [main]
    addr = 1.1.242
    cache = B.cache
    client-addrs = 1.1.243:6
    connections = A.unix,server,C.tpuarts
    systemd = systemd
    [server]
    debug = debug-server
    discover = true
    router = router
    server = ets_router
    tunnel = tunnel​

    #2
    Du kannst bei knx_read mit einem zweiten Parameter bestimmen, wie alt der Cachewert höchstens sein darf. Spezifierst du da 0, liest er immer vom Bus. Antwortet aber dann keiner innerhalb von wenigen Sekunden auf die Read-Anfrage, ist das Ergebnis dann undefiniert (Perl "undef"). Außerdem wartet knx_read dann (blocking für den Perl-Prozess). Besser ist im allgemeinen, einfach häufig zyklisch zu senden (zB einmal pro Minute oder pro 5 Minuten) und dann den Cache beim Lesen zu nutzen.
    Zuletzt geändert von Fry; 12.03.2023, 11:05.

    Kommentar


      #3
      $age ist gleich 0, wenn man dies nicht angibt. Es macht auch keinen Unterschied, ob ich read('GA') oder knx_read('GA',0) schreibe. Verwende ich ich $age, wird auch tatsächlich eine Leseanfrage auf dem Bus ausgelöst und eine Antwort gesendet (zu sehen in der eib.log)... diese Antwort wartet knx_read aber wohl nicht ab und liefert "undef" zurück.

      Für mich nicht nachvollziehbar, da ich das Problem im Zusammenspiel mit eibd nie hatte.
      Wenn ich das richtig sehe, läuft knx_read im wiregated.pl ja über EIBConnection.pm... kann es sein, dass diese nicht mehr zu 100% zum aktuellen knxd kompatibel ist?

      Kommentar

      Lädt...
      X