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
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
Kommentar