Ich möchte eine Email erhalten, wenn sich in meiner Abwesenheit ein Bewegungsmelder (FS20) eine Bewegung registriert.
Hier mein Code:
define di_Wohnzimmer_BM DOIF ([Wohnzimmer_BM] and [HomeState] eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )
attr di_Wohnzimmer_BM cmdpause 900
attr di_Wohnzimmer_BM do always
Ich bekommen nun aber sofort eine Email, wenn der Zustand von HomeState auf "absent" geht. Liegt das daran, dass das Bewegungsevent gespeichert wird
bis die zweite Bedingung erfüllt ist?
Ist ein "DOELSE" ohne Inhalt die Lösung?
Ich würde zunächst einmal nur auf den BM triggern und daher
[?HomeState] eq "absent"
verwenden.
Ich benutze DOIF nicht, daher mag ich falsch liegen. Aber wenn sich die Syntax analog zum PERL-if verhält, dann bedeutet
([Wohnzimmer_BM] and [HomeState] eq "absent")
wenn Wohnzimmer_BM IRGENDEINEN Wert hat und [HomeState] gleich "absent" ist, dann...
Und da Wohnzimmer_BM IMMER "irgendeinen" Wert hat, also immer wahr ist, löst [HomeState] eq "absent" auch immer sofort aus.
Ich mag mich aber täuschen, und das ist laut DOIF Syntax so korrekt.
Wenn du in der Perl if Bedingung keinen Vergleich angibst vergleicht er auf ungleich 0 oder undefined. Also nicht irgendein Wert sondern nicht 0.
Sobald aber ein Leerzeichen zur Null dazu kommt würde die bedingung aber wieder erfüllt sein.
Was gibt den der Bewegungsmelder für einen Status aus?
ZitatWenn du in der Perl if Bedingung keinen Vergleich angibst vergleicht er auf ungleich 0 oder undefined.
Okay, wusste ich nicht. Allerdings ändert das nichts an der Sache, denn wenn der Bewegungsmelder nur 1x auslöst ist [Wohnzimmer_BM] bereits TRUE. Bewegungsmelder haben ausserdem die Eigenschaft nur Bewegung anzuzeigen und nicht etwa KEINE Bewegung. D.H. die gehen nicht von selber auf "0" zurück oder so. Daher ist das meiner Aufassung nach so sowieso Tricky.
Ich würde daher eher was in Richtung:
define di_Wohnzimmer_BM notify Wohnzimmer_BM { if (Value("HomeState") eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )
machen, aber das ist natürlich ohne DOIF. Wie gesagt habe ich DOIF inhaltlich nicht auf dem Schirm, da ich Perl-If gewohnt bin. Aber man könnte die Variante oben ohne DOIF alternativ mal ausprobieren. Die müsste eigentlich ohne weiteres gehen.
Zitat von: JMW am 27 Mai 2015, 08:40:41
Ich möchte eine Email erhalten, wenn sich in meiner Abwesenheit ein Bewegungsmelder (FS20) eine Bewegung registriert.
Hier mein Code:
define di_Wohnzimmer_BM DOIF ([Wohnzimmer_BM] and [HomeState] eq "absent") ( { DebianMail('....','...','Bewegung im Zimmer erkannt') } )
attr di_Wohnzimmer_BM cmdpause 900
attr di_Wohnzimmer_BM do always
Ich bekommen nun aber sofort eine Email, wenn der Zustand von HomeState auf "absent" geht. Liegt das daran, dass das Bewegungsevent gespeichert wird
bis die zweite Bedingung erfüllt ist?
Ist ein "DOELSE" ohne Inhalt die Lösung?
Vorschlag:
...([Wohnzimmer_BM:?] and [?HomeState] eq "absent")...
Das erste Fragezeichen für beliebige Events, das zweite für Abfrage ohne Trigger.
Gruß
Damian
Super, funktioniert!
Danke.
(([Anwesenheitsstatus] eq "Urlaub" or [Anwesenheitsstatus] eq "Away") and [Bewegungsmelder1K1] eq "on-old-for-timer 60") (set Pushover1 msg 'ALARM' 'Bewegungsmelder Flur' '' 1 '')
Das o.g. funktioniert bei mir ohne das Nutzen von "?" , allerdings jedesmal wenn eine Bewegung ausgelöst wird.
[Bewegungsmelder1K1] erhält als state aber auch automatisch ein off , sonst würde das o.g. nicht funktionieren.