[gelöst] HM-LC-Bl1PBU-FM bei langem Tastendruck bestimmte Position anfahren

Begonnen von dbox2user, 12 Oktober 2016, 20:43:23

Vorheriges Thema - Nächstes Thema

pwlr

Moin,

ich würde den maxTimeF wieder auf "unused" stellen. Die Laufzeit und damit die Position bestimmst Du ja über die Register driveUp und driveDown im Zusammenspiel mit den lgOnLevel oder lgOfflevel. Sonst hast Du eine Doppeldefinition - allerdings ist mir die Auswirkung von maxTimeF nicht wirklich klar. In meiner Installation nutze ich das Register nicht.

Mal ne Frage zum Verständnis : Wenn die Jalousie oben ist, hast Du dann 100% oder 0% im Reading pct ??

Hier mal meine Register zur Info, allerdings für short. Damit wird von einem Peer gezielt auf 12% gefahren.
shActionType jmpToTarget
shCtDlyOff geLo
shCtDlyOn geLo
shCtOff geLo
shCtOn geLo
shCtRampOff geLo
shCtRampOn geLo
shCtRefOff geLo
shCtRefOn geLo
shCtValHi 100
shCtValLo 50
shMultiExec off
shOffDly 0 s
shOffTime unused
shOffTimeMode absolut
shOnDly 0 s
shOnTime unused
shOnTimeMode absolut
shBlJtDlyOff no
shBlJtDlyOn no
shBlJtOff refOn
shBlJtOn refOn
shBlJtRampOff refOn
shBlJtRampOn on
shBlJtRefOff off
shBlJtRefOn on
shDriveMode direct
shMaxTimeF unused
shOffLevel 0%
shOnLevel 12%


Moin
Bernd

Damu

]]https://forum.fhem.de/index.php/topic,25118.msg183262.html#msg183262[/url]

Bei mir gehen die Storren beim kurzen drücken nach unten auf die Position 40%

Das hab ich am Aktor mit der Homematic Software eingestellt.
Geht da über die Experteneinstellungen.

Das sollte aber glaube ich auch für langes drücken möglich sein.
Muss mal schauen wie ich die eingestellten Werte über Fhem auslesen kann.
Dann sollte es ersichtlich sein, hab nur einen Aktor der so ist.


ZitatStore_Parkplatz type:blindActuator -
list:peer   register         :value
   0:         intKeyVisib      :visib
   0:         pairCentral      :0x2572A2
   1:         driveDown        :38 s
   1:         driveTurn        :2 s
   1:         driveUp          :37 s
   1:         refRunCounter    :0
   1:         sign             :off
   3:FB_A_Bnt_11   lgActionType     :jmpToTarget
   3:FB_A_Bnt_11   lgBlJtDlyOff     :refOff
   3:FB_A_Bnt_11   lgBlJtDlyOn      :dlyOff
   3:FB_A_Bnt_11   lgBlJtOff        :dlyOff
   3:FB_A_Bnt_11   lgBlJtOn         :dlyOff
   3:FB_A_Bnt_11   lgBlJtRampOff    :rampOff
   3:FB_A_Bnt_11   lgBlJtRampOn     :on
   3:FB_A_Bnt_11   lgBlJtRefOff     :rampOff
   3:FB_A_Bnt_11   lgBlJtRefOn      :on
   3:FB_A_Bnt_11   lgCtDlyOff       :geLo
   3:FB_A_Bnt_11   lgCtDlyOn        :geLo
   3:FB_A_Bnt_11   lgCtOff          :geLo
   3:FB_A_Bnt_11   lgCtOn           :geLo
   3:FB_A_Bnt_11   lgCtRampOff      :geLo
   3:FB_A_Bnt_11   lgCtRampOn       :geLo
   3:FB_A_Bnt_11   lgCtRefOff       :geLo
   3:FB_A_Bnt_11   lgCtRefOn        :geLo
   3:FB_A_Bnt_11   lgCtValHi        :100
   3:FB_A_Bnt_11   lgCtValLo        :50
   3:FB_A_Bnt_11   lgDriveMode      :direct
   3:FB_A_Bnt_11   lgMaxTimeF       :0.8 s
   3:FB_A_Bnt_11   lgMultiExec      :on
   3:FB_A_Bnt_11   lgOffDly         :0 s
   3:FB_A_Bnt_11   lgOffLevel       :0 %
   3:FB_A_Bnt_11   lgOffTime        :unused
   3:FB_A_Bnt_11   lgOffTimeMode    :absolut
   3:FB_A_Bnt_11   lgOnDly          :0 s
   3:FB_A_Bnt_11   lgOnLevel        :100 %
   3:FB_A_Bnt_11   lgOnTime         :unused
   3:FB_A_Bnt_11   lgOnTimeMode     :absolut
   3:FB_A_Bnt_11   shActionType     :jmpToTarget
   3:FB_A_Bnt_11   shBlJtDlyOff     :refOff
   3:FB_A_Bnt_11   shBlJtDlyOn      :dlyOff
   3:FB_A_Bnt_11   shBlJtOff        :dlyOff
   3:FB_A_Bnt_11   shBlJtOn         :dlyOff
   3:FB_A_Bnt_11   shBlJtRampOff    :rampOff
   3:FB_A_Bnt_11   shBlJtRampOn     :on
   3:FB_A_Bnt_11   shBlJtRefOff     :rampOff
   3:FB_A_Bnt_11   shBlJtRefOn      :on
   3:FB_A_Bnt_11   shCtDlyOff       :geLo
   3:FB_A_Bnt_11   shCtDlyOn        :geLo
   3:FB_A_Bnt_11   shCtOff          :geLo
   3:FB_A_Bnt_11   shCtOn           :geLo
   3:FB_A_Bnt_11   shCtRampOff      :geLo
   3:FB_A_Bnt_11   shCtRampOn       :geLo
   3:FB_A_Bnt_11   shCtRefOff       :geLo
   3:FB_A_Bnt_11   shCtRefOn        :geLo
   3:FB_A_Bnt_11   shCtValHi        :100
   3:FB_A_Bnt_11   shCtValLo        :50
   3:FB_A_Bnt_11   shDriveMode      :viaUpperEnd
   3:FB_A_Bnt_11   shMaxTimeF       :unused
   3:FB_A_Bnt_11   shMultiExec      :off
   3:FB_A_Bnt_11   shOffDly         :0 s
   3:FB_A_Bnt_11   shOffLevel       :40 %
   3:FB_A_Bnt_11   shOffTime        :unused
   3:FB_A_Bnt_11   shOffTimeMode    :absolut
   3:FB_A_Bnt_11   shOnDly          :0 s
   3:FB_A_Bnt_11   shOnLevel        :100 %
   3:FB_A_Bnt_11   shOnTime         :unused
   3:FB_A_Bnt_11   shOnTimeMode     :absolut
   3:FB_A_Bnt_12   lgActionType     :jmpToTarget
   3:FB_A_Bnt_12   lgBlJtDlyOff     :dlyOn
   3:FB_A_Bnt_12   lgBlJtDlyOn      :refOn
   3:FB_A_Bnt_12   lgBlJtOff        :dlyOn
   3:FB_A_Bnt_12   lgBlJtOn         :dlyOn
   3:FB_A_Bnt_12   lgBlJtRampOff    :off
   3:FB_A_Bnt_12   lgBlJtRampOn     :rampOn
   3:FB_A_Bnt_12   lgBlJtRefOff     :off
   3:FB_A_Bnt_12   lgBlJtRefOn      :rampOn
   3:FB_A_Bnt_12   lgCtDlyOff       :geLo
   3:FB_A_Bnt_12   lgCtDlyOn        :geLo
   3:FB_A_Bnt_12   lgCtOff          :geLo
   3:FB_A_Bnt_12   lgCtOn           :geLo
   3:FB_A_Bnt_12   lgCtRampOff      :geLo
   3:FB_A_Bnt_12   lgCtRampOn       :geLo
   3:FB_A_Bnt_12   lgCtRefOff       :geLo
   3:FB_A_Bnt_12   lgCtRefOn        :geLo
   3:FB_A_Bnt_12   lgCtValHi        :100
   3:FB_A_Bnt_12   lgCtValLo        :50
   3:FB_A_Bnt_12   lgDriveMode      :direct
   3:FB_A_Bnt_12   lgMaxTimeF       :0.8 s
   3:FB_A_Bnt_12   lgMultiExec      :on
   3:FB_A_Bnt_12   lgOffDly         :0 s
   3:FB_A_Bnt_12   lgOffLevel       :0 %
   3:FB_A_Bnt_12   lgOffTime        :unused
   3:FB_A_Bnt_12   lgOffTimeMode    :absolut
   3:FB_A_Bnt_12   lgOnDly          :0 s
   3:FB_A_Bnt_12   lgOnLevel        :100 %
   3:FB_A_Bnt_12   lgOnTime         :unused
   3:FB_A_Bnt_12   lgOnTimeMode     :absolut
   3:FB_A_Bnt_12   shActionType     :jmpToTarget
   3:FB_A_Bnt_12   shBlJtDlyOff     :dlyOn
   3:FB_A_Bnt_12   shBlJtDlyOn      :refOn
   3:FB_A_Bnt_12   shBlJtOff        :dlyOn
   3:FB_A_Bnt_12   shBlJtOn         :dlyOn
   3:FB_A_Bnt_12   shBlJtRampOff    :off
   3:FB_A_Bnt_12   shBlJtRampOn     :rampOn
   3:FB_A_Bnt_12   shBlJtRefOff     :off
   3:FB_A_Bnt_12   shBlJtRefOn      :rampOn
   3:FB_A_Bnt_12   shCtDlyOff       :geLo
   3:FB_A_Bnt_12   shCtDlyOn        :geLo
   3:FB_A_Bnt_12   shCtOff          :geLo
   3:FB_A_Bnt_12   shCtOn           :geLo
   3:FB_A_Bnt_12   shCtRampOff      :geLo
   3:FB_A_Bnt_12   shCtRampOn       :geLo
   3:FB_A_Bnt_12   shCtRefOff       :geLo
   3:FB_A_Bnt_12   shCtRefOn        :geLo
   3:FB_A_Bnt_12   shCtValHi        :100
   3:FB_A_Bnt_12   shCtValLo        :50
   3:FB_A_Bnt_12   shDriveMode      :direct
   3:FB_A_Bnt_12   shMaxTimeF       :unused
   3:FB_A_Bnt_12   shMultiExec      :off
   3:FB_A_Bnt_12   shOffDly         :0 s
   3:FB_A_Bnt_12   shOffLevel       :0 %
   3:FB_A_Bnt_12   shOffTime        :unused
   3:FB_A_Bnt_12   shOffTimeMode    :absolut
   3:FB_A_Bnt_12   shOnDly          :0 s
   3:FB_A_Bnt_12   shOnLevel        :100 %
   3:FB_A_Bnt_12   shOnTime         :unused
   3:FB_A_Bnt_12   shOnTimeMode     :absolut
   3:self01   lgActionType     :jmpToTarget
   3:self01   lgBlJtDlyOff     :dlyOn
   3:self01   lgBlJtDlyOn      :refOn
   3:self01   lgBlJtOff        :dlyOn
   3:self01   lgBlJtOn         :dlyOn
   3:self01   lgBlJtRampOff    :off
   3:self01   lgBlJtRampOn     :rampOn
   3:self01   lgBlJtRefOff     :off
   3:self01   lgBlJtRefOn      :rampOn
   3:self01   lgCtDlyOff       :geLo
   3:self01   lgCtDlyOn        :geLo
   3:self01   lgCtOff          :geLo
   3:self01   lgCtOn           :geLo
   3:self01   lgCtRampOff      :geLo
   3:self01   lgCtRampOn       :geLo
   3:self01   lgCtRefOff       :geLo
   3:self01   lgCtRefOn        :geLo
   3:self01   lgCtValHi        :100
   3:self01   lgCtValLo        :50
   3:self01   lgDriveMode      :direct
   3:self01   lgMaxTimeF       :0.5 s
   3:self01   lgMultiExec      :on
   3:self01   lgOffDly         :0 s
   3:self01   lgOffLevel       :0 %
   3:self01   lgOffTime        :unused
   3:self01   lgOffTimeMode    :absolut
   3:self01   lgOnDly          :0 s
   3:self01   lgOnLevel        :100 %
   3:self01   lgOnTime         :unused
   3:self01   lgOnTimeMode     :absolut
   3:self01   shActionType     :jmpToTarget
   3:self01   shBlJtDlyOff     :dlyOn
   3:self01   shBlJtDlyOn      :refOn
   3:self01   shBlJtOff        :dlyOn
   3:self01   shBlJtOn         :dlyOn
   3:self01   shBlJtRampOff    :off
   3:self01   shBlJtRampOn     :rampOn
   3:self01   shBlJtRefOff     :off
   3:self01   shBlJtRefOn      :rampOn
   3:self01   shCtDlyOff       :geLo
   3:self01   shCtDlyOn        :geLo
   3:self01   shCtOff          :geLo
   3:self01   shCtOn           :geLo
   3:self01   shCtRampOff      :geLo
   3:self01   shCtRampOn       :geLo
   3:self01   shCtRefOff       :geLo
   3:self01   shCtRefOn        :geLo
   3:self01   shCtValHi        :100
   3:self01   shCtValLo        :50
   3:self01   shDriveMode      :direct
   3:self01   shMaxTimeF       :unused
   3:self01   shMultiExec      :off
   3:self01   shOffDly         :0 s
   3:self01   shOffLevel       :0 %
   3:self01   shOffTime        :unused
   3:self01   shOffTimeMode    :absolut
   3:self01   shOnDly          :0 s
   3:self01   shOnLevel        :100 %
   3:self01   shOnTime         :unused
   3:self01   shOnTimeMode     :absolut
   3:self02   lgActionType     :jmpToTarget
   3:self02   lgBlJtDlyOff     :refOff
   3:self02   lgBlJtDlyOn      :refOn
   3:self02   lgBlJtOff        :dlyOn
   3:self02   lgBlJtOn         :dlyOff
   3:self02   lgBlJtRampOff    :off
   3:self02   lgBlJtRampOn     :on
   3:self02   lgBlJtRefOff     :off
   3:self02   lgBlJtRefOn      :on
   3:self02   lgCtDlyOff       :geLo
   3:self02   lgCtDlyOn        :geLo
   3:self02   lgCtOff          :geLo
   3:self02   lgCtOn           :geLo
   3:self02   lgCtRampOff      :geLo
   3:self02   lgCtRampOn       :geLo
   3:self02   lgCtRefOff       :geLo
   3:self02   lgCtRefOn        :geLo
   3:self02   lgCtValHi        :100
   3:self02   lgCtValLo        :50
   3:self02   lgDriveMode      :direct
   3:self02   lgMaxTimeF       :0.5 s
   3:self02   lgMultiExec      :on
   3:self02   lgOffDly         :0 s
   3:self02   lgOffLevel       :0 %
   3:self02   lgOffTime        :unused
   3:self02   lgOffTimeMode    :absolut
   3:self02   lgOnDly          :0 s
   3:self02   lgOnLevel        :100 %
   3:self02   lgOnTime         :unused
   3:self02   lgOnTimeMode     :absolut
   3:self02   shActionType     :jmpToTarget
   3:self02   shBlJtDlyOff     :rampOff
   3:self02   shBlJtDlyOn      :rampOff
   3:self02   shBlJtOff        :rampOff
   3:self02   shBlJtOn         :rampOff
   3:self02   shBlJtRampOff    :off
   3:self02   shBlJtRampOn     :on
   3:self02   shBlJtRefOff     :off
   3:self02   shBlJtRefOn      :on
   3:self02   shCtDlyOff       :geLo
   3:self02   shCtDlyOn        :geLo
   3:self02   shCtOff          :geLo
   3:self02   shCtOn           :geLo
   3:self02   shCtRampOff      :geLo
   3:self02   shCtRampOn       :geLo
   3:self02   shCtRefOff       :geLo
   3:self02   shCtRefOn        :geLo
   3:self02   shCtValHi        :100
   3:self02   shCtValLo        :50
   3:self02   shDriveMode      :viaUpperEnd
   3:self02   shMaxTimeF       :unused
   3:self02   shMultiExec      :off
   3:self02   shOffDly         :0 s
   3:self02   shOffLevel       :40 %
   3:self02   shOffTime        :unused
   3:self02   shOffTimeMode    :absolut
   3:self02   shOnDly          :0 s
   3:self02   shOnLevel        :100 %
   3:self02   shOnTime         :unused
   3:self02   shOnTimeMode     :absolut

Das (3:self02   shDriveMode      :viaUpperEnd)  hab ich anders.
Bei mir ist ON 100 OBEN und OFF 0 UNTEN.
Die Storre darf nie auf 0 OFF UNTEN gehen.
ViaUpperEnd macht das die Storre beim Tastendruck nach unten immer zuerst auf ON 100 OBEN geht und erst dann die 40 anfährt.
Sonnst kann es vorkommen das sie bei FHEM auf 40 steht und tatsächlich auf 20 Steht.


dbox2user

Sorry für die späte Rückmeldung, aber ich konnte das ganze länger nicht anpassen und testen!
Vielen Dank nochmal an alle! Jetzt funktioniert das ganze so wie ich es will!  :D

Entscheidend war "set HM_29CFE2 regSet lgOffLevel 60 self01 ".
lgMaxTimeF MUSS auch angepasst werden, da Standard auf 0,4 Sekunden gestellt ist und der Motor so nur kurz fahren würde.

Hier nochmal wie es bei mir  funktioniert:

Taster 1:
set HM_29CFE2 regSet lgMultiExec off self01 Damit grundsätzlich die Unterscheidung zwischen lang und kurz funktioniert;
set HM_29CFE2 regSet lgMaxTimeF 8 self01 Bei langem Tastendruck fährt der Motor MAXIMAL für 8 Sekunden
set HM_29CFE2 regSet lgOnTime unused self01
set HM_29CFE2 regSet lgOffLevel 60 self01 Motor fährt auf Position 40% -->  (100%-60% = 40%; wegen Attribut "levelInverse")


Taster 2:
set HM_29CFE2 regSet lgMultiExec off self02 Damit grundsätzlich die Unterscheidung zwischen lang und kurz funktioniert;
set HM_29CFE2 regSet lgMaxTimeF 8 self02 Bei langem Tastendruck fährt der Motor MAXIMAL für 8 Sekunden
set HM_29CFE2 regSet lgOnTime unused self02
set HM_29CFE2 regSet lgOnLevel 60 self02 Motor fährt auf Position 40% -->  (100%-60% = 40%; wegen Attribut "levelInverse")


Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

martinp876

Zitatset HM_29CFE2 regSet lgMultiExec off self01         Damit grundsätzlich die Unterscheidung zwischen lang und kurz funktioniert;
Multiexec ist für "long" interessant. ein "long" sender schickt alle paar hundert ms einen "folgetrigger". Bei multiexec ON wird auf jeden Trigger reagiert. Du willst aber nur einmal "erkennen" und gut. Also "off" schalten.
Der Kommentar ist also falsch.
Zitatset HM_29CFE2 regSet lgMaxTimeF 8 self01         Bei langem Tastendruck fährt der Motor MAXIMAL für 8 Sekunden
auch falsch - zumindest unvollständign und irreführend.
maxTimeFirst sagt, dass beim Erkennen eines Triggers der Motor 8sec fahren soll (es sei den, eine andere Endbedingung ist erreicht). da du multiexec "off" hast kommt das auch nur einmal dran. Ansonsten wird das bei jeden Folge-Trigger wiederholt. Also bei dir: ja. Das ist aber ein Sonderfall - der Kommentar verwirrt andere User.
Sinnvoll wäre es,  hier "unused" einzutragen. Das macht bei "ein-trigger" aktionen sinn (also "short" - und bei dir das an ein short angepasste "long")

MaxTimeF wird typisch an die wiederholzeit des Triggers angepasst in welcher der Sender re-triggert (bei long). Das gewährleistet ein ruckelfreies fahren.

dbox2user

Hallo Martin!
Nachdem Du hier der Administrator bist und dich anscheinend gut auskennst , darfst du gerne meine Kommentare entsprechend anpassen, dass sie richtig sind.
Andere User kann das dann bestimmt helfen.

Wie bereits geschrieben, bin ich beim Thema Homematic blutiger Anfänger.
Meine Kommentare sind lediglich Vermutungen über die einzelnen Bedeutungen,die ich geschrieben habe um anderen evtl zu helfen.
Du scheinst ja die echte Bedeutung zu 'wissen'.

Mir hätte es auch geholfen wenn Du schon früher die Bedeutungen geschrieben hättest.

Gruß
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;