Bewegungsmelder: Status zurücksetzen: Unterschied zwischen den Versionen

Aus FHEMWiki
(Zurücksetzen des Reading "motion")
 
K (Anpassung an FHEM 5.7)
Zeile 22: Zeile 22:


Anschließend ist einmalig ein Notify zu definieren. Hier wird davon ausgegangen, das alle Bewegungsmelder mit "BM_" beginnen und bei Bewegung ein "motion" gesetzt wird. Andernfalls muss die Regexp angepasst werden.
Anschließend ist einmalig ein Notify zu definieren. Hier wird davon ausgegangen, das alle Bewegungsmelder mit "BM_" beginnen und bei Bewegung ein "motion" gesetzt wird. Andernfalls muss die Regexp angepasst werden.
  define NTFY_Reset_Motion notify (BM_.*:motion*) {BM_MotionHandling("%NAME", "motion")}
  define NTFY_Reset_Motion notify (BM_.*:motion*) {BM_MotionHandling("$NAME", "motion")}


[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Version vom 15. November 2015, 20:23 Uhr

Bewegungsmelder, zb. von Homematic, haben den Nachteil, das nach einer erkannten Bewegung zwar das Reading "motion" gesetzt - aber nicht mehr zurückgesetzt wird. Folgender Codeschnipsel behebt das. Das Reading wird auf "scanning" zurückgesetzt und ein Event ausgelöst auf das wiederrum 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. Hier wird davon ausgegangen, das alle Bewegungsmelder mit "BM_" beginnen und bei Bewegung ein "motion" gesetzt wird. Andernfalls muss die Regexp angepasst werden.

define NTFY_Reset_Motion notify (BM_.*:motion*) {BM_MotionHandling("$NAME", "motion")}