Hallo,
ich suche ein Lösung für folgendes Szenario:
Der Taster für das Licht im Hausflur wird betätigt. Das Licht geht an schaltet sich nach 5 Minuten wieder ab.
Der Taster ist ein HM-LC-SW1PBU-FM, der von Hause aus ja leider keinen Timer.
bei einem set-on-for-timer erledigt das FHEM selbst und sendet ein ON und OFF an das Gerät.
Log:2020-01-13 11:59:13 CUL_HM FLUR.licht_hinten set_on-for-timer 5
2020-01-13 11:59:14 CUL_HM FLUR.licht_hinten deviceMsg: on (to VCCU)
2020-01-13 11:59:14 CUL_HM FLUR.licht_hinten level: 100
2020-01-13 11:59:14 CUL_HM FLUR.licht_hinten pct: 100
2020-01-13 11:59:14 CUL_HM FLUR.licht_hinten on
2020-01-13 11:59:14 CUL_HM FLUR.licht_hinten timedOn: running
.
.
.
2020-01-13 11:59:21 CUL_HM FLUR.licht_hinten deviceMsg: off (to VCCU)
2020-01-13 11:59:21 CUL_HM FLUR.licht_hinten level: 0
2020-01-13 11:59:21 CUL_HM FLUR.licht_hinten pct: 0
2020-01-13 11:59:21 CUL_HM FLUR.licht_hinten off
2020-01-13 11:59:21 CUL_HM FLUR.licht_hinten timedOn: off
Ich habe es mit einem DOIF versucht:
([FLUR.licht_hinten:"^on$"]) (
set FLUR.licht_hinten on-for-timer 300;
)
Das funktioniert einmalig, solange man kein attr do allways definiert, damit der Taster den Timer "verlängern" kann.
Das "do allways" funktioniert deshalb nicht, weil FHEM nach dem "on-for-timer" noch ein einzelnes "on" sendet und somit das DOIF in einer Endlos-Schleife getriggert wird.
Schreibe das on und das off hintereinander und nutze das wait Attribut im doif. Ist im Wiki mit Beispiel erklärt
Gesendet von iPhone mit Tapatalk
Bin mir nicht sicher, ob ich es richtig verstanden habe.
Bei Knopfdruck soll das Licht an gehen und nach einer definierten Zeit wieder aus (ohne Druck)?
Ich habe das im Register gemacht: R-self01-shOnTime
45 s
Mein Licht im garten geht damit nach Knopfdruck nach 45 sek. aus.
kurz drücken --> 3 min Licht.
lang drücken --> Dauerlicht.
kurz drücken wenn Licht an --> Licht aus.
defmod Licht_Kammer DOIF ([GPIO_IN_15:"^on$"] and [?OUT_1:PortB3] eq "off") (set OUT_1 PortB3 on) (set OUT_1 PortB3 off)\
DOELSEIF ([GPIO_IN_15:"^on$"] and [?OUT_1:PortB3] eq "on") (set OUT_1 PortB3 off)\
DOELSEIF ([GPIO_IN_15:"^Longpress:.on$"]) (set OUT_1 PortB3 on)
attr Licht_Kammer cmdpause 2:2:2:2
attr Licht_Kammer devStateIcon on:on:cmd_2 initialize|initialized|off:off:cmd_1
attr Licht_Kammer do always
attr Licht_Kammer wait 0,180:0:0:0
GPIO_IN_15 ist mein Taster.
OUT_1 ist eine GPIO Erweiterung auf I2C
PortB3 ist der Port der Erweiterung.
Attribut cmdPause habe ich zum entprellen.
Musst Dir nur auf deinen Taster / Aktor umbiegen.
Wie Mitch schreibt: Das sollte ohne FHEM-interne Logik gehen, wenn du das entsprechende Register im Aktor setzt (shOnTime im zum Taster gehörenden Register).
Die Details dazu sollten im Anhang des Einsteiger-pdf's zu finden sein, evtl. gibt es auch ein (HM-) template. Dazu muß ein Experten-Modus eingeschaltet werden, sonst sieht man diese Register uU. gar nicht.
Von FHEM aus kannst du auch andere Einschaltdauern (auch unendlich) einstellen, das ganze geht auch getrennt für weitere (gepeerte) Taster.
Hmm, jetzt scheint das Gerät nicht mehr mit mir zusammen arbeiten zu wollen...
state ist "RESPONSE TIMEOUT:RegisterRead"
Internals:
CFGFN FHEM/fhem_FLUR_KUECHE.cfg
DEF 391528
FUUID 5c43a4f2-f33f-a31c-0e8e-93b9125a990284d8
HMLAN1_MSGCNT 915
HMLAN1_RAWMSG E391528,0000,05E8D212,FF,FFC7,5884103915280000000601C800
HMLAN1_RSSI -57
HMLAN1_TIME 2020-01-13 19:32:16
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 915
NAME FLUR.licht_vorn
NOTIFYDEV global
NR 508
NTFY_ORDER 50-FLUR.licht_vorn
STATE RESPONSE TIMEOUT:RegisterRead
TYPE CUL_HM
chanNo 01
lastMsg No:58 - t:10 s:391528 d:000000 0601C800
peerList self01,self02,
protCmdDel 93
protIOerr 3 last_at:2020-01-12 15:55:01
protLastRcv 2020-01-13 19:32:16
protRcv 898 last_at:2020-01-13 19:32:16
protResnd 68 last_at:2020-01-13 21:03:51
protResndFail 22 last_at:2020-01-13 21:03:56
protSnd 914 last_at:2020-01-13 21:03:37
protState CMDs_done_Errors:1
rssi_HMLAN1 cnt:849 min:-50 max:-45 avg:-46.02 lst:-50
rssi_at_HMLAN1 cnt:915 min:-58 max:-42 avg:-44.1 lst:-57
READINGS:
2020-01-13 14:34:57 CommandAccepted yes
2020-01-13 19:31:56 D-firmware 2.3
2020-01-13 19:31:56 D-serialNr MEQ0096525
2020-01-13 14:34:44 PairedTo 0xF11234
2019-12-31 10:19:37 R-intKeyVisib visib
2018-10-24 19:04:37 R-localResDis off
2018-10-24 19:04:37 R-pairCentral 0xF11234
2019-12-31 10:19:40 R-self01-lgActionType jmpToTarget
2019-12-31 10:19:40 R-self01-lgCtDlyOff geLo
2019-12-31 10:19:40 R-self01-lgCtDlyOn geLo
2019-12-31 10:19:40 R-self01-lgCtOff geLo
2019-12-31 10:19:40 R-self01-lgCtOn geLo
2019-12-31 10:19:40 R-self01-lgCtValHi 100
2019-12-31 10:19:40 R-self01-lgCtValLo 50
2019-12-31 10:19:40 R-self01-lgMultiExec on
2019-12-31 10:19:40 R-self01-lgOffDly 0 s
2019-12-31 10:19:40 R-self01-lgOffTime unused
2019-12-31 10:19:40 R-self01-lgOffTimeMode absolut
2019-12-31 10:19:40 R-self01-lgOnDly 0 s
2019-12-31 10:19:40 R-self01-lgOnTime unused
2019-12-31 10:19:40 R-self01-lgOnTimeMode absolut
2019-12-31 10:19:40 R-self01-lgSwJtDlyOff off
2019-12-31 10:19:40 R-self01-lgSwJtDlyOn off
2019-12-31 10:19:40 R-self01-lgSwJtOff off
2019-12-31 10:19:40 R-self01-lgSwJtOn dlyOff
2019-12-31 10:19:40 R-self01-shActionType jmpToTarget
2019-12-31 10:19:40 R-self01-shCtDlyOff geLo
2019-12-31 10:19:40 R-self01-shCtDlyOn geLo
2019-12-31 10:19:40 R-self01-shCtOff geLo
2019-12-31 10:19:40 R-self01-shCtOn geLo
2019-12-31 10:19:40 R-self01-shCtValHi 100
2019-12-31 10:19:40 R-self01-shCtValLo 50
2019-12-31 10:19:40 R-self01-shMultiExec off
2019-12-31 10:19:40 R-self01-shOffDly 0 s
2019-12-31 10:19:40 R-self01-shOffTime unused
2019-12-31 10:19:40 R-self01-shOffTimeMode absolut
2019-12-31 10:19:40 R-self01-shOnDly 0 s
2020-01-13 19:26:57 R-self01-shOnTime set_unused
2019-12-31 10:19:40 R-self01-shOnTimeMode absolut
2019-12-31 11:00:20 R-self01-shSwJtDlyOff off
2019-12-31 11:00:20 R-self01-shSwJtDlyOn on
2019-12-31 11:00:20 R-self01-shSwJtOff dlyOn
2019-12-31 11:00:20 R-self01-shSwJtOn dlyOff
2019-12-31 11:00:22 R-self02-lgActionType jmpToTarget
2019-12-31 11:00:22 R-self02-lgCtDlyOff geLo
2019-12-31 11:00:22 R-self02-lgCtDlyOn geLo
2019-12-31 11:00:22 R-self02-lgCtOff geLo
2019-12-31 11:00:22 R-self02-lgCtOn geLo
2019-12-31 11:00:22 R-self02-lgCtValHi 100
2019-12-31 11:00:22 R-self02-lgCtValLo 50
2019-12-31 11:00:22 R-self02-lgMultiExec on
2019-12-31 11:00:22 R-self02-lgOffDly 0 s
2019-12-31 11:00:22 R-self02-lgOffTime unused
2019-12-31 11:00:22 R-self02-lgOffTimeMode absolut
2019-12-31 11:00:22 R-self02-lgOnDly 0 s
2019-12-31 11:00:22 R-self02-lgOnTime unused
2019-12-31 11:00:22 R-self02-lgOnTimeMode absolut
2019-12-31 11:00:22 R-self02-lgSwJtDlyOff on
2019-12-31 11:00:22 R-self02-lgSwJtDlyOn on
2019-12-31 11:00:22 R-self02-lgSwJtOff dlyOn
2019-12-31 11:00:22 R-self02-lgSwJtOn on
2019-12-31 11:00:22 R-self02-shActionType jmpToTarget
2019-12-31 11:00:22 R-self02-shCtDlyOff geLo
2019-12-31 11:00:22 R-self02-shCtDlyOn geLo
2019-12-31 11:00:22 R-self02-shCtOff geLo
2019-12-31 11:00:22 R-self02-shCtOn geLo
2019-12-31 11:00:22 R-self02-shCtValHi 100
2019-12-31 11:00:22 R-self02-shCtValLo 50
2019-12-31 11:00:22 R-self02-shMultiExec off
2019-12-31 11:00:22 R-self02-shOffDly 0 s
2019-12-31 11:00:22 R-self02-shOffTime unused
2019-12-31 11:00:22 R-self02-shOffTimeMode absolut
2019-12-31 11:00:22 R-self02-shOnDly 0 s
2020-01-13 19:27:11 R-self02-shOnTime set_unused
2019-12-31 11:00:22 R-self02-shOnTimeMode absolut
2019-12-31 11:00:46 R-self02-shSwJtDlyOff off
2019-12-31 11:00:46 R-self02-shSwJtDlyOn on
2019-12-31 11:00:22 R-self02-shSwJtOff dlyOn
2019-12-31 11:00:22 R-self02-shSwJtOn dlyOff
2018-10-24 19:04:38 R-sign off
2018-10-24 19:04:38 R-statusInfoMinDly 2 s
2018-10-24 19:04:38 R-statusInfoRandom 1 s
2018-10-24 19:04:38 R-transmitTryMax 6
2020-01-13 19:32:16 deviceMsg on (to broadcast)
2020-01-13 19:32:16 level 100
2020-01-13 19:32:16 pct 100
2020-01-13 19:32:01 peerList self01,self02,
2020-01-13 14:35:05 powerOn 2020-01-13 14:35:05
2020-01-13 19:32:16 recentStateType info
2020-01-13 21:03:56 state RESPONSE TIMEOUT:RegisterRead
2020-01-13 19:32:16 timedOn off
helper:
HM_CMDNR 93
PONtest 0
cSnd 11F112343915280201000000,01F1123439152800040000000000
dlvl 00
dlvlCmd ++A011F112343915280201000000
getCfgList all
getCfgListNo ,3
mId 0069
peerFriend peerSens,peerVirt
peerIDsRaw ,39152801,39152802,00000000
peerOpt 3:switch
regLst 0,1,3p
rxType 1
supp_Pair_Rep 0
expert:
def 1
det 1
raw 0
tpl 0
io:
newChn +391528,00,00,00
nextSend 1578940336.18894
prefIO
rxt 0
vccu
p:
391528
00
00
00
mRssi:
mNo 58
io:
HMLAN1:
-51
-51
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
regCollect:
role:
chn 1
dev 1
prs 1
rssi:
HMLAN1:
avg -46.0235571260307
cnt 849
lst -50
max -45
min -50
at_HMLAN1:
avg -44.1092896174863
cnt 915
lst -57
max -42
min -58
shadowReg:
RegL_03.self01 07:FF
RegL_03.self02 07:FF
tmpl:
Attributes:
DbLogExclude .*
IODev HMLAN1
alexaName Flurlampe vorn
alexaRoom Flur
alias Flurlampe vorn
autoReadReg 5_readMissing
event-on-change-reading .*
expert 1_allReg
firmware 2.3
group Licht
model HM-LC-SW1PBU-FM
peerIDs 00000000,39152801,39152802,
room 08_Flur,Alexa,Favourites,Homekit
serialNr MEQ0096525
subType switch
webCmd on:off
Ich hatte vor einiger Zeit bereits die Register für die Umstellung auf "Toggle-Taster" gesetzt.
Eventuell vertragen sich die Einstellungen nicht im Zusammenspiel.
Zumindest scheint er jetzt nichts mehr anzunehmen. Was könnte helfen?
Nochmal pairen. Der sendet an 000000. Vorher clearMsg.
Danke, das neu Pairen hat funktioniert.
Ich bin nun aber davon abgewichen, das Register anzupassen und habe das DOIF von Frank für mich abgewandelt.
defmod FLUR.licht_vorn_timer_DOIF DOIF (["FLUR.licht_vorn:^on$"] and [?$SELF:device_state] eq "off") \
(setreading $SELF device_state on;;) \
(set FLUR.licht_hinten off)\
DOELSEIF (["FLUR.licht_vorn:^on$"] and [?$SELF:device_state] eq "on") \
(setreading $SELF device_state off;; set FLUR.licht_hinten off;;)\
DOELSEIF (["FLUR.licht_vorn:^Longpress:.on$"]) \
(setreading $SELF device_state on;;)\
DOELSEIF (["FLUR.licht_vorn:^off$"]) \
(setreading $SELF device_state off;;)
attr FLUR.licht_vorn_timer_DOIF DbLogExclude .*
attr FLUR.licht_vorn_timer_DOIF devStateIcon cmd_1.*:light_on-for-timer@orange cmd_2:off cmd_3:on cmd_4:off
attr FLUR.licht_vorn_timer_DOIF do always
attr FLUR.licht_vorn_timer_DOIF icon helper_doif
attr FLUR.licht_vorn_timer_DOIF wait 0,300:0:0:0
Die Besonderheit hier war, dass ich nicht direkt auf die state Abfrage der Lampe gehen konnte, da es sich ja um das selbe device handelt.
Ich habe dafür ein "pseudo state" Reading verwendet, dass ich selbst setze, nachdem der physische Zustand geändert wurde.
Hmmm, wie wäre es mit einem EventMapping ? z.B.
attr <Device> eventmap on-for-timer 300:on
So habe ich bei mir einen Bewegungsmelder eingebunden, der nach gewisser zeit wieder abschalten soll und deins klingt ähnlich...
Grüße
Christian
Zitat von: Loki am 13 Januar 2020, 21:28:54
Ich hatte vor einiger Zeit bereits die Register für die Umstellung auf "Toggle-Taster" gesetzt.
Eventuell vertragen sich die Einstellungen nicht im Zusammenspiel.
Das Toggeln mit kurzem Tastendruck ist auf beiden Tasten via kurzem Tastendruck aktiviert.
Lang tasten wie default unten aus, oben ein.
Das macht aber keine Probleme im Zusammenspiel mit einer Laufzeitbegrenzung.
Was so nicht funktionieren würde: Nachtriggern, d.h. die Laufzeit durch einen erneuten Tastendruck verlängern. Durch den Togglebetrieb erfolgt jetzt vorzeitige Abschaltung.
Durch die wegen des Toggelns nun mögliche Einschaltung des Aktors mit dem unteren Taster sind für beide Taster getrennt die Laufzeiten vorzugeben.
Ich würde solche Programmierung jeder Funktion via FHEM immer vorziehen.
Ich wüsste nicht, was da nicht funktionieren sollte. Die Lösung mit DOIF finde ich schrecklich kompliziert ;D
ZitatDer Taster ist ein HM-LC-SW1PBU-FM, der von Hause aus ja leider keinen Timer.
Doch, kann er. Meines Wissens wird sogar ein on-for-timer von CUL_HM in eine Laufzeitbegrenzung umgewandelt, die der Aktor selbsttätig umsetzt (Register timedOn wechselt auf running)
Solche Fragen speziell zu HM sind besser im Unterforum aufgehoben...
Jm2c.
Ja, in FHEM führen viele Wege nach Rom... ;)
Ich habe nun alle Möglichkeiten durchprobiert und auch das Setzen der Register hat beim 2. Test problemlos funktioniert.
Das ist nun auch endgültig die Lösung, die mir am besten gefällt. Kein Cooding im Fhem, alles "hart verdrahtet" im Schalter und somit auch lauffähig, wenn der Server mal nicht verfügbar sein sollte.
Danke für eure ganzen Anregungen.