Hauptmenü

Bewegungsmelder und DOIF

Begonnen von johannes1984, 10 Mai 2015, 10:27:13

Vorheriges Thema - Nächstes Thema

johannes1984

Hallo,

ich bin gerade etwas am verzweifeln. Habe folgenden Code:

define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder] eq "motion") ("set SZ_LED_Bett RGB CDFF94")
attr SZ_Bett_Nachtlicht_An do always


Und dazu der Auszug aus den Events:
2015-05-10 10:27:44 DOIF SZ_Bett_Nachtlicht_An cmd_nr: 1
2015-05-10 10:27:44 DOIF SZ_Bett_Nachtlicht_An cmd_event: SZ_Bewegungsmelder
2015-05-10 10:27:44 DOIF SZ_Bett_Nachtlicht_An cmd_1
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder brightness: 240
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder motion: on (to VCCU)
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder motionCount: 50_next:7s
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder motion
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder trigDst_VCCU: noConfig
2015-05-10 10:27:44 CUL_HM SZ_Bewegungsmelder trigger_cnt: 50


Leider geht das Licht nicht an. :(

Was mache ich falsch?

LG Jo
RPi Version B, HMLAN, ZWave USB Stick, CUL

Damian

Zitat von: johannes1984 am 10 Mai 2015, 10:27:13
Hallo,

ich bin gerade etwas am verzweifeln. Habe folgenden Code:

define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder] eq "motion") ("set SZ_LED_Bett RGB CDFF94")
attr SZ_Bett_Nachtlicht_An do always


Leider geht das Licht nicht an. :(

Was mache ich falsch?

LG Jo

Warum setzt du den set-Befehl in Anführungszeichen? Und wenn es Homematic ist, würde ich das Event abfragen, nicht den Status,
also:

define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder:?motion]) (set SZ_LED_Bett RGB CDFF94)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

johannes1984

Hey,

Danke, eigentlich ja ganz einfach.  8) Mit deiner Lösung geht es.

Habe gerade mal noch den Farbwert von RGB nach HSV geändert. Sieht dann so aus:


define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder:?motion]) (set SZ_LED_Bett HSV 46,57,99)
attr SZ_Bett_Nachtlicht_An do always


Scheinbar kommt dann irgendwas durcheinander:

2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: set SZ_LED_Bett HSV 46: HSV is required as h,s,v
2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: 57: Unknown command 57, try help.
2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: 99: Unknown command 99, try help.


Vermutlich liegt das an den Kommata?!

LG Jo
RPi Version B, HMLAN, ZWave USB Stick, CUL

Damian

Zitat von: johannes1984 am 10 Mai 2015, 12:20:04
Hey,

Danke, eigentlich ja ganz einfach.  8) Mit deiner Lösung geht es.

Habe gerade mal noch den Farbwert von RGB nach HSV geändert. Sieht dann so aus:


define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder:?motion]) (set SZ_LED_Bett HSV 46,57,99)
attr SZ_Bett_Nachtlicht_An do always


Scheinbar kommt dann irgendwas durcheinander:

2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: set SZ_LED_Bett HSV 46: HSV is required as h,s,v
2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: 57: Unknown command 57, try help.
2015.05.10 12:16:24 2: SZ_Bett_Nachtlicht_An: 99: Unknown command 99, try help.


Vermutlich liegt das an den Kommata?!

LG Jo

ja, ist bei DOIF ein Trennzeichen zwischen Kommandos. Damit Komma nicht als Trennzeichen gilt, musst den jeweiligen Befehl zusätzlich in Klammern setzen (siehe Commandref zu DOIF), also:

define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder:?motion]) ((set SZ_LED_Bett HSV 46,57,99))

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

johannes1984

Ah ok :-)

Damit ich es richtig verstehe: Wenn ich noch einen zweiten Befehl ausführen wollte, dann müsste es z.B.

((set SZ_LED_Bett HSV 46,57,99), (set WZ_TV HSV 10,20,100))

lauten?
RPi Version B, HMLAN, ZWave USB Stick, CUL

Damian

Zitat von: johannes1984 am 10 Mai 2015, 13:05:01
Ah ok :-)

Damit ich es richtig verstehe: Wenn ich noch einen zweiten Befehl ausführen wollte, dann müsste es z.B.

((set SZ_LED_Bett HSV 46,57,99), (set WZ_TV HSV 10,20,100))

lauten?

ja.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

johannes1984

Hab nochmal bisschen rumgebaut:
define SZ_Bett_Nachtlicht_An DOIF ([SZ_Bewegungsmelder:?motion] and [Twilight:twilight] < 20) (set SZ_LED_Bett HSV 46,57,99)
attr SZ_Bett_Nachtlicht_An do always

define WD_SZ_Bett_Nachtlicht_An watchdog SZ_Bewegungsmelder:motion 00:00:30 SAME set SZ_LED_Bett off ;; setstate WD_SZ_Bett_Nachtlicht_An defined


Gibt es eine Möglichkeit, den Watchdog in das DOIF zu integrieren, so dass der nur ausgeführt wird, wenn die beiden Bedingungen zutreffen?

LG Jo
RPi Version B, HMLAN, ZWave USB Stick, CUL

johannes1984

Hey,

ich habe nochmal rumgebastelt und mich am Bsp. aus der Command Ref orientiert und somit den Watchdog "ausgesperrt" ;D :

define DU_Nachtlicht dummy

define DU_Nachtlicht_define DOIF ([SZ_Bewegungsmelder:?motion] and [Twilight:twilight] < 200) (set DU_Nachtlicht on, set DU_Nachtlicht off)
attr DU_Nachtlicht_define do always

define SZ_Bett_Nachtlicht_anaus DOIF ([DU_Nachtlicht] eq "on") (set SZ_LED_Bett RGB A4FF7D) DOELSE (set SZ_LED_Bett off)
attr SZ_Bett_Nachtlicht_anaus wait 0:30


Was ich nicht verstehe, ist, dass DU_Nachtlicht erst auf on und dann sofort wieder auf off geschalten wird. Im Beispiel steht es auch so drinnen. Was bringt das? :-)

Kann man die beiden DOIFs evtl. in eins kombinieren?

LG Jo
RPi Version B, HMLAN, ZWave USB Stick, CUL

Damian

Zitat von: johannes1984 am 10 Mai 2015, 19:02:31
Hey,

ich habe nochmal rumgebastelt und mich am Bsp. aus der Command Ref orientiert und somit den Watchdog "ausgesperrt" ;D :

define DU_Nachtlicht dummy

define DU_Nachtlicht_define DOIF ([SZ_Bewegungsmelder:?motion] and [Twilight:twilight] < 200) (set DU_Nachtlicht on, set DU_Nachtlicht off)
attr DU_Nachtlicht_define do always

define SZ_Bett_Nachtlicht_anaus DOIF ([DU_Nachtlicht] eq "on") (set SZ_LED_Bett RGB A4FF7D) DOELSE (set SZ_LED_Bett off)
attr SZ_Bett_Nachtlicht_anaus wait 0:30


Was ich nicht verstehe, ist, dass DU_Nachtlicht erst auf on und dann sofort wieder auf off geschalten wird. Im Beispiel steht es auch so drinnen. Was bringt das? :-)

Kann man die beiden DOIFs evtl. in eins kombinieren?

LG Jo

Demnächst. Diese Konstruktion bildet, wie es in der Doku steht, einen on-for-timer nach. Wenn dein Device einen on-for-timer unterstützt, kannst du es auch direkt angeben:

define DU_Nachtlicht_define DOIF ([SZ_Bewegungsmelder:?motion] and [Twilight:twilight] < 200) (set SZ_LED_Bett RGB A4FF7D on-for-timer 30)


Der Vorteil der DOIF-Lösung gegenüber einem on-for-timer ist, dass nicht bei jeder Bewegung der set-Befehl ausgeführt wird, solange die Lampe brennt.

Die scheinbar sinnlose Befehlsabfolge (set DU_Nachtlicht on, set DU_Nachtlicht off) sehe mal als Denksportaufgabe an, wenn du sie verstanden hast, dann hast du auch gleichzeitig das Konzept des wait-Attributes bei DOIF verstanden.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

johannes1984

Zitat von: Damian am 10 Mai 2015, 19:38:37
Die scheinbar sinnlose Befehlsabfolge (set DU_Nachtlicht on, set DU_Nachtlicht off) sehe mal als Denksportaufgabe an, wenn du sie verstanden hast, dann hast du auch gleichzeitig das Konzept des wait-Attributes bei DOIF verstanden.

Denke, es dürfte das hier sein :-)
ZitatVerzögerungen für die Ausführung von Kommandos werden pro Kommando über das Attribut "wait" definiert. Syntax:

attr <Modulname> wait <Sekunden für das erste Kommando>:<Sekunden für das zweite Kommando>:...

LG Jo
RPi Version B, HMLAN, ZWave USB Stick, CUL

johannes1984

Hey,

noch ne Frage 8) Die letzte für heute.

Kann ich eigentlich auch Zeitintervalle in DOIF und DOELSEIF angeben, so dass dann je nach Uhrzeit eine andere Bedingung ausgeführt wird? Also:

WENN 0-13 Uhr DANN "LED Farbe blau"
WENN 13-0 Uhr DANN "LED Farbe grün"

LG Johannes
RPi Version B, HMLAN, ZWave USB Stick, CUL

Damian

Zitat von: johannes1984 am 10 Mai 2015, 22:13:44
Hey,

noch ne Frage 8) Die letzte für heute.

Kann ich eigentlich auch Zeitintervalle in DOIF und DOELSEIF angeben, so dass dann je nach Uhrzeit eine andere Bedingung ausgeführt wird? Also:

WENN 0-13 Uhr DANN "LED Farbe blau"
WENN 13-0 Uhr DANN "LED Farbe grün"

LG Johannes

define SZ_Bett_Nachtlicht_anaus DOIF ([DU_Nachtlicht] eq "on" and [?00:00-13:00]) (set SZ_LED_Bett RGB BLAU)
DOELSEIF ([DU_Nachtlicht] eq "on" and [?13:00-00:00]) (set SZ_LED_Bett RGB GRÜN)
DOELSE (set SZ_LED_Bett off)

attr SZ_Bett_Nachtlicht_anaus wait 0:0:30


Das sollte für den Anfang reichen, den Rest wirst du schon mit Hilfe der Commandref selbst meistern.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF