Timer für Bewegungsmelder

Begonnen von gestein, 27 März 2020, 17:14:32

Vorheriges Thema - Nächstes Thema

gestein

Hallo,

ich habe nun endlich mal einige (mehr als 10) Bewegungsmelder und die notwendigen Funkschalter montiert.

Gibt es eine einfache Möglichkeit mit den Bewegungsmeldern gesteuert das Licht einzuschalten und nach einer eingestellten Zeitdauer wieder auszuschalten?
Wenn die Bewegungsmelder innerhalb der Zeitdauer wieder ansprechen, dann soll die Zeitdauer bis zum Ausschalten von neuem beginnen.

Ich weiß, ich kann zig notify und "on-for-timer" machen, aber gibt es da ein "schönes" Modul, dass das einfach, effektiv und übersichtlich löst?
Vielleicht sogar mit Countdown?

Danke im Voraus
lg, Gerhard

Byte09

#1
Zitat von: gestein am 27 März 2020, 17:14:32
Hallo,

ich habe nun endlich mal einige (mehr als 10) Bewegungsmelder und die notwendigen Funkschalter montiert.

Zitat von: gestein am 27 März 2020, 17:14:32
Hallo,

ich habe nun endlich mal einige (mehr als 10) Bewegungsmelder und die notwendigen Funkschalter montiert.

Gibt es eine einfache Möglichkeit mit den Bewegungsmeldern gesteuert das Licht einzuschalten und nach einer eingestellten Zeitdauer wieder auszuschalten?
Wenn die Bewegungsmelder innerhalb der Zeitdauer wieder ansprechen, dann soll die Zeitdauer bis zum Ausschalten von neuem beginnen.

Ich weiß, ich kann zig notify und "on-for-timer" machen, aber gibt es da ein "schönes" Modul, dass das einfach, effektiv und übersichtlich löst?
Vielleicht sogar mit Countdown?

Danke im Voraus
lg, Gerhard

ja, gibt es - sogar vorkonfiguriert.

MSwitch - device anlegen , auf set wizard gehen , dort import PRECONF wählen und TIMER importieren.

der Rest sollte selbserklärend sein , wenn nicht einfach melden .


das ganze hat natürlich seinen Preis ( countdown ) - systemlast
und wenn fhem ausfällt bleibt das licht an , wobei das auch anders zu konfigurieren wäre.

gruss Byte09

xenos1984

Wenn die Bewegungsmelder und Lichtschalter "sinnvoll" / logisch benannt sind, tut es auch ein einziges Notify, dass auf einen beliebigen Melder triggert und die zugehörige Lampe schaltet.

Otto123

... oder ein DOIF in der Art:
defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and (!isday("REAL")?1:0 or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180
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

KernSani

Oder das homezone-Modul...


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

gestein

Hallo Leute,

vielen Dank für die vielen Anregungen.
Ich habe das homezone-und das MSwitch-Modul installiert.
Für beide wäre das meiner erster wirklicher Anwendungsfall.
Schaue mir aber alle Lösungsvorschläge gerne genauer an.

Danke!
lg, Gerhard

flummy1978

Hallo Gerhard,

du hast ja nun schon eingie Verschläge bekommen. Da aber diese Module meist mehr erschlagen,als man braucht kann man (wenn man möchte) manche Sachen auch selbst schaffen.... :) 

Ich hab das für meinen Fall so gelöst, dass man im Bewegungsmelder das Device bestimmt, welches geschalltet wird, bei welcher Helligkeit, die Stufe (bei Dimmern zb) und und. Die Bewegungsmelder werden zu bestimmten Zeiten deaktiviert werden (wenn es draußen hell genug ist), dann werden sie auch deaktiviert, wenn man vorher den Lichtschalter betätigt (Bad, Küche, wo man erst am Lichtschalter vorbei läuft und danach erst in den Bewegungsmelder laufen würde). Wenn Bewegungsmelder aktiviert wurden und diese mehrmals hintereinander "getriggert" wurden, bleibt das Licht länger an, bevor es automatisch abgeschaltet wird und und und .....

Wenn Du es also mit mSwitch oder anderen Modulen hinbekommst, ist es wunderbar. Wenn nicht, kannst Du Dich gern nochmal melden dann poste ich mal meine Umsetzung in myUtils, die sicherlich nicht so professionell ist wie ein Modul, dafüber aber eben auch nur das hat, was sie braucht :)

Viele Grüße
Andreas

Damian

Und wenn du eine Lösung für alle 10 Melder brauchst, kannst dich noch mal melden ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Hallo Damian, hallo Andreas,

natürlich wäre ich an Euren Lösungen auch sehr interessiert ;-)

Bin für jede Anregung dankbar.
Es ist auf alle Fälle sehr lehrreich zu sehen, wie man ein Problem auf die unterschiedlichsten Arten lösen kann.

Liebe Grüße
Gerhard

Damian

Zitat von: gestein am 29 März 2020, 11:42:30
Hallo Damian, hallo Andreas,

natürlich wäre ich an Euren Lösungen auch sehr interessiert ;-)

Bin für jede Anregung dankbar.
Es ist auf alle Fälle sehr lehrreich zu sehen, wie man ein Problem auf die unterschiedlichsten Arten lösen kann.

Liebe Grüße
Gerhard

Wenn man es mit einer Definition erschlagen will, dann muss es eine eindeutigen Verknüpfung zwischen Bewegungsmelder und Lampe geben. Das kann man am einfachsten erreichen, indem man entsprechende Namen der Geräte wählt. Z. B.

BW_Wohnzimmer -> Lampe_Wohnzimmer
BW_Kueche -> Lampe_Kueche
...

so kann man schnell aus dem triggernden Device (hier Melder) die zu schaltende Lampe ermitteln.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flummy1978

Holla,

Zitat von: Damian am 28 März 2020, 22:13:52
Und wenn du eine Lösung für alle 10 Melder brauchst, kannst dich noch mal melden ;)
Das funktioniert ganz gut auch mit meiner Variante ...aber sicherlich etwas anders gemacht :)

@Gerhard: Ich poste hier einfach, mal den Cde. Der ist (mit ein wenig Perl Erfahrung) sicherlich recht leicht zu verstehen, weil vieles logisch erscheint, warum ich das da so ist. Bei Fragen fragen, ich kann alles erklären :)


####################################
# Aktionen durch Bewegungsmelder   #
####################################

sub PIRAction($){
my $dev = $_[0];

my $occupancy =ReadingsVal($dev, "occupancy", "false");

# Anwesenheit Standarddefinition ist absent
my $residentsHome = "absent";
# Anwesenheit mind ein roommate
$residentsHome ="present" if (ReadingsVal("RESIDENT_ALL", "residentsHome", 'null'));

my $act_illu =ReadingsVal($dev, "illuminance", "100"); # Aktuelle Helligkeit
my $PIR=ReadingsVal($dev,'PIR',"inactive"); # Prüfen ob PIR Steuerung aktiv
my $PIR_limit =AttrVal($dev,'PIR_limit',5); # Helligkeitsschwellwert vom Bewegungsmelder
my $PIR_control_dev =AttrVal($dev,'PIR_control_dev',undef); # mit PIR Gesteuertes device
my $PIR_control_cmd_on =AttrVal($dev,'PIR_control_cmd_on',"on"); # Device speziffischer ON Befehl
my $PIR_control_cmd_off =AttrVal($dev,'PIR_control_cmd_off',"off"); # Device speziffischer OFF Befehl
my $PIR_control_read =AttrVal($dev,'PIR_control_read',undef); # Device speziffisches Reading das den An / Aus Status anzeigt
my $onoff =ReadingsVal($PIR_control_dev, $PIR_control_read, "off"); # on / off Zustand vom gesteuerten Device
my $PIR_ontime =AttrVal($dev,'PIR_ontime',15); # on-zeit nachdem keine Bewegung stattfindet
my $occupancy_count=ReadingsNum($dev,"occupancy_count",0); # Bewegungszähler, bei längerer Anwesenheit


# Abbrechen wenn niemand zu Hause und nicht der Türkontakt aktiviert wurde
return undef if ($residentsHome eq "absent") && ($dev ne "TK_EG_FL_tuer_haupt");

# Abbrechen wenn jemand zu Hause und der Türkontakt aktiviert wurde
return undef if ($residentsHome eq "present") && ($dev eq "TK_EG_FL_tuer_haupt");

# Wenn niemand zu Hause und Türkontakt betätigt wurde, Bewegungsmelder der Garderobe simulieren
if ($dev =~ /TK_EG_FL_tuer_haupt/ )
{
$dev="PIR_EG_FL_move_garderobe";
$occupancy ="true";
$residentsHome="present";
}


# Abbrechen wenn PIR inaktiv ist
if ($PIR eq "inactive") {
#Log (1, "### UNDEF PIR inactive ###");
fhem ("cancel $PIR_control_dev quiet") if ($PIR_control_dev);
return undef;
}

# Abbrechen wenn notwendige Attribute nicht gesetzt sind
return undef if (!$PIR_control_dev);
return undef if (!$PIR_control_read);

# Prüfen ob Gerät vorhanden # Bewegungsmelder an / aus # Helligkeitswert unterschritten
if  (defined($defs{$PIR_control_dev}) && ($occupancy eq "true"))
{   
# Log (1, "##### EIN ###### ");

# Bei längerer Anwesenheit soll das Licht länger an bleiben
$occupancy_count++;
CommandSetReading(undef, "$dev occupancy_count $occupancy_count") if ($occupancy_count<6);
if (($onoff eq "off") && ($act_illu < $PIR_limit))
{
# Log (1, "### SCHALTEN ### ");
# Device steuern mit _control_cmd
fhem ("set $PIR_control_dev $PIR_control_cmd_on;");
fhem ("setreading $dev occupancy_count 1");
}
elsif ($onoff eq "on")
# Verzögerung löschen falls vorhanden
{
#Log (1, "### Timer cancel ### ");
fhem ("cancel $PIR_control_dev quiet");
}
}

# Prüfen ob Device on ist
elsif  (defined($defs{$PIR_control_dev}) && ($occupancy eq "false") && ($onoff  eq "on"))
{
# Log (1, "##### AUS ###### ");
# Log (1, "### SCHALTEN ###");
# Verzögerung einsetzen # Device steuern mit _control_cmd

# Log (1, "### Count Log, beim Bewegunsmelder: $PIR_ontime ### VORHER ###");
$PIR_ontime=$PIR_ontime*ReadingsNum($dev,'occupancy_count',0);
# Log (1, "### Count Log, beim Bewegunsmelder: $PIR_ontime ### NACHHER ###");
fhem ("sleep $PIR_ontime $PIR_control_dev; set $PIR_control_dev $PIR_control_cmd_off; setreading $dev occupancy_count 1");
}
}


Der Aufruf erfolgt mit

PIR_.*:occupancy.*|TK_EG_FL_tuer_haupt:contact:.false {PIRAction($NAME)}

Das Deaktivieren der Bewegungsmeder mit dem Taster, wird aus anderen Gründen in einem separaten Notify erledigt. 
TK_EG_FL_tuer_haupt - Ist eine Besonderheit. Das Flurlicht wird auch aktiviert, wenn die Bewegungsmeder deaktiviert sind (sprich niemand zu Hause ist) und die Tür zum Flur geöffnet wird.

Viel Spaß beim stöbern, wie gesagt bei Fragen, Fragen :) Es sind noch ein paar Logeinträge und Kommentare vom Testen drin... Sind ja dann auch hilfreich

Viele Grüße
Andreas