Hauptmenü

Z-Wave Bewegungsmelder

Begonnen von FHEM-User22, 28 Februar 2016, 11:47:57

Vorheriges Thema - Nächstes Thema

GeZi3560

Zitat von: dferch am 09 April 2016, 09:17:55

Wenn Du jetzt bei Bewegungserkennung eine Lampe schalten möchtest und die soll anbleiben, bis für eine Zeit x keine Bewegung mehr erkannt wurde, musst Du depmod verwenden. Ich kann Dir ggf. mal ein Beispiel von mir posten - falls Du das noch brauchst.

Viele Grüße,
David

Hi David,

an dem Beispiel hätte ich auch Interesse.

Gruss Gerd
Raspberry Pi 4 4GB, MariaDB,2 Cul V3 868 ,1 Cul V3, 433, Zwave-USB, Conbee2, DeConz, MAX WT und Ventile,HM, Somfy, Fibaro, Shellys, Tradfri, Lidl Zigbee

DeeSPe

#16
Also ich habe auch mehrere Wochen ausgiebigen Testens gebraucht um auf ein für mich zufriedenstellendes Ergebnis zu kommen.
Letzten Endes habe ich dann für jeden Bewegungsmelder eine eigene Funktion in das Modul 99_myUtils.pm geschrieben und dann nur die Notifies diese Funktionen aufrufen lassen.
Ich schalte die Lichter über Lichtszenen (ist einfacher im Nachhinein zu verändern) und nutze zusätzlich noch den Tageslichtwert aus dem Twilight Modul. Somit kann ich zu verschiedenen Dämmerungsstufen verschiedene Lichtszenen starten. Sobald alle Bewohner schlafen gegangen sind und ein Sensor erkennt Bewegung wird die Nachtbeleuchtung eingeschaltet.
Das sieht dann etwa so aus:

Daemmerung = Tageslichtwert aus Twilight Modul
wz_Lichter = alle entsprechenden Lichter als structure
wz_LS = Lichtszene aller entsprechenden Lichter mit Modul LightScene

In die 99_myUtils.pm folgende Funktion:
sub wzBewegungLicht($)
{
        my ($event) = @_;
my $licht = ReadingsVal("Daemmerung","light",7);
my $lichter = Value("wz_Lichter");

# Wenn Bewegung erkannt (Sensor offen)
if ($event eq "open")
{
# Wenn das at zum Ausschalten der Raumlichter definiert wurde, wird es hier gelöscht
                # damit das Licht an bleibt sobald wieder Bewegung erkannt wurde
if (defined $defs{wz_Bewegungsmelder_Licht_aus})
{
fhem ("delete wz_Bewegungsmelder_Licht_aus");
}
# Wenn es anfängt zu dämmern und die Raumlichter ausgeschaltet sind wird die entsprechende LightScene gesetzt
# (falls vorher schon Licht eingeschaltet war, muss es ja nicht erneut/anders eingeschaltet werden)
if ($licht < 6 && $lichter eq "off" )
{
                        # Nachtlicht wenn alle Bewohner schlafen
if (ReadingsVal("rgr_Residents","state","home") eq "gotosleep")
{
fhem ("set wz_LS scene Nacht");
}
                        # Beginn der Dämmerung
elsif ($licht < 6 && $licht > 3)
{
fhem ("set wz_LS scene viel");
}
                        # mittlere Dämmerung
elsif ($licht > 2 && $licht < 5)
{
fhem ("set wz_LS scene mittel");
}
                        # es ist nun richtig dunkel
elsif ($licht < 3)
{
fhem ("set wz_LS scene wenig");
}
}
}
# Wenn keine Bewegung mehr erkannt (Sensor geschlossen)
elsif ($event eq "closed")
{
# Wenn noch Lichter eingeschaltet sind (könnten ja auch manuell ausgeschaltet worden sein)
if ($lichter ne "off")
{
# Setzen des at um die Lichter über eine Lichtszene in 15 min auszuschalten,
# statt dessen könnte auch das structure ausgeschaltet werden
fhem ("define wz_Bewegungsmelder_Licht_aus at +00:15:00 set wz_LS scene off");
}
}
}


Definieren des Notify:
define wz_Sensor_Bewegung notify wz_Sensor:(open.*|closed.*) { wzBewegungLicht($EVENT) }

Ist doch recht komplex geworden, ich hoffe ihr versteht es und könnt es für euch benutzen. Wie gesagt, diese Funktion ist durch viele Wochen probieren entstanden.

Gruß
Dan

P.S. Bin kein Perl Coder und habe das nur so gut es ging für mich umgesetzt. Bitte schlagt mich nicht gleich wenn die Funktion nicht perfekter Code sein sollte.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe