Bewegungsmelder: Status zurücksetzen: Unterschied zwischen den Versionen
Krikan (Diskussion | Beiträge) K (Anpassung an FHEM 5.7) |
K (Tippfehler, Formatierung, Wikify...) |
||
Zeile 1: | Zeile 1: | ||
Bewegungsmelder | Bewegungsmelder (z.B. von [[HomeMatic Type motionDetector]]) haben den Nachteil, dass nach einer erkannten Bewegung zwar das Reading ''motion'' gesetzt, aber nicht mehr zurückgesetzt wird. Der folgende Codeschnipsel behebt das. Das Reading wird auf ''scanning'' zurückgesetzt und ein Event ausgelöst, auf das wiederum reagiert werden kann. | ||
Folgender Code muss in die | Folgender Code muss in die [[99_myUtils anlegen|99_myUtils.pm]] kopiert werden: | ||
<source lang="perl"> | |||
sub BM_MotionHandling($$){ | sub BM_MotionHandling($$){ | ||
my($device, $event) = @_; | my($device, $event) = @_; | ||
Zeile 13: | Zeile 13: | ||
fhem "modify ".$ResetAT." +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}"; | fhem "modify ".$ResetAT." +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}"; | ||
} else { | } else { | ||
fhem "define ".$ResetAT." at +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}"; | |||
} | } | ||
} elsif($event eq "scanning") { | } elsif($event eq "scanning") { | ||
Zeile 20: | Zeile 20: | ||
} | } | ||
} | } | ||
</source> | |||
Anschließend ist einmalig ein | Anschließend ist einmalig ein [[notify]] zu definieren. In diesem Beispiel wird davon ausgegangen, dass alle Bewegungsmelder mit "BM_" beginnen und bei Bewegung ein Reading mit dem Namen ''motion'' gesetzt wird. Anderenfalls muss die [[Regulärer Ausdruck|Regexp]] angepasst werden. | ||
:<code>define NTFY_Reset_Motion notify (BM_.*:motion*) {BM_MotionHandling("$NAME", "motion")}</code> | |||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Version vom 11. Juni 2016, 09:57 Uhr
Bewegungsmelder (z.B. von HomeMatic Type motionDetector) haben den Nachteil, dass nach einer erkannten Bewegung zwar das Reading motion gesetzt, aber nicht mehr zurückgesetzt wird. Der folgende Codeschnipsel behebt das. Das Reading wird auf scanning zurückgesetzt und ein Event ausgelöst, auf das wiederum reagiert werden kann.
Folgender Code muss in die 99_myUtils.pm kopiert werden:
sub BM_MotionHandling($$){
my($device, $event) = @_;
return if($attr{$device}{subType} ne "motionDetector");
my $ResetAT = $device."_Reset";
if($event eq "motion") {
# Bewegung erkannt, erstelle AT um Status wieder zurückzusetzen
if (defined($defs{$ResetAT})) {
fhem "modify ".$ResetAT." +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}";
} else {
fhem "define ".$ResetAT." at +00:05:00 {BM_MotionHandling(\"$device\", \"scanning\")}";
}
} elsif($event eq "scanning") {
# Status des Devices wieder zurücksetzen
readingsSingleUpdate($defs{$device}, "state", $event, 1);
}
}
Anschließend ist einmalig ein notify zu definieren. In diesem Beispiel wird davon ausgegangen, dass alle Bewegungsmelder mit "BM_" beginnen und bei Bewegung ein Reading mit dem Namen motion gesetzt wird. Anderenfalls muss die Regexp angepasst werden.
define NTFY_Reset_Motion notify (BM_.*:motion*) {BM_MotionHandling("$NAME", "motion")}