FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Noxus am 01 April 2015, 13:17:31

Titel: [gelöst] DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 13:17:31
Bisher hatte ich für mein HM Taster den "toggel" Befehlt per notify benutzt um eine Milight Lamp an und aus zu schalten.
Jedoch würde ich gerne gleich ein bestimmte Farbe und Intensität per "hsv" mitgeben. Hierbei dachte ich das dies gut per DOIF geregelt werden könnte.
Ich habe jetzt schon x versch. konstelationen ausprobiert und mir schon irgendwie nen loop gebaut  ::)
Vielleicht kann mal jemand drüber schauen und erkennen wo mein Denkfehler liegt.

define HM_Taster_SZ_01_LichtLampe DOIF (([HM_Taster_SZ_Btn_01] =~ "Short") and ([Licht_SZ_Bettlampe] eq "off")) ((set Licht_SZ_Bettlampe hsv 46,100,80)) DOELSEIF (([HM_Taster_SZ_Btn_01] =~ "Short") and ([Licht_SZ_Bettlampe] eq "on")) (set Licht_SZ_Bettlampe off)

Hierbei war die Idee, das beim drücken des Tasters, wenn das Licht aus ist auf "hsv xxx" gestellt wird und beim drücken wenn das Licht an ist ausgeschaltet wird.
Vielen Dank im voraus...
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Otto123 am 01 April 2015, 13:36:43
Also ich habe von Damian gelernt, wenn Du immer dasselbe tust macht DOIF es nur einmal. Du musst eventuell do always setzen damit es bei jedem Druck angesteuert wird.

Du schreibst nicht so richtig was nicht geht bzw wie der loop aussieht.

Gruß Otto
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 14:25:24
Auf "always" habe ich das DOIF stehen.
Den loop hatte ich bei einen anderen skript aufbau ... wie gesagt, hatte ich viel rum probiert bis ich verzweifelt bin und erst einmal aufgehört habe.
Dachte, dass vielleicht jemand was ähnliches am rennen hat oder auf einen Blick sieht was für nen murcks ich da mache.
Werde noch genauere Angaben liefern - was der EventMonitor beim drücken sagt u.s.w... Danke erst einmal.
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Wuppi68 am 01 April 2015, 16:49:55
also ich würde das ganze ein wenig übersichtlicher schreiben

define HM_Taster_SZ_01_LichtLampe  DOIF ([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") (set Licht_SZ_Bettlampe hsv 46,100,80);
    IF ([Licht_SZ_Bettlampe] eq "off") (set Licht_SZ_Bettlampe off)
)


so aus dem Kopf :-) keine Commandref auf die schneller Verfügbar
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 18:34:16
([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") ((set Licht_SZ_Bettlampe hsv 46,100,80));
    IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
)

Mit Wuppi68 code leicht angepasst funktioniert so schon einmal das einschalten  :D
Jedoch das ausschalten wird noch verweigert.
Event Log sagt folgendes:

DOIF HM_Taster_SZ_01_LichtLampe error: ; IF (on 80 eq "on") (set Licht_SZ_Bettlampe off): syntax error at (eval 7863) line 1, near "on 80" syntax error at (eval 7863) line 1, near "}}"

Das "on" wird wohl nicht richtig intrrpretiert. Habe es mit [Licht_SZ_Bettlampe:?on] probiert... aber leider gleiches Ergebnis.
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Wuppi68 am 01 April 2015, 20:57:02
Zitat von: Noxus am 01 April 2015, 18:34:16
([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") ((set Licht_SZ_Bettlampe hsv 46,100,80));
    IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
)

Mit Wuppi68 code leicht angepasst funktioniert so schon einmal das einschalten  :D
Jedoch das ausschalten wird noch verweigert.
Event Log sagt folgendes:

DOIF HM_Taster_SZ_01_LichtLampe error: ; IF (on 80 eq "on") (set Licht_SZ_Bettlampe off): syntax error at (eval 7863) line 1, near "on 80" syntax error at (eval 7863) line 1, near "}}"

Das "on" wird wohl nicht richtig intrrpretiert. Habe es mit [Licht_SZ_Bettlampe:?on] probiert... aber leider gleiches Ergebnis.

tausch mal bitte das Semikolon gegen ein Komma nach dem ersten IF aus :-) und nimmt dort die Doppelklammerung raus

([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") (set Licht_SZ_Bettlampe hsv 46,100,80),
    IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
)
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Damian am 01 April 2015, 21:35:53
Zitat von: Wuppi68 am 01 April 2015, 20:57:02
tausch mal bitte das Semikolon gegen ein Komma nach dem ersten IF aus :-) und nimmt dort die Doppelklammerung raus

([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") (set Licht_SZ_Bettlampe hsv 46,100,80),
    IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
)


Zunächst stellt sich mir die Frage:

Hat denn Bettlampe überhaupt den Zustand "on", wenn du "set Licht_SZ_Bettlampe hsv 46,100,80" setzt? Wenn nicht, dann kann es prinzipiell so nicht funktionieren.

Gruß

Damian
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 21:38:58
Wenn ich die Doppelklammer raus nehme und das Semikolon gegen ein Komma tausche passiert nichts beim drücken der Taste.

Weder beim drücken wenn das licht "off" ist:
2015-04-01 21:17:39 DOIF HM_Taster_SZ_01_LichtLampe cmd_nr: 1
2015-04-01 21:17:39 DOIF HM_Taster_SZ_01_LichtLampe cmd_event: HM_Taster_SZ_Btn_01
2015-04-01 21:17:39 DOIF HM_Taster_SZ_01_LichtLampe error: IF ([Licht_SZ_Bettlampe] eq "off") (set Licht_SZ_Bettlampe hsv 46,100,80): Unknown command 80, try help.
2015-04-01 21:17:39 DOIF HM_Taster_SZ_01_LichtLampe cmd_1

noch beim Drücken wenn das Licht "on" ist:
2015-04-01 21:17:29 DOIF HM_Taster_SZ_01_LichtLampe cmd_nr: 1
2015-04-01 21:17:29 DOIF HM_Taster_SZ_01_LichtLampe cmd_event: HM_Taster_SZ_Btn_01
2015-04-01 21:17:29 DOIF HM_Taster_SZ_01_LichtLampe cmd_1

Mit Doppelklammer tritt der Fehler "... Unknown command 80.." nicht auf und das Licht geht wie gewollt an.
Beim nochmaligen drücken, also wenn das Licht eigentlich aus gehen soll passiert jedoch nichts.
Also das Semikolon gegen ein Komma austauschen, verursacht schon einmal keinen Fehler mehr im Event Monitor - thx  ;)

Wenn ich nur die Zeile:
IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
ausführe, passiert nichts. Also muss doch das "on" nicht richtig interpretiert werden, oder?
Als Ausgabe kommt beim device als State auch "on 80" und nicht einfach nur "on", weshalb ich es mit
IF ([Licht_SZ_Bettlampe:?on]) (set Licht_SZ_Bettlampe off)
probiert habe - aber leider wie gesagt ohne Erfolg.

Mein momentaner Befehl:
([HM_Taster_SZ_Btn_01] =~ "Short") (
    IF ([Licht_SZ_Bettlampe] eq "off") ((set Licht_SZ_Bettlampe hsv 46,100,80)),
    IF ([Licht_SZ_Bettlampe] eq "on") (set Licht_SZ_Bettlampe off)
)


Wahrscheinlich eine Kleinigkeit und dummer Fehler - sorry, bin noch neu in der Materie und versuche mich da rein zu wusseln.

[EDIT]
Genau, Damian - das hat es nicht. Was muss ich angeben, damit er das "on" + angefügte Zahl richtig interpretiert?
[EDIT]
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Damian am 01 April 2015, 21:43:20
Zitat von: Noxus am 01 April 2015, 21:38:58
[EDIT]
Genau, Damian - das hat es nicht. Was muss ich angeben, damit er das "on" + angefügte Zahl richtig interpretiert?
[EDIT]

Das sollte deine Lösung sein:

([HM_Taster_SZ_Btn_01] =~ "Short" [?Licht_SZ_Bettlampe] eq "off")
   ((set Licht_SZ_Bettlampe hsv 46,100,80))
DOELSE
   (set Licht_SZ_Bettlampe off)


Gruß

Damian
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 22:31:17
Danke für das schnell reply Damian  :)

Leider funktioniert das ebenfalls nicht.
Bekomme folgende Fehlermeldung im Monitor:

DOIF HM_Taster_SZ_01_LichtLampe error: perl error in condition: InternalDoIf('HM_Taster_SZ_Btn_01','STATE','') =~ "Short" InternalDoIf('Licht_SZ_Bettlampe','STATE','') eq "off": syntax error at (eval 8798) line 1, near ""Short" InternalDoIf"

Habe etwas rum gespielt und Veränderungen vorgenommen - leider ohne Erfolg  :-\
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Damian am 01 April 2015, 22:34:52
Zitat von: Noxus am 01 April 2015, 22:31:17
Danke für das schnell reply Damian  :)

Leider funktioniert das ebenfalls nicht.
Bekomme folgende Fehlermeldung im Monitor:

DOIF HM_Taster_SZ_01_LichtLampe error: perl error in condition: InternalDoIf('HM_Taster_SZ_Btn_01','STATE','') =~ "Short" InternalDoIf('Licht_SZ_Bettlampe','STATE','') eq "off": syntax error at (eval 8798) line 1, near ""Short" InternalDoIf"

Habe etwas rum gespielt und Veränderungen vorgenommen - leider ohne Erfolg  :-\

Mein Fehler, ich habe das and vergessen, es  muss natürlich heißen:

... DOIF ([HM_Taster_SZ_Btn_01] =~ "Short" and [?Licht_SZ_Bettlampe] eq "off") ...

Gruß

Damian
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 01 April 2015, 22:43:33
Perfekt  :)
Vielen Dank Damin und auch an Wuppi  :-*
Titel: Antw:DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Wuppi68 am 02 April 2015, 15:56:27
Zitat von: Noxus am 01 April 2015, 22:43:33
Perfekt  :)
Vielen Dank Damin und auch an Wuppi  :-*

Danke :-)

Wenn Du jetzt noch "gelöst" vor dem Freadtitel --> edit erster Post schreibst und dann deine Finale Lösung hier reinpostest, dann ist es auch von Dir perfekt :-)

Gruß

Ralf

btw: Meine Variante hat den Vorteil, dass Du relativ einfach zwischen verschiedenen Presets wechseln kannst Du weiteres einfügen von IF Zeilen 
Status = Oliv --> setze rot
Status = rot --> setze blau
Status = blau --> setze gelb

und dann einen nach dem anderen Durchdrücken kannst
Titel: Antw:[gelöst] DOIF Schalter "toggel" mit bestimmten Licht
Beitrag von: Noxus am 02 April 2015, 16:18:38
Finale Lösung:

define HM_Taster_SZ_01_LichtLampe  DOIF
([HM_Taster_SZ_Btn_01] =~ "Short" and [?Licht_SZ_Bettlampe] eq "off")
       ((set Licht_SZ_Bettlampe hsv 46,100,80))
DOELSE
       (set Licht_SZ_Bettlampe off)


Jetzt kann man die Milight Lamp mit einer Taste an bzw aus "toggeln" und dabei einen bestimmten Farbwert mitgeben  8)