Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ich fürchte, der Scheduler arbeiter nur auf Sekundenbasis, da ist nichts "Schnelleres" möglich Falls doch, wäre das Hammer!
Marcus meinte mal auf meine Frage diesbezüglich, dass man den Scheduler wohl auch mit Werten < 1 aufrufen kann, er war nur nicht sicher, wie genau dieser Sekundenbruchteil eingehalten werden kann. Sein Statement damals: Einfach mal ausprobieren,,,
Leider bin ich bisher nicht zum ausprobieren gekommen...
Hmmm, also bei nem Cycle von 0.1 für einen Scheduler gab's jedenfalls mal ne Fehlermeldung...
Die gibt's nun auch beim delay Attribut hier beim autoblind. Hat man hier zB 0.1 angegeben, spuckt das Debuglog aus: invalid literal for int() with base 10
Gleicher Fehler kommt übrigens auch, wenn man versucht, das delay über item:xyz zu definieren, selbst wenn jenes Item einen int Wert hinterlegt hat.. Offenbar wird hier wirklich nur ne Ganzzahl akzeptiert?
Ok, wenn da wirklich int steht, dann sind es ja ganze Zahlen... Schade... Dann wohl erst in zukünftigen sh.py Versionen. Was wäre denn dein Anwendungsfall für so kurze delays? Gruß Waldemar
Der Anwendungsfall ist sehr spezifisch.. momentan mach ich das über ne Logik und ich denke, das macht ohnehin so auch mehr Sinn.. insofern ist das kein Drama. Im weitesten Sinne gehört es halt zum Zustand dazu - dass, sobald dieser in der Visu adaptiert wird, auch gleich eine Änderung am KNX System sichtbar ist.
Konkret ginge es um das kurze Aus- und Einschalten des Triggers für den Bewegungsmelder, sobald der Dimm-Sollwert für das Licht (zB in der Visu) angepasst wird.
Also angenommen, der KNX BWM schickt den Sollwert 80% ans Licht, dann muss man eben kurz an und aus triggern, um einen neu eingestellten Wert von 70% sofort an die Leuchte zu senden.
Im Moment wird für das Delay ein nur ganzzahliger Festwert akzeptiert. Intern kann jedoch statt mit Sekunden auch mit Millisekunden gerechnet werden, was ich gerade mal versucht habe. Der Scheduler von smarthome.py ist jedoch nicht so genau. Ich habe mehrere Items mit unterschiedlichen Delays von 500, 600 und 700 Millisekunden definiert. Die tatsächliche Verzögerung lag dabei teilweise im Bereich von mehreren Sekunden. Ich habe auch feststellen können, dass nicht einmal die Reihenfolge, in der die Items bei korrektem Delay hätten gesetzt werden sollen, eingehalten wurde:
Einige Sekunden nach dem Starten von smarthome.py
Code:
2015-12-08 18:12:35.071252 Action 'data3: Add 600.0 millisecond timer 'test.data3-AbItemDelayTimer' for delayed execution.
2015-12-08 18:12:35.071535 Action 'data2: Add 500.0 millisecond timer 'test.data2-AbItemDelayTimer' for delayed execution.
2015-12-08 18:12:35.071776 Action 'data4: Add 700.0 millisecond timer 'test.data4-AbItemDelayTimer' for delayed execution.
2015-12-08 18:12:38.000758 Delay Timer 'test.data4-AbItemDelayTimer': Set 'test.data4' to '0'
2015-12-08 18:12:38.000950 Delay Timer 'test.data3-AbItemDelayTimer': Set 'test.data3' to '0'
2015-12-08 18:12:38.001106 Delay Timer 'test.data2-AbItemDelayTimer': Set 'test.data2' to '0'
Noch ein wenig gewartet ...
Code:
2015-12-08 18:14:09.293440 Action 'data3: Add 600.0 millisecond timer 'test.data3-AbItemDelayTimer' for delayed execution.
2015-12-08 18:14:09.293732 Action 'data2: Add 500.0 millisecond timer 'test.data2-AbItemDelayTimer' for delayed execution.
2015-12-08 18:14:09.293985 Action 'data4: Add 700.0 millisecond timer 'test.data4-AbItemDelayTimer' for delayed execution.
2015-12-08 18:14:10.090183 Delay Timer 'test.data4-AbItemDelayTimer': Set 'test.data4' to '42'
2015-12-08 18:14:10.090364 Delay Timer 'test.data3-AbItemDelayTimer': Set 'test.data3' to '42'
2015-12-08 18:14:10.090483 Delay Timer 'test.data2-AbItemDelayTimer': Set 'test.data2' to '42'
Der Scheduler scheint also zu jeder vollen Sekunde zu triggern ...
Der Anwendungsfalll für delay-Werte unter einer Sekunde besteht in meinen Augen darin, bestimmte Items in genau definierter Reihenfolge zu schalten. Leider klappt selbst das, wie oben getestet, nicht mit delay-Werten im Millisekundenbereich.
So ... nach einem minderschweren Umbau im Coding unterstützt das Plugin die Angabe von Werten statisch/aus Item/per Eval nun an allen Stellen, an denen dies Sinnvoll sein könnte. Zudem habe ich einiges im Coding umgebaut um Redundanzen zu vermeiden.
Neben dem Attribut as_delay_[action name] funktionieren "value:[statisch]", "item:[item id]" und "eval:[funktion]" jetzt auch bei as_mindelta_[action name]
Der Umbau hat jedoch dazu geführt, dass Setzen von Items anhand von Attributen der Items nicht mehr über "as_set_[action name] = byattr: [attribut]" funktioniert. Für diese Funktionalität gibt es ab sofort die Action "as_byattr_[action_name] = [attribut]"
Ich habe das ganze auf GitHub gepusht. Auf Grund der nicht unerheblichen Umstellungen und des Breaking-Change mit byattr liegen die Änderungen zunächst nur im Branch "SplitActionClasses".
Vielen lieben Dank, absolut top! Ich hab den Branch mal gepullt und soweit scheint noch alles zu klappen. Das byattr hab ich aber nicht getestet..
Jetzt nochmals zurück zu der Suspend Problematik, vielleicht kapier ich's ja nur nicht
Ich möchte in der Visu z.B. ein Licht einschalten und auch am Button sehen, ob es an ist oder nicht. Das Item hat daher sowohl knx_send als auch knx_listen. Wenn ich jetzt möchte, dass bei manuellem Schalten das auto_blind auf Suspend geht, müsste ich ja ein suspend_watch auch das Schalt-item des Lichts legen.
Nun bekommt dieses Item ja aber immer ein Update, sobald sich am Licht was tut und schaltet dann auch in den Suspend, wenn er es nicht sollte. Gleiches Problem gab es ja auch mit der Höhenverstellung der Jalousien.
Mit einem KNX Schalter gäbe es in dem Fall keine Probleme, da dort ja die Rückmeldung über eine eigene Gruppenadresse läuft. Somit könnte man dort ein eigenes Item ohne knx_listen anlegen, das als Suspend fungiert. Aber in der Visu bräuchte es nach der Logik ja alles doppelt: eine reine Statusanzeige mittels knx_listen im Item und ein eigener Schaltknopf, der nur das knx_send im Item hat.
Wäre echt super genial, wenn das noch gelöst werden könnte. Falls das irgendwie zu komplex wird, überleg ich mir halt doch was mit der Visu...
ich weiß jetzt nicht, ob ich Dein Problem voll verstanden habe, aber das, was Du vohast, müsste folgendermaßen gehen (hab ich aber nicht ausprobiert):
Code:
[Licht]
# Standard-Licht-Item, ist nur zu Demo-Zwecken hier, wird eigentlich nicht gebraucht
type = bool
visu_acl = ro
knx_dpt = 1
knx_cache = 1/1/1 # Status vom Aktor
knx_send = 1/2/1 # normale Licht-Schalt-GA (z.B. in Tastern vergeben)
[[LichtVisu]]
# Dieses Item benutzt Du in der Visu
type = bool
visu_acl = rw
knx_dpt = 1
knx_cache = 1/1/1
knx_send = 1/2/10 # Visu Licht-Schalt-GA, der Aktor hört auch auf diese
[[SuspendByVisu]]
# Dieses Item ist das, auf das der Autoblind-Suspend hört
type = bool
enforce_updates = true
knx_dpt = 1
knx_listen = 1/2/10 # hier wird auf die Schalt-GA von der Visu gehört und NICHT auf die von anderen Tastern
Ich hab versucht, in Kommentaren die Idee zu beschreiben, sollte eigentlich gehen. Bei Jalousien/Rolläden entsprechend...
Danke Waldemar für den Tipp!
Scheint generell zu funktionieren, auch wenn es recht viel Aufwand ist... aber nachdem's sonst offenbar niemand betrifft muss ich mir das vermutlich antun?
Nochmals kurz zur Erklärung: ich möchte, dass jede manuelle Betätigung, ob per Schalter oder Visu als Suspend gewertet wird.
Über Schalter habe ich aber nur Auf/Ab und Stop oder eben Dimmen hoch/runter. Hier ist es kein Problem, auf diese Items das Suspend anzuwenden. Die Schalter bekommen ja keinen Status bzw. jedenfalls nicht den Wert der Jalousiehöhe oder Lichtintensität, maximal "ein/aus" für die LED.
Wenn ich allerdings möchte, dass das Anfahren einer bestimmten Höhe der Jalousie oder des direkten Dimmwerts des Lichts (zB über die Visu, theoretisch aber auch über das Schalten einer Szene o.ä.) ein Suspend erzwingen soll, gibt es ein kleines Dilemma. Denn diese Items sind ja auch mit knx_listen für den Höhe- oder Dimmwert versehen, um in der Visu immer die richtige Anzeige zu haben. Problem ist jetzt, dass bei jedem automatischen Anfahren einer bestimmten Höhe durch das Plugin der aktualisierte Status vom KNX System auf das Höhe Item geschrieben wird. Und so wäre ich immer bei jeder "Zustandsaktivierung" seitens autoblind wieder im Suspend Mode, was ja nicht Sinn der Sache ist.
Ah, ok. Dann schau aber mal, ob du das nicht besser über eine recht einfache Logik machst. Du machst ein eigenes suspend Item, das triggert eine Logik, in der wird trigger[by] ausgewertet. Und wenn der trigger die Visu ist, dann setzt du den suspend vom autoblind. Könnte so klappen, musst ein bisschen rumprobieren... Gruß Waldemar
Ja, mit dem tigger(by) hatte ich das in einer anderen Situation mal gelöst, das klappt eigentlich recht gut. Vermutlich ist das auch gar nicht so komplex - generell dachte ich halt, dass es sich anbieten würde, das gleich im Plugin irgendwie abzufangen. Mal sehen, was Meister offline dazu noch meint, hehe
Das Plugin hat tatsächlich beim Ändern der unter as_suspend_watch angegebenen Items Änderungen, die das Plugin selbst ausgelöst hat, nicht ignoriert. Ich habe das nun eingebaut und der Einfachheit halber auch erst mal in den SplitActionClasses-Branch gepusht. Es gibt da außerdem noch zwei weitere kleine (kosmetische) Bugfixes.
Diese Änderung sorgt jedoch nur dafür, dass die Item-Änderungen kein Suspend mehr triggern. Die Positionsrückmeldung, die Aktoren nach dem Fahren melden triggert weiterhin das Suspend.
Abhilfe könnte man schaffen, in dem man bei den Suspend-Items zusätzliche "Bedingungen" wie z. B. einen bestimmten Caller (z. B. "Visu") oder eine bestimmte Source (z. B. eine physische Adresse von KNX) mit angeben kann, die dann ausgewertet werden.Dazu muss ich mir dann aber zum einen Gedanken machen, wie man solche "Zusätze" am sinnvollsten in die AutoBlind-Konfiguration einbaut. Zum anderen müssen diese "Zusatzbedingungen" zum Triggern des Suspend dann auch nochmal irgenwo abgelegt werden, damit Sie abgeprüft werden können, wenn eines der as_suspend_watch-Items geändert wird.
Ich werde mir da mal Gedanken machen, es kann jedoch ein wenig dauern, der Weihnachtsstress kommt so langsam auf Touren. Zunächst werde ich aber den SplitActionClasses-Branch in den Develop-Zweig mergen, da die neue Funktionalität bei euch scheinbar genausowenig Probleme macht, wie bei mir ...
als ich gestern Abend einen Neustart von SH.py wegen einiger Änderungen durchgeführt habe, sind zunächst alle Rolläden nach oben gefahren, um dann beim nächsten Lauf des Plugins wieder nach unten zu fahren:
Es scheint so, dass zunächst der Sollwert 0 auf den Bus geschrieben wird, wenn sich das Plugin initialisiert. Danach ist Ruhe bis das Startup Delay abgelaufen ist und die korrekten Werte werden auf den Bus geschrieben. Das passiert in etwa dann, nachdem SH.py alle Items initialisiert und abgefragt hat (habe knx_init auch auf die Autblind-Höhe), noch bevor irgendwelche Skripte anlaufen.
Kann das Verhalten jemand bestätigen und lässt sich das irgendwie unterdrücken?
Hi, bei mir passiert das nicht... Ist somit kein generelles autoblind Problem. Muss mit deinen Item-Definitionen zusammenhängen. Die Frage ist eher, mit welchen... Ich glaube, du mal eine .conf mit dem zugehörigen log Posten, vielleicht sieht man da was. Gruß Waldemar
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar