Hallo,
vielleicht hat jemand einen Tipp für mich.
Ich würde gerne die Einschaltzeit des über den integrierten Taster gesteuerten Aktors von der Tageszeit abhängig machen. Konkret soll tagsüber das Licht im Kinderzimmer nach definierter Zeit wieder ausgehen und nachts eine ganz normale ein/aus-Steuerung möglich sein.
Ich muss jetzt also das Register für den internen Taster irgendwie zeitabhängig modifizieren oder fhem tagsüber nach erkanntem Einschalten und definierter Zeit das Licht wieder löschen lassen.
Was ist da der saubere Weg?
Herzlichen Dank!
Huh,
nicht ganz so einfach mit der Betriebssicherheit und weiteren Tastendrücken im Interval ...
mein Ansatz:
Tastendruck im Schalter grundsätzlich auf On-For-Timer setzen (Register) (dieses gilt immer)
Für die Zeiten mit DauerOn nimmst Du einen Notify - prüfst die Uhrzeit - und schaltest den Schalter per FHEM auf on- Damit wird dann der Schalter interne Timer auch deaktiviert und alles funktioniert wie gewünscht.
Zusätzlich kannst Du den Schalter auf unterschiedlich laner und kurzer Tastendruck betreiben.
z.B.
Kurz - Licht für 10 Minuten
Lang - Licht Dauer an
Just my 2 Cents
Ralf
Also wie ich das verstanden habe:
* interne Taster sichtbar machen (intKeyVisib visib)
* shOnTime begrenzen (600 = 10 Minuten)
Erzeugt der Schalter intern überhaupt lange Events mit der Original-Firmware? (Dimmer ja, aber der Schalter?)
und ein Notify, das bei Wechsel des Aktors auf "on" (dort ggf. event-on-change-reading setzen) nachts einen set ~ on absetzt?
Gefällt mir besser als meine Idee :-)
+ ermöglicht lokales Nachtriggern zu jeder Zeit
Ich würde noch ein at setzen, was den Aktor spätestens morgens auf aus setzt (z.B. 2h nach Sonnenaufgang). Sonst könnte ein nachts aktiviertes Licht dauer-an bleiben.
auch schaltaktoren können long können. Einige schalten aber auf "config" wenn man lange drückt - dann kann man kein long, da es ja config/anlernen macht.
Man kann aber inner long programmieren.
Man kann übrigens jeden (in Worten 'jeden') trigger/tastendruck von der Zentrale aus emulieren.
set Actor press short
set Actor press short peerRemoteButton3
set Actor press long peerRemoteButton2
Long ist nur eine message lang - aber löst die "long " prozedur aus. Das könnte (hab ich nicht getestet) auch bei den Schaltaktoren mit der "config" einschränkung gelten.
Du könntest also auf "self-long" programmieren, dass
- wenn licht an, dann warte 10min, dann schalte aus
- wenn licht aus - ignoriere trigger
somit kannst du morgens
at..... set Licht press long
machen. Das Licht sollte, wenn es an ist, nach 10min ausgehen.
Readings:
2014-06-13 21:15:05 CommandAccepted yes
2014-02-25 06:46:32 D-firmware 2.2
2014-02-25 06:46:32 D-serialNr KEQ--------
2014-06-13 21:15:08 PairedTo --------------
2014-02-25 06:38:46 R-confBtnTime 255 min
2014-06-13 21:15:08 R-intKeyVisib visib
2014-06-13 21:14:04 R-localResDis off
2014-06-13 21:14:04 R-pairCentral ----------
2014-06-13 21:15:11 R-self01-lgActionType jmpToTarget
2014-06-13 21:15:11 R-self01-lgCtDlyOff geLo
2014-06-13 21:15:11 R-self01-lgCtDlyOn geLo
2014-06-13 21:15:11 R-self01-lgCtOff geLo
2014-06-13 21:15:11 R-self01-lgCtOn geLo
2014-06-13 21:15:11 R-self01-lgCtValHi 100
2014-06-13 21:15:11 R-self01-lgCtValLo 50
2014-06-13 21:15:11 R-self01-lgMultiExec on
2014-06-13 21:15:11 R-self01-lgOffDly 0 s
2014-06-13 21:15:11 R-self01-lgOffTime 111600 s
2014-06-13 21:15:11 R-self01-lgOffTimeMode absolut
2014-06-13 21:15:11 R-self01-lgOnDly 0 s
2014-06-13 21:15:11 R-self01-lgOnTime 111600 s
2014-06-13 21:15:11 R-self01-lgOnTimeMode absolut
2014-06-13 21:15:11 R-self01-lgSwJtDlyOff off
2014-06-13 21:15:11 R-self01-lgSwJtDlyOn off
2014-06-13 21:15:11 R-self01-lgSwJtOff off
2014-06-13 21:15:11 R-self01-lgSwJtOn dlyOff
2014-06-13 21:15:11 R-self01-shActionType jmpToTarget
2014-06-13 21:15:11 R-self01-shCtDlyOff geLo
2014-06-13 21:15:11 R-self01-shCtDlyOn geLo
2014-06-13 21:15:11 R-self01-shCtOff geLo
2014-06-13 21:15:11 R-self01-shCtOn geLo
2014-06-13 21:15:11 R-self01-shCtValHi 100
2014-06-13 21:15:11 R-self01-shCtValLo 50
2014-06-13 21:15:11 R-self01-shOffDly 0 s
2014-06-13 21:15:11 R-self01-shOffTime 111600 s
2014-06-13 21:15:11 R-self01-shOffTimeMode absolut
2014-06-13 21:15:11 R-self01-shOnDly 0 s
2014-06-13 21:15:11 R-self01-shOnTime 111600 s
2014-06-13 21:15:11 R-self01-shOnTimeMode absolut
2014-06-13 21:15:11 R-self01-shSwJtDlyOff off
2014-06-13 21:15:11 R-self01-shSwJtDlyOn off
2014-06-13 21:15:11 R-self01-shSwJtOff off
2014-06-13 21:15:11 R-self01-shSwJtOn dlyOff
2014-06-13 21:15:12 R-self02-lgActionType jmpToTarget
2014-06-13 21:15:12 R-self02-lgCtDlyOff geLo
2014-06-13 21:15:12 R-self02-lgCtDlyOn geLo
2014-06-13 21:15:12 R-self02-lgCtOff geLo
2014-06-13 21:15:12 R-self02-lgCtOn geLo
2014-06-13 21:15:12 R-self02-lgCtValHi 100
2014-06-13 21:15:12 R-self02-lgCtValLo 50
2014-06-13 21:15:12 R-self02-lgMultiExec on
2014-06-13 21:15:12 R-self02-lgOffDly 0 s
2014-06-13 21:15:12 R-self02-lgOffTime 111600 s
2014-06-13 21:15:12 R-self02-lgOffTimeMode absolut
2014-06-13 21:15:12 R-self02-lgOnDly 0 s
2014-06-13 21:15:12 R-self02-lgOnTime 111600 s
2014-06-13 21:15:12 R-self02-lgOnTimeMode absolut
2014-06-13 21:15:12 R-self02-lgSwJtDlyOff on
2014-06-13 21:15:12 R-self02-lgSwJtDlyOn on
2014-06-13 21:15:12 R-self02-lgSwJtOff dlyOn
2014-06-13 21:15:12 R-self02-lgSwJtOn on
2014-06-13 21:15:12 R-self02-shActionType jmpToTarget
2014-06-13 21:15:12 R-self02-shCtDlyOff geLo
2014-06-13 21:15:12 R-self02-shCtDlyOn geLo
2014-06-13 21:15:12 R-self02-shCtOff geLo
2014-06-13 21:15:12 R-self02-shCtOn geLo
2014-06-13 21:15:12 R-self02-shCtValHi 100
2014-06-13 21:15:12 R-self02-shCtValLo 50
2014-06-13 21:15:12 R-self02-shOffDly 0 s
2014-06-13 21:15:12 R-self02-shOffTime 111600 s
2014-06-13 21:15:12 R-self02-shOffTimeMode absolut
2014-06-13 21:15:12 R-self02-shOnDly 0 s
2014-06-13 21:15:12 R-self02-shOnTime 3600 s
2014-06-13 21:15:12 R-self02-shOnTimeMode absolut
2014-06-13 21:15:12 R-self02-shSwJtDlyOff on
2014-06-13 21:15:12 R-self02-shSwJtDlyOn on
2014-06-13 21:15:12 R-self02-shSwJtOff dlyOn
2014-06-13 21:15:12 R-self02-shSwJtOn on
2014-06-13 21:14:05 R-sign off
2014-02-25 06:38:48 R-statusInfoMinDly 2 s
2014-02-25 06:38:48 R-statusInfoRandom 1 s
2014-06-13 21:14:05 R-transmitTryMax 6
2014-06-13 18:09:56 deviceMsg off (to hm.lan.1)
2014-06-13 18:09:56 level 0
2014-06-13 18:09:56 pct 0
2014-06-13 21:15:10 peerList self01,self02,
2014-06-13 18:09:56 recentStateType info
2014-06-13 18:09:56 state off
2014-06-13 18:09:56 timedOn off
Ich habe mal meinen Badezimmerschalter gelistet :-)
Kurzer Druck: 1h Stunde Licht an
Langer Druck: Dauer Licht an
für den Notify habe ich diesen Konstrukt: hm.sw.4:on IF ([dummy.Heizung.aktiv] eq "wahr") (set hm.thermo.1.clima desired-temp 21.5)
Du bekommst als Event also nur die Änderung vom Aktor aber NICHT vom Taster
das gilt für self02. Self01 schaltet immer dauer an.
eine besser zu lesende Liste erhältst der Register - insbesondere bei meheren peers erhältst du mit HMInfo
get hm register -f <actor>
das Notify müsste auf den Status des Lichts reagieren - der Taster ist nicht sichtbar
hier noch mal die Register und settings wie Martin es beschrieben hat :-) - Danke Martin
hm.sw.5 type:switch -
list:peer register :value
0: confBtnTime :255 min
0: intKeyVisib :visib
0: localResDis :off
0: localResDis :off
0: pairCentral :---------
1: sign :on
1: statusInfoMinDly :2 s
1: statusInfoMinDly :2 s
1: statusInfoRandom :1 s
1: statusInfoRandom :1 s
1: transmitTryMax :6
1: transmitTryMax :6
self01 self02
lg sh lg sh
ActionType jmpToTarget jmpToTarget jmpToTarget jmpToTarget
CtDlyOff geLo geLo geLo geLo
CtDlyOn geLo geLo geLo geLo
CtOff geLo geLo geLo geLo
CtOn geLo geLo geLo geLo
CtValHi 100 100 100 100
CtValLo 50 50 50 50
MultiExec on on
OffDly [s] 0 0 0 0
OffTime [s] 111600 111600 111600 111600
OffTimeMode absolut absolut absolut absolut
OnDly [s] 0 0 0 0
OnTime [s] 111600 111600 111600 3600
OnTimeMode absolut absolut absolut absolut
SwJtDlyOff off off on on
SwJtDlyOn off off on on
SwJtOff off off dlyOn dlyOn
SwJtOn dlyOff dlyOff on on
@Martin: Gibt es schon irgendwo eine genaue Beschreibung für die Jumptables und Conditions? Die genaue Logic von den Teilen ist mir noch nicht ganz klar :-(
----
Tante Edith meinte ich sollte meine Zentralen ID entfernen ;-)
jump und condition table ist im einsteigerdoc beschrieben.
jumptable ist die statemachine - oder besser die Sprünge in der statemachine wenn ein entsprechender trigger kommt.
CT ist der Filter, wenn ein Trigger mit Value (brightness vom motion detector, oder fenster-öffnung bei RHS) kommt und der Aktor in einem bestimmten Zustand der statemachine ist. Da kann man gewisse trigger ignorieren lassen. Auch einsteigerdoc
ZitatTante Edith meinte ich sollte meine Zentralen ID entfernen ;-)
die HMIds werden ständig im Klartext durch die Luft gesendet. Jeder, der nahe genug an deinem Haus ist, um kommandos an deine Aktoren zu senden kann diese auch lesen. Hier im Forum sind die meisten eher weiter weg und können nichts senden.
=> die HMID zu schwärzen ist nicht sicherheitsrelevant.
=> schützen solltst du ggf die Seriennummer - aber auch hier ist es eher kein security-problem
=> zu schützen sind IP-adressen (externe) und ggf keys für AES