FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: timtom am 22 November 2016, 17:47:32

Titel: DOIF immer ausführen, jedoch nur wenn Status sich x Sekunden nicht verändert hat
Beitrag von: timtom am 22 November 2016, 17:47:32
Hallo,

ich verzweifel an einem DOIF.

Setting:
1 Wandtaster mit 4 Status

Dieser steuert ein eine DOIF (mit 3 DOELSEIF) über das ich jeweils eine LightScene ansteuere, z.B. regelt eine Scene die Heizung 5 Grad nach oben. Nach 60 Minuten wechselt diese wieder eigenständig  in den Automatikmodus. Da weder die LightScene noch das DOIF das mitbekommt, verbleiben die Status (Wandtaster und DOIF)

Daher nutze ich ein "do always", um z.B. die +5 Grad Scene erneut zu triggern.

Das "do always" hat aber den Nebeneffekt, dass beim Verdrücken des Tasters jeweils die LightScene umgestellt wird. Als Lösung habe ich überlegt, dass diese erst geändert werden soll, wenn sich der DOIF-Status x Sekunden nicht mehr ändert. Würde das so (in Pseudocode) funktionieren?

define di_LightScene
DOIF ([Button Hoch])
  (set LightScene A)
DOELSEIF ([Button Runter])
  (set LightScene B)
...
attr di_LightScene waitdel 5:5
attr di_LightScene do always


Was mich irritiert ist "wird ein laufender Timer gelöscht, falls eine Bedingung wiederholt wahr wird.". Dann würde mein Vorschlag ja nur Doppeldrücken (Hoch -> Hoch innerhalb 5 Sek) des Tasters abfangen und nicht (Hoch -> Runter)?
Titel: Antw:DOIF immer ausführen, jedoch nur wenn Status sich x Sekunden nicht verändert hat
Beitrag von: Ellert am 22 November 2016, 20:15:58
Wenn Du "Verdrücken" korrigieren willst, dann reicht es wait zu setzen ohne zusätzliches Attribut. Ein wait-Timer wird zurück gesetzt, wenn Du nach der falschen Taste, bevor der Timer abgelaufen ist, eine andere Taste drückst.
Titel: Antw:DOIF immer ausführen, jedoch nur wenn Status sich x Sekunden nicht verändert hat
Beitrag von: timtom am 23 November 2016, 07:01:46
Zitat von: Ellert am 22 November 2016, 20:15:58
Wenn Du "Verdrücken" korrigieren willst, dann reicht es wait zu setzen ohne zusätzliches Attribut. Ein wait-Timer wird zurück gesetzt, wenn Du nach der falschen Taste, bevor der Timer abgelaufen ist, eine andere Taste drückst.
Ok, gilt das denn auch in Kombination mit "do always". Wenn ich z.B. ein "wait 10" und "do always" nutze und innerhalb von 10 Sek hoch -> runter -> hoch drücke. Wir dann nur das letzte "hoch" getriggert?
Titel: Antw:DOIF immer ausführen, jedoch nur wenn Status sich x Sekunden nicht verändert hat
Beitrag von: Muschelpuster am 23 November 2016, 07:20:34
Ja, wenn der ausgewertete Status dann nicht 10 Sekunden 'hält', dann passiert nichts. Bedeutet aber auch, dass das nicht funktioniert, wenn der Taster eine Release-Meldung hat und sich der Status wieder ändert.

abwartende Grüße
Niels
Titel: WAF
Beitrag von: Per am 23 November 2016, 13:31:11
Überleg dir das gut, ob du das wirklich willst. Besonders der WAF sinkt enorm, wenn nach dem Druck auf eine Taste nix passiert...
Ist deine Heizung wirklich so schnell, dass sie auf ein Verdrücken innerhalb 5 Sekunden reagieren kann?
Zur Not solltest du ein Dummy einführen, welches erst nach 5 Sekunden geändert wird, die Rückmeldung aber dennoch sofort kommt.
Titel: Antw:DOIF immer ausführen, jedoch nur wenn Status sich x Sekunden nicht verändert hat
Beitrag von: timtom am 23 November 2016, 16:21:40
Zitat von: Per am 23 November 2016, 13:31:11
Überleg dir das gut, ob du das wirklich willst. Besonders der WAF sinkt enorm, wenn nach dem Druck auf eine Taste nix passiert...
Ist deine Heizung wirklich so schnell, dass sie auf ein Verdrücken innerhalb 5 Sekunden reagieren kann?
Zur Not solltest du ein Dummy einführen, welches erst nach 5 Sekunden geändert wird, die Rückmeldung aber dennoch sofort kommt.
Die Heizung reagiert nicht so schnell. Daher fand ich die Idee bisher ganz gut ;) Würde ich alles sofort triggern, würde bei jedem Druck die LightScene geändetr und mehrere Heizkörper angesteuert. Das würde die Funklast stark erhöhen. Daher die Heizkörper eh nicht so schnell reagieren, war die Idee, dass halt erst nach 10 Sek der Status genommen wird und dann erst die Heizkörper geregelt werden.

Oder hab ich da einen Denkfehler?