FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: flonatural am 15 Oktober 2015, 19:48:50

Titel: Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: flonatural am 15 Oktober 2015, 19:48:50
Hallo liebe Leute,

das ist mein erster Beitrag und bevor einer meckert ja ich habe die SUFU benutzt  ;D 8) .

Mein Problem besteht darin, dass ich keinen notify zu Stande bekomme der meinen Bewegungsmelder so zu sagen ein "no motion" Befehl hinzufügt. Ich brauche diesen Befehl da ich FHEM und die SIEMENS LOGO! gekoppelt habe und im Prinzip nun "nur" einen Impuls haben möchte wenn einer im Raum ist. Leider sagt der Bewegungsmelder ja nur motion und resettet sich nicht, so das ich ein "no motion" bekomme. Kann man dies mit einem Befehl irgendwie hinbekommen, dass der Bewegungsmelder sich z.B. nach 1s resettet und keinen motion Befehl mehr sendet? bin noch ziemlich neu bei FHEM und momentan was so etwas angeht komplett verwirrt  :D .
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: marvin78 am 15 Oktober 2015, 20:30:31
Im Wiki gibt es dazu einen guten Codeschnipsel

http://www.fhemwiki.de/wiki/Bewegungsmelder:_Status_zur%C3%BCcksetzen (http://www.fhemwiki.de/wiki/Bewegungsmelder:_Status_zur%C3%BCcksetzen)
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: isy am 15 Oktober 2015, 23:28:10
Hilft dir der Notify Code-Schnipsel?

define Bewegung_Garage notify au_Bew_Garage:motion { \
    if ( ReadingsVal( "au_Bew_Garage", "brightness", "") <= 65 ) {\
        fhem( "set au_Lampe_Garage on-for-timer 250" );;\
    }\
}


Den Abschnitt mit der  Helligkeit kann ja auch raus.
Das funktioniert ohne den Status zurückzusetzen.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: Deudi am 16 Oktober 2015, 11:34:06
Das geht auch ganz einfach mit einem watchdog. Hatte ich irgendwo mal gepostet. Sollte sich finden lassen.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: franky08 am 16 Oktober 2015, 11:47:28
Oder als regexp im notify : IR_Sensor:motion:.on.*

VG
Frank
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: flonatural am 16 Oktober 2015, 19:50:24
Erstmal danke für die schnellen Antworten.
Hab mir jetzt nach ein paar Stunden einlesen in die Materie eine Datei erstellt die wenn der Sensor "scanning" als status hat den aus Befehl sendet leider funktioniert das zurücksenden noch nicht so wie ich gerne möchte der Sensor soll nach 1Sekunde den reset erhalten leider funktioniert mein Code fürs resetten nicht da mir FHEM beim Speichern immer sagt das eine Klammer fehlt ich aber den Wald vor lauter Bäumen nicht sehe. Hier mein bisheriger Code:

sub HM_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:00:001{HM_MotionHandling(\"$device\", \"scanning\")}";
}
}
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: marvin78 am 16 Oktober 2015, 19:56:29
Bitte Code-Tags verwenden!! Und Satzzeichen. Mir fällt es sehr schwer, deinen Text zu lesen.

Warum bist du denn nicht nach Wiki vorgegangen? Da fehlt einiges.

Eventuell ist das für deine Anendung aber auch deutlich zu viel. Eventfilter reicht vermutlich völlig.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: flonatural am 16 Oktober 2015, 20:07:29
Sry für die fehlenden Satzzeichen schreibe momentan über mein Handy ;) . Hab das mit dem Wiki versucht und an meine Beschriftung angepasst, leider schaltet das ganze dann nicht so wie ich es gerne hätte. Ich werde es aber nochmal testen und das Ergebniss mitteilen.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: franky08 am 16 Oktober 2015, 20:12:23
Auf den ersten Blick fehlt da eine } in der letzten Zeile.
sub HM_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:00:001{HM_MotionHandling(\"$device\", \"scanning\")}";
}
}}


VG
Frank
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: flonatural am 16 Oktober 2015, 21:03:48
Danke franky!
Das hat schon mal die Fehlermeldung behoben. Leider funktioniert der Code trotzdem nicht :( . Normalerweise müsste es doch einen simplen Reset auf scanning nach 1Sekunde geben wenn ich den Code so betrachte oder nicht? Vielleicht kann einer aber auch kurz einen aus dem Ärmel zaubern :D . Das Ziel ist es ja nur einen allgemeinen Befehl zu erstellen, der alle Sensoren die mit HM_ anfangen und "motion" schreiben nach einer Sekunde "still" zu legen sprich Sie sollen lediglich einen Impuls ausgeben und wieder scannen.   
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: Otto123 am 16 Oktober 2015, 22:08:37
Hallo,

obwohl der Bewegungsmelder immer auf motion steht löst er doch jedesmal einen event aus. Ich habe ein ganz einfaches Beispiel/notify:PIRWg:motion:.* {
if (Value("Tageslicht") eq "0") {
        fhem ("set LichtKeAussen on-for-timer 240");
   }
}

Das kannst Du doch ähnlich nutzen um einen Impuls an die SPS zu schicken.

BTW: Beim ersten Beitrag davon ausgehen, dass einer meckert ist ja ne schöne Ohrfeige fürs Forum  >:(

Gruß Otto
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: flonatural am 17 Oktober 2015, 00:24:31
Hallo Otto,

zuerstmal Offtopic ;)

das mit dem meckern hab ich mir angewöhnt da in anderen Foren teilweise ziemlich rau einem mitgeteilt wird das man doch gefälligst die SUFU nutzen soll und da ich nicht weiss wie hier auf solche Fragen reagiert wird lieber einmal so starten :D

Aber jetzt wieder zur Topic
Was für ein event löst der Bewegungsmelder den jedesmal aus? Ich kann selber immer nur sehen, dass er auf motion steht. Oder sollte man indem Fall lieber einen Umweg gehen, indem man das Event an einen sagen wir mal virtuellen Schalter sendet, der dann für 1s an geht und dann abschaltet? Aber dann stellt sich mir wieder die Frage wie ich das anstellen soll. Bin noch ziemlich neu in dem Gebiet und es gibt ja so einiges was man lernen kann.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: marvin78 am 17 Oktober 2015, 07:47:58
@franky08: Da fehlt trotzdem einiges, deshalb habe ich die einfache Klammerlösung nicht gepostet (siehe Wiki zum dem Thema).

@flonatural: Das Event, das ausgelöst wird, is motion (für state) oder motion:.on.*, wie franky08 schreibt (das steht nun schon in einigen Beiträgen. Bitte lese genauer). Je nachdem, was dir besser gefällt oder womit du besser arbeiten kannst.

Das siehst du auch, wenn du dir das mal im Event-Monitor anschaust (dahin sollte bei sowas eigentlich dein erster Weg gehen). Wenn man mal ehrlich ist, wäre es auch ziemlich unsinnig, wenn der Bewegungsmelder noch ein anderes Event senden würde. Auf "scanning" oder etwas anderes, stellt man ihn nur für eine möglicherweise aussagekräftigere Frontendansicht. Das ist für einen Trigger und die Steuerung von anderen Devices aber nicht nötig. Auch wenn der state immer motion ist, kommt trotzdem bei jeder Bewegung (je nach dem wie die Register eingestellt sind) ein neues Event.

Vielleicht liegt aber auch genau da dein Problem: Wenn du jedes Event registrieren möchtest, müssen die Register minInterval und/oder captInInterval beachtet werden. Mehr dazu findest du im Wiki und hier im Forum.

Das mit dem Hinweis auf die Suchfunktion ist im Übrigen ein guter. Wenn der von erfahrenen Benutzern kommt, dann kannst du davon ausgehen, dass du mit Suchen schneller an dein Ziel kommst, als mit einem Ratespiel. Oft werden die entsprechenden Stichworte dazu geworfen. Meist passt das dann. Man will ja schließlich auch was lernen. Und das wird nichts mit vorgefertigten Lösungen.
Titel: Antw:Bewegungsmelder soll nicht permanent nur motion schicken
Beitrag von: Invers am 17 Oktober 2015, 10:05:26
Du kannst auch ganz einfach das Beispiel aus der Commandref für DOIF nehmen.
Das verwende ich wie folgt und bin sehr zufrieden damit:

([BM_Kueche:state:sec] < 15 and [LED_Kueche] eq "off" and [BM_Kueche:brightness:d] <50) (set LED_Kueche on-for-timer 120)