Bewegungsmelder soll nicht permanent nur motion schicken

Begonnen von flonatural, 15 Oktober 2015, 19:48:50

Vorheriges Thema - Nächstes Thema

flonatural

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 .


isy

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.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Deudi

Das geht auch ganz einfach mit einem watchdog. Hatte ich irgendwo mal gepostet. Sollte sich finden lassen.
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

franky08

Oder als regexp im notify : IR_Sensor:motion:.on.*

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

flonatural

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\")}";
}
}

marvin78

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.

flonatural

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.

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

flonatural

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.   

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

flonatural

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.

marvin78

@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.

Invers

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)

Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2