Guten Morgen Onkelandy,
Ich habe gerade eine neue Änderung in den develop-Zweig gepust, mit der as_suspend_time, as_startup_delay und as_repeat_actions auch den plugineigenen Datentyp "AbValue" unterstützen und man die Werte damit auch über items bzw. ein eval setzen kann.
Für die weitere Verwendung beispielsweise in den Bedingungen (siehe unten) ist meiner Meinung nach der Zugriff über die Variable (unabhängig ob über "var:suspend_time" der "eval:autoblind_eval.get_variabe("suspend_time ")") geschickter. Das hat zwei Gründe:
Ja, wenn man das über eigene Zustände macht, braucht man keine as_suspend_item und as_suspend_watch Attribute.
Wenn du das "Manuell"-Item so aufbaust, wie mumpf es beschrieben hat, dann wechselt dieses Item bei jeder manuellen Aktion seinen Wert. Daher ist es ungeschickt, in der Suspend-Bedingung auf den Wert des Manuell-Items abzuprüfen. Sonst deaktiviert sich der Suspend-Zustand ggf. bei der zweiten Manuellen Aktion wieder. Ich habe das bei mir so gemacht, dass ich auch die Sperre über einen Zustand realisiert habe, der vor dem Suspend definiert ist. Dadurch wird der Suspend-Zustand beim Setzen der Sperre aufgehoben. Man kann es aber auch so machen, dass man weiterhin ein suspend-item hat, das den Suspend-Zustand anzeigt. Dieses Item setzt mal im Zustand "Suspend" auf 1, in allen anderen Zuständen auf 0. Im Bedingungsset "enter_stay" des Suspend-Zustands kann man nun prüfen, ob dieses Item noch auf "1" ist. So kann man den Suspend-Zustand durch setzten des Suspend-Items auf 0 wieder verlassen.
Die Steuerung für meinen Test-Raffstore ist im Moment wie folgt aufgebaut:
Default-Konfiguration:
AutoBlind-Konfiguration für den Raffstore:
Grüße
offline
Zitat von Onkelandy
Beitrag anzeigen
Für die weitere Verwendung beispielsweise in den Bedingungen (siehe unten) ist meiner Meinung nach der Zugriff über die Variable (unabhängig ob über "var:suspend_time" der "eval:autoblind_eval.get_variabe("suspend_time ")") geschickter. Das hat zwei Gründe:
- Wenn bei einem Item keine separate "suspend_time" angegeben hat, so enthält die Variable den Wert der in der Plugin-Konfiguration definierten suspend_time_default.
- Der Wert des Items könnte sich in der Zwischenzeit geändert haben. Die Variable enthält den Wert, mit der das Plugin aktuell arbeitet. Dieser Wert wird zwar auch bei Bedarf aktualisiert, aber sicher ist sicher ...
Zitat von Onkelandy
Beitrag anzeigen
Zitat von Onkelandy
Beitrag anzeigen
Die Steuerung für meinen Test-Raffstore ist im Moment wie folgt aufgebaut:
Default-Konfiguration:
Code:
[[default]] [[[Lock]]] type = foo name = Gesperrt as_set_suspend = False [[[[enter]]]] as_value_lock = True [[[Suspend]]] type = foo name = Suspend as_set_suspend = True [[[[enter_manuell]]]] as_value_trigger_source = eval: autoblind_eval.get_item("manuell",1) [[[[enter_stay]]]] as_value_laststate = var:current.state_id as_agemax_manuell = var:item.suspend_time as_value_suspend = True
Code:
[room] [[raffstore]] [[[seite]]] [[[[automatik]]]] [[[[[lock]]]]] type = bool knx_dpt = 1 knx_send = x/x/x knx_listen = x/x/x visu_acl = rw cache = on [[[[[suspend]]]]] type = bool knx_dpt = 1 knx_send = x/x/x knx_reply = x/x/x knx_listen = x/x/x visu_acl = rw [[[[[manuell]]]]] type = bool name = Manuelle Bedienung eval = not sh.room.raffstore.seite.automatik.manuell() if sh.return_plugin("AutoBlind").not_changed_by(caller, source, ["Init:*", "KNX:x.x.x"]) else sh.room.raffstore.seite.automatik.manuell() eval_trigger = room.raffstore.seite.aufab | room.raffstore.seite.step | room.raffstore.seite.hoehe | room.raffstore.seite.lamelle [[[[[autoblind]]]]] type = bool as_plugin = active eval_trigger = autoblind.trigger | room.raffstore.seite.automatik.manuell | room.raffstore.seite.automatik.lock | room.raffstore.seite.automatik.suspend as_item_manuell = room.raffstore.seite.automatik.manuell as_item_lock = room.raffstore.seite.automatik.lock as_item_suspend = room.raffstore.seite.automatik.suspend [[[[[[Lock]]]]]] as_use = autoblind.default.Lock [[[[[[Suspend]]]]]] as_use = autoblind.default.Suspend (...)
Grüße
offline
Kommentar