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.
Letzteres kann "unsere" Lösung auch, weil das eval nur vom Zustandswechsel von [boost] getriggert wird. Man kann dann den Level per Visu oder am Lüftungsgerät verstellen und damit die Stoßlüftung abbrechen. So müsste es in der Theorie sein. Vielleicht kann KF55W das mal testen.
Gruß Wolfram
Wolfram hat recht.
Man kann jederzeit einen anderen Wert setzen.
Boost wird damit nicht deaktiviert.
Nach ablauf boost stellt sich ein Wert ein, der änhlich dem kwl.level_alt() wert war, machmal eine Stufe drüber, macnhmal eine Stufe drunter....
man müsste mit setzen von kwl.level den kwl.level_alt() wert überschreiben.
Hier mal eine erste Idee, wo ich gern mit der ganzen Sache hinkommen würde. Ich hab's grad erst neu runtergeschrieben und noch nicht ausprobiert, also für offensichtliche Fehler bitte nicht gleich hauen.
Code:
# Universaltimer für Geräte - Kriterien:
# - Aktivierung einer bestimmten Schaltstufe für ein item 'level' über KNX-Taster oder Visu
# - Automatische Rückstellung auf den vorher eingestellten Wert nach erreichter Laufzeit
# - Abbruch bei manueller Eingabe einer anderen Stufe über KNX, Bedienteil, Visu, ...
# - Optionales Item für "Stop" (Rückkehr zur vorher eingestellten Stufe) über KNX oder Visu
# - Optionales Item für Einstellung der Dauer (Visu)
# - Optionales Item für Restzeit in Minuten (Visu)
[kwl]
[[boost]]
type = bool
visu_acl = w
autotimer = sh.kwl.boost.visu.boostduration() = 0
eval = sh.kwl.boost.visu.boostlevel() if value else sh.kwl.level(sh.kwl.level.alt())
knx_dpt = 1
knx_cache = 0/4/8
# ToDo:
# Doku: Jede erneute Aktivierung erneuert den autotimer???
# Allgemein: Was passiert mit autotimer bei Abbruch und erneuter Aktivierung?
[[level]]
type = num
knx_dpt = 5
knx_send = 0/4/9
[[[alt]]]
type = num
cache = True
eval = self() if self.return_parent().changed_by() == 'Init' else self.return_parent().prev_value()
eval_trigger = kwl.level
[[visu]]
type = foo
[[[boostlevel]]] # Konnektor für Slider oder Radiobuttons - Level
type = num
value = 204
autotimer = 120 = 204
visu_acl = rw
[[[boostduration]]] # Konnektor für Slider oder Radiobuttons - Zeit
type = num
value = 25
visu_acl = rw
[[[stop_boost]]]
type = foo
eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0)" # unschön, aber wohl konform
eval_trigger = sh.kwl.visu.stop_boost.button
[[[[button]]]] # Konnektor für Button - Abbruch Stoßlüftung
type = foo
[[[remaining_mins]]] # Restzeit für Anzeige in der Visu
type = num
eval = __import__('math').ceil(sh.scheduler.return_next('sh.kwl.boost-Timer')/60)
# eval_trigger = # ToDo: Woher nehmen?
/tom
Zuletzt geändert von Tom Bombadil; 25.11.2016, 19:49.
Ich glaube, so einfach ist das nicht - 'boost' wird durch eine reine Änderung von 'level' über Visu/Bedienteil ja nicht geändert. Der autotimer tickt also weiter, irgenwann fällt 'boost' auf 0, und es wird auf 'level_alt' gestellt, wenn Level sich über boost triggert ...
@smai: Mit dem Namen für den autotimer scheinst Du recht zu haben, soweit war ich in der item.py noch nicht vorgedrungen.
/tom
Edit:
Hier nochmal die Unterschiede:
"Wir":
Code:
[[boost]]
type = bool
visu_acl = rw
autotimer = 25 = 0
knx_dpt = 1
knx_cache = 0/4/8
[[[level]]]
type = num
eval = 204 if sh.kwl.boost() == 1 else sh.kwl.level_alt()
eval_trigger = kwl.boost
knx_dpt = 5
knx_send = 0/4/9
sqlite = no
[[level_alt]]
type = num
knx_dpt = 5
visu_acl = rw
cache = True
eval = sh.kwl.level_alt() if sh.kwl.level.changed_by() == 'Init' else sh.kwl.level.prev_value()
eval_trigger = kwl.boost.level
smai:
Code:
[[boost]]
type = bool
visu_acl = w
autotimer = 25 = 0
eval = sh.kwl.level(204) if value else sh.kwl.level(sh.kwl.level.alt())
[[level]]
type = num
[[[alt]]]
type = num
cache = True
eval = self() if self.return_parent().changed_by() == 'Init' else self.return_parent().prev_value()
eval_trigger = kwl.level
Wird noch'n Hackathon hier.
/tom
scheint nicht so direkt zu funktionieren.
2016-11-25 19:34:47 DEBUG __init__ Main 192.168.100.68:64742 sent '{"cmd":"item","id":"kwl.boost","val":"1"}' -- __init__.py:json_parse:329
2016-11-25 19:34:47 DEBUG scheduler Main Triggering kwl.boost-eval - by: Visu source: 192.168.100.68:64742 dest: None value: {'caller': 'Visu', 'value': '1', 'dest': -- scheduler.py:trigger:165
2016-11-25 19:34:47 INFO item kwl.boost-eval Item kwl.boost: evaluating sh.kwl.levelb(204) if value else sh.kwl.levelb(sh.kwl.levelb.alt()) returns None -- item.py:__run_eval:441
[kwl]
[[level]] #setzt die div Level per basic.button (value)
type = num
visu_acl = rw
knx_dpt = 5
knx_cache = 0/4/10
knx_send = 0/4/9
sqlite = no
[[[uzsu1]]] #setzt die div Level per Zeitschaltuhr
type=dict
uzsu_item=kwl.level
visu_acl=rw
cache = True
[[boost]] # Boost-Mode
type = bool
visu_acl = rw
autotimer = 45m = 0
knx_dpt = 1
knx_cache = 0/4/0 #WICHTIG, wird benötigt um die Taster im Haus zu belauschen, und im Falle einer '1' Boost-Mode zu aktivieren
[[[level]]]
type = num
eval = 204 if sh.kwl.boost() == 1 else sh.kwl.level_alt()
eval_trigger = kwl.boost
knx_dpt = 5
knx_send = 0/4/9
sqlite = no
[[level_alt]]
type = num
knx_dpt = 5
visu_acl = rw
cache = True
eval = sh.kwl.level() if sh.kwl.level.changed_by() == 'Init' else sh.kwl.level.prev_value()
eval_trigger = kwl.boost.level
NEU
[[boost-abbruch]]
type = num
knx_dpt = 5
visu_acl = rw
cache = True
eval = # Wenn Boost abgebrochen werden soll durch Taster (kw.level), dann setze diesen wert als kwl.level_alt() Wie lautet korrekte Schreibweise?
eval_trigger = kwl.level
recht rudimentär.
bräuchte ich nur die korrekte schreibweise, dann würde es funktionieren, mit Abbruch.
Kann mir die einer von euch sagen?
Schnellschuss für Deine config: eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0);sh.kwl.l evel(sh.kwl.level_alt())".
Ich würde trotzdem die andere Variante ausprobieren, siehe oben. Damit ist 'level' auch noch frei.
/tom
Zuletzt geändert von Tom Bombadil; 25.11.2016, 20:02.
Schnellschuss für Deine config: eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0);sh.kwl.l evel(sh.kwl.level_alt())".
Ich würde trotzdem die andere Variante ausprobieren, siehe oben. Damit ist 'level' auch noch frei.
/tom
danke dir
ich werde deine Variante auch noch testen.
Aktuell ist aber der wurm drin.
die erprobte hängt nun nach dem ganzen umgestelle...
neustart
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