FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hre1 am 27 September 2017, 11:30:18

Titel: HM-PB-2-WM55 und DOIF
Beitrag von: hre1 am 27 September 2017, 11:30:18
Hallo,

leider komme ich bei dem Versuch ein LED-Stripe über einen Funkwandtaster zu schalten, an meine Grenzen. Ich möchte bei kurzer Betätigung des Btn_1 mein LED-Stripe einschalten. Nach einer halben Stunde soll es dann von selbst auch wieder ausgehen. Ergänzend dazu, soll eine weitere kurze Tastenbetätigung mein LED-Stripe auch wieder ausschalten können. Das manuelle Ein- und Ausschalten funktioniert auch ohne Probleme:

(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "off"
)
   (set LEDStripeKueche on)

DOELSEIF
(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "on"
)
   (set LEDStripeKueche off)


aber wenn ich im Anweisungsteil vom DOIF noch ein sleep:

(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "off"
)
   (
      set LEDStripeKueche on,
      sleep 2700;
      set LEDStripeKueche off
   )

...

unterbringen möchte, kann ich mein LED-Stripe nach dem automatischen Ausschalten manuell nicht wieder einschalten. Ich habe es bereits mit eingen Attributen wie do always und repeatsame "herumexperimentiert", aber das Ergebnis bleibt immer dasselbe. Ein manueller Tastendruck lässt das LED-Stripe völlig kalt...:-(

Hat jemand vielleicht einen Tipp, was da schief laufen könnte?
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: pc1246 am 27 September 2017, 12:08:24
Moin
Bitte benutze codetags, das # ueber den Smilies! Und dann hilft ein list des devices mehr als das zusammenkopierte!
So wie Du das beschreibst, kann man auch nicht nachvollziehen, wie das DOIF jetzt wirklich aussieht.
Grundsaetzlich aber denke ich, dass der Ansatz falsch ist, und Du ein onfortimer nutzen solltest, sofern das bei dem Aktor fuer den Stripe moeglich ist!
Gruss Christoph
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: arthur_dent_2015 am 27 September 2017, 12:20:04
Moin,

wenn der Schaltaktor kein on-for-time unterstützt dann versuch es mal mit
(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "off"
)
   (set LEDStripeKueche on) (set LEDStripeKueche off)
attr doifname wait 1800

ein zweites DOIF muss dann den Ausschaltpart übernehmen. commandref lesen hilft (oft)  ;)

Gruß
Arthur
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: pc1246 am 27 September 2017, 12:27:40
Hallo Arthur
Und Codetags helfen auch!
Gruss Christoph
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: arthur_dent_2015 am 27 September 2017, 12:42:03
bei 6 Zeilen halte ich das für übertrieben  ;)
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: Beta-User am 27 September 2017, 12:59:58
Code-Tags machen es auch bei nur 6 Zeilen einfacher zu überblicken...

Und wenn du schon auf die commandref verweist: hättest du das intensiver getan, solltest du wissen, dass die Empfehlung, ein 2. DOIF zu nutzen suboptimal ist. Sollte (ungetestet) so gehen:

(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "off"
)
   (set LEDStripeKueche on) (set LEDStripeKueche off)
DOELSEIF
(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "on"
)
   (set LEDStripeKueche off)
attr doifname wait 0,2700:0


Aber was ich mich bei der Lektüre des ersten Beitrags gefragt habe: warum nutzt der TE erst ein ",", und dann ein ";", um einzelne Teile des Ausführungsteils zu trennen :o .
DOIF trennt Befehle nach meiner Kenntnis nur durch ","...
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: hre1 am 27 September 2017, 13:08:04
@arthur_dent_2015
Danke für den Hinweis. Dann folgt hier auch schon das list in den Codetags (das LED-Stripe-Modul kennt leider kein on-for-timer):

Internals:
   CFGFN      /stripe/opt/fhem/etc/fhem/HMLAN.cfg
   DEF        (
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "off"
)
   (
      set LEDStripeKueche on,
      sleep 2700;
      set LEDStripeKueche off
   )
DOELSEIF
(
   [WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType] eq "short_Release" and
   [LEDStripeKueche:state] eq "on"
)
   (set LEDStripeKueche off)
   NAME       WG.EG.KUECHE.LED_BELEUCHTUNG
   NR         966
   NTFY_ORDER 50-WG.EG.KUECHE.LED_BELEUCHTUNG
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-09-27 12:52:26   cmd             0
     2017-09-27 12:52:26   state           initialized
   Condition:
     0              ReadingValDoIf($hash,'WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1','virtActTrigType') eq "short_Release" and    ReadingValDoIf($hash,'LEDStripeKueche','state') eq "off"
     1              ReadingValDoIf($hash,'WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1','virtActTrigType') eq "short_Release" and    ReadingValDoIf($hash,'LEDStripeKueche','state') eq "on"
   Devices:
     0           WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1 LEDStripeKueche
     1           WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1 LEDStripeKueche
     all         WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1 LEDStripeKueche
   Do:
     0:
       0                 set LEDStripeKueche on,       sleep 2700;       set LEDStripeKueche off
     1:
       0          set LEDStripeKueche off
     2:
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType LEDStripeKueche:state
     1           WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType LEDStripeKueche:state
     all         WG.EG.hmVIRTUAL_ACTOR.KUECHE.1_Btn1:virtActTrigType LEDStripeKueche:state
   Regexp:
     All:
   State:
Attributes:
   checkReadingEvent 1
   cmdState   an|aus
   room       WIR.KUECHE


@pc1246
Danke für deinen Vorschlag! So etwas ähnliches hatte ich auch schon im Kopf, nur hatte ich die Befürchtung, dass sich die beiden DOIFs gegenseitig beeinflussen könnten, da der state am Ende ja immer auf "short_Release" steht. Wird dann das LED-Stripe automatisch ausgeschaltet, so vor mir vermutet, müsste dann nicht das andere DOIF "feuern"?

Und glaube mir bitte, die Doku habe ich bereits gelesen, nur leider keinen Erfolg damit gehabt. :)
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: pc1246 am 27 September 2017, 13:11:01
Zitat von: arthur_dent_2015 am 27 September 2017, 12:42:03
bei 6 Zeilen halte ich das für übertrieben  ;)

Schaus Dir mal an, koennten auch 7 sein!?
Und das ist genau der Grund!

Gruss Christoph
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: hre1 am 27 September 2017, 13:15:10
@Beta-User

Super, das sieht wirklich schlüssig für mich aus. Ich werde das mal heute abend zu Hause ausprobieren.  :)

Ohne das ";" blockiert FHEM da hinter sleep noch ein Befehl erwartet wird:

https://forum.fhem.de/index.php/topic,58123.msg495537.html#msg495537 (https://forum.fhem.de/index.php/topic,58123.msg495537.html#msg495537)
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: arthur_dent_2015 am 27 September 2017, 13:40:17
okay, okay. Grundsätzlich nutze ich ja Codetags.

@Beta-user: blockiert der Timer vom DOIF nicht den DOELSEIF?

Gruß
Arthur
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: Beta-User am 27 September 2017, 13:53:36
@Arthur:
Du fragst den Falschen, ich bin kein DOIF-User und würde sowieso versuchen, sowas mit perl zu lösen.

Aber da Damian diese Funktion bereitgestellt hat, bin ich mir ziemlich sicher, dass das grundsätzlich funktioniert, man aber ggf. noch irgendwelche mir völlig unverständlichen weiteren Attribute setzen muß. Und wie immer: Versuch macht kluch...

Ich hatte das so verstanden, dass ein anderer Zweig (":") auch unmittelbar ausgeführt wird, wenn für diesen "0" als Verzögerung angegeben wird. Das m´üßte das also paßen wie von mir angegeben. Kann aber auch sein, dass es ein "resetwait" oder auch was anderes braucht...
Titel: Antw:HM-PB-2-WM55 und DOIF
Beitrag von: hre1 am 28 September 2017, 12:09:36
@Beta-User
Habe deinen Vorschlag gestern Abend noch eingebaut und getestet. Es funktioniert jetzt wie gewünscht, auch wenn ich manchmal vom Homematic-Taster eine rote Rückmeldung bekomme (die hatte ich vorher nicht). Also vielen Dank nochmals!

Da man ja nie dumm sterben sollte, würde mich dann aber doch interessieren, warum mein erster Ansatz nicht geklappt hat. Vielleicht findet sich ja einer der es mir noch erklären könnte...