Gelöst Sunset if-Bedingung GPIO Bewegungsmelder Aussenleuchte schalten

Begonnen von werner-fhem, 13 Februar 2015, 07:13:21

Vorheriges Thema - Nächstes Thema

werner-fhem

Ich möchte eine Aussenleuchte einschalten in Abhängigkeit vom Sonnenuntergang und zusätzlich bei einer Bewegungserkennung durch
einen Bewegungsmelder. Die Aussenleuchte und der Bewegungsmelder schalte ich am RPI durch die GPIO's.

Der folgende Code funktioniert nur hier fehlt die IF Abfrage des Bewegungsmelder.

define at_SonnenUnt11 at *{sunset(900)} { fhem ("set GPIO18 on")}

In dem folgenden Code habe ich versucht die IF Abfrage einzubauen nur hier habe ich meine Probleme.

define at_SonnenUnt11 at *{sunset(900)} { fhem ("set GPIO18 on") if (ReadingsVal("GPIOSchalter1", "state", "off") eq "off")}

Der GPIOSchalter1 ist der Bewegungsmelder. Dieser sendet ein state "off" bei Bewegung!

Für Eure Hilfe wäre ich dankbar.


Zrrronggg!

#1
Hm. Okay...

ZitatIch möchte eine Aussenleuchte einschalten in Abhängigkeit vom Sonnenuntergang und zusätzlich bei einer Bewegungserkennung durch
einen Bewegungsmelder.

Meint wahrscheinlich mathematisch und, also wenn beides zugleich wahr ist?


define at_SonnenUnt11 at *{sunset(900)} { fhem ("set GPIO18 on") if (ReadingsVal("GPIOSchalter1", "state", "off") eq "off")}

Das bewirkt (abgesehen, dass da meiner Meinung nach Klammerfehler drin sind) von der Logik her folgendes:
Wenn der Zeitpunkt des Sonneuntergangs eintritt , wird(GENAU 1x) geprüft, ob genau in dem Moment Bewegung ist. Wenn ja: Licht an.

Das tritt ...  äh... sicher eher selten ein.
Bei IF oder if muss man sehr sorgfältig überlegen, was die hingeschriebene Bedingungen tatsächlich von der Logik bewirken.

Du müsstest besser prüfen, ob wenn der Bewegungsmelder Bewegung meldet, es nach Sonnuntergang ist.

Ich persönlich würde das mit isday machen, isday hat aber keinen offset.

(genau genommen mache ich das so, das ich die Helligkeitswerte die die meisten IR Melder entweder mitsenden (HM) oder als Schaltbedingung verwenden können (FS20) verwende, ich gehe davon aus, dass dein Bewegungsmelder das nicht kann?)

Ich bin mir nicht sicher, wie man in einer if-bedingung prüfen kann, ob es nach oder vor {sunset(900)} ist.

Bis hier jemand kommt, der das besser weiss als ich, kannst du es so machen:

define Nacht dummy
define at_SonnenUnt11 at *{sunset(900)}  set Nacht dunkel
# morgens mit Sunset Dummy Nacht auf "hell" oder so setzen
define Bewegung_Licht notify GPIOSchalter1:off { if (Value("Nacht") eq "dunkel") { fhem("set GPIO18 on")}}


oder mit isday (das aber genau sunset und sunrise ohne offset verwendet)

... { if (!isday()) { fhem("set...
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

werner-fhem

Vielen Dank Zrrronggg!
Der Code funktioniert (isday habe ich noch nicht probiert).
Nur jetzt schaltet der GPIO nicht mehr aus. Wie ich gelesen habe funktioniert on-for-timer an der GPIO nicht.
on-for-timer funktioniert nur bei spez. Geräten.
Gibt es eine Alternative von on-for-timer. Ich möchte das Licht nach der Bewegungserkennung wieder nach x sec ausschalten.

Vielen Dank

Zrrronggg!


define Bewegung_Licht notify GPIOSchalter1:off { if (Value("Nacht") eq "dunkel") { fhem("set GPIO18 on ;; define Licht_aus at +00:00:30 set GPIO18 off")}}

30 Sekunden
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

werner-fhem

Vielen Dank für die Unterstützung

Das Problem ist gelöst:

Hier noch als Zusammenfassung den funktionierenden Code:

define Nacht dummy
define at_Sonnenuntergang at *{sunset(0)}  set Nacht dunkel
define at_Sonnenaufgang at *{sunrise(0)}  set Nacht hell

define Bewegung_Licht notify GPIOSchalter1:off { if (Value("Nacht") eq "dunkel") { fhem("set GPIO18 on ;; define Licht_aus at +00:00:05 set GPIO18 off")}}


Erläuterung: mit sunset (Sonnenuntergang) wird Nacht auf dunkel gesetzt.
                     mit sunrise (Sonnenuntergang) wird Nacht auf hell gesetzt.
Der Bewegungsmelder (GPIOSchalter1) schaltet das Licht (GPIO18) nur Nachts (dunkel) für 00:00:05 sec an.

Als Alternative geht auch isday nur hier kann nur genau bei Sonnenaufgang und Sonnenuntergang geschaltet werden ohne Differenz.

define Bewegung_Licht notify GPIOSchalter1:off { if (!isday()) { fhem("set GPIO18 on ;; define Licht_aus at +00:00:05 set GPIO18 off")}}

Als Bewegungsmelder habe ich hier den "Pyroelectrische Infrarot PIR Bewegung Sensor Detektor Modul" im Einsatz.
Die Aussenleuchten werde ich mit ELRO Funksteckdosen schalten.
Dies ist eine sehr Preiswerte Alternative.
Vielen Dank nochmals für die Unterstützung.

Zrrronggg!

Noch 2 Anmerkungen:

define Nacht dummy
define at_Sonnenuntergang at *{sunset(0)}  set Nacht dunkel
define at_Sonnenaufgang at *{sunrise(0)}  set Nacht hell

In diesem konkreten Fall ist Nacht = !isday weil offset 0

Diese Schaltung hat noch den Nachteil, das eine Bewegung die Einschaltzeit nicht verlängert.

Also

23:00:00 sei Auslösung, das Licht geht an
23:00:04 sei erneut Auslösung, Licht ist bereits an (erzeugt die Fehlermeldung "Licht_aus" allready exists, delete it first, das ist aber nur eine optisches Problem, man kann die Fehlermeldung ignorieren.)

Das Licht geht trotzdem um
23:00:05 aus

Wenn das erwünscht ist, dann ist das so okay.

Wenn erneute Auslösung verlängern soll, muss man z.B.: so formulieren

define Bewegung_Licht notify GPIOSchalter1:off { if (Value("Nacht") eq "dunkel") { fhem("delete Licht_aus ;; set GPIO18 on ;; define Licht_aus at +00:00:05 set GPIO18 off")}}


Dies erzeugt bei erster Auslösung dann die Fehlermeldung "Licht_aus does not exist , define it first"
Das ist aber nur eine optisches Problem, man kann die Fehlermeldung ignorieren.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL