FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Loki am 13 Januar 2020, 13:44:23

Titel: [erledigt] Timer für Licht bei physischen Tastendruck
Beitrag von: Loki am 13 Januar 2020, 13:44:23
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Waldmensch am 13 Januar 2020, 13:56:05
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
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Mitch am 13 Januar 2020, 14:00:02
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Frank_Huber am 13 Januar 2020, 14:02:35
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Beta-User am 13 Januar 2020, 14:03:36
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Loki am 13 Januar 2020, 21:28:54
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?
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Beta-User am 14 Januar 2020, 05:35:17
Nochmal pairen. Der sendet an 000000. Vorher clearMsg.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Loki am 14 Januar 2020, 11:46:01
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: cs-online am 14 Januar 2020, 12:32:20
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
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Pfriemler am 15 Januar 2020, 19:13:48
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.
Titel: Antw:Timer für Licht bei physischen Tastendruck
Beitrag von: Loki am 15 Januar 2020, 22:17:15
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.