Hauptmenü

Licht an bei Bewegung

Begonnen von desmoloch, 02 November 2022, 15:59:08

Vorheriges Thema - Nächstes Thema

desmoloch

Hallo zusammen,

ich habe ein DOIF für mein Schlafzimmerlicht angelegt. Funktionsweise soll so sein: Wenn Bewegung im Schlafzimmer ist UND die Helligkeit unter 10 liegt, schalte das Schlafzimmerlicht an. Ansonsten schalte nach 45 Sekunden das Licht aus.
So sieht mein DOIF aus:
([SZ_Bewegung] eq "motion" and [SZ_Lichtsensor] < 100) (set SZ_Lightstrip_neu on) DOELSE (set SZ_Lightstrip_neu off)

Zusätzlich gesetzt: "do --> resetwait" sowie "wait --> 0:45".

Nun zum Problem: Der DOELSE Part wird immer wieder ausgeführt, obwohl cmd_1 nicht ausgelöst wurde. Das sieht dann so aus:
2022.11.02 15:26:16 3:  YeeLight SZ_Lightstrip_neu - set SZ_Lightstrip_neu off

Es sieht für mich so aus: Obwohl der state schon auf cmd_2 sitzt, wird bei einer Bewegung ein wait_timer gesetzt der dann nochmal cmd_2 auslöst.
Was mache ich da im DOIF falsch? Ich will ja eigentlich den DOELSE Part nur haben wenn es auch vorher mal einen Zustand in cmd_1 gab.

Danke!

Gruß desmo

Otto123

Hi,

meins als Vorschlag:
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

Fehler bei Dir:
Jeder Trigger von SZ_Bewegung UND SZ_Lichtsensor löst das DOIF aus, Bedingung 1 wird geprüft und ist nicht wahr, damit DOELSE

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

desmoloch

Zitat von: Otto123 am 02 November 2022, 16:31:06
Hi,

meins als Vorschlag:
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

Fehler bei Dir:
Jeder Trigger von SZ_Bewegung UND SZ_Lichtsensor löst das DOIF aus, Bedingung 1 wird geprüft und ist nicht wahr, damit DOELSE

Gruß Otto

Danke ich werde das mal ausprobieren :)
Deine Schreibweise mit (set ... on) und set (... off) war mir noch nicht geläufig (oder verdrängt..)

Ich dachte immer: Ein cmd_2 wird nur ausgelöst wenn es vorher auch mal auf cmd_1 stand.

Damian

Zitat von: desmoloch am 02 November 2022, 16:53:03
Danke ich werde das mal ausprobieren :)
Deine Schreibweise mit (set ... on) und set (... off) war mir noch nicht geläufig (oder verdrängt..)

Ich dachte immer: Ein cmd_2 wird nur ausgelöst wenn es vorher auch mal auf cmd_1 stand.

Es gibt hier keinen cmd_2-Fall, sondern nur cmd1_1 und cmd1_2.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

desmoloch

Zitat von: Damian am 02 November 2022, 17:04:49
Es gibt hier keinen cmd_2-Fall, sondern nur cmd1_1 und cmd1_2.

Ok das war vielleicht etwas verwirrend. Bei Ottos Beispiel gibt es den nicht.

Bei mir schon:
([SZ_Bewegung] eq "motion" and [SZ_Lichtsensor] < 100) (set SZ_Lightstrip_neu on) DOELSE (set SZ_Lightstrip_neu off)
Und hier ist ja mein DOELSE cmd_2. Und auch wenn die Bedingung für cmd_1 nicht erfüllt ist, wird nochmal cmd_2 ausgeführt.
Von früher hatte ich noch in Erinnerung das immer ein cmd Wechsel stattfinden muss. Aber vielleicht habe ich das auch immer falsch verstanden.

Damian

Zitat von: desmoloch am 02 November 2022, 17:31:57
Ok das war vielleicht etwas verwirrend. Bei Ottos Beispiel gibt es den nicht.

Bei mir schon:
([SZ_Bewegung] eq "motion" and [SZ_Lichtsensor] < 100) (set SZ_Lightstrip_neu on) DOELSE (set SZ_Lightstrip_neu off)
Und hier ist ja mein DOELSE cmd_2. Und auch wenn die Bedingung für cmd_1 nicht erfüllt ist, wird nochmal cmd_2 ausgeführt.
Von früher hatte ich noch in Erinnerung das immer ein cmd Wechsel stattfinden muss. Aber vielleicht habe ich das auch immer falsch verstanden.
Das ist richtig, wenn man das do-Attribut nicht benutzt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

desmoloch

Zitat von: Damian am 02 November 2022, 17:50:16
Das ist richtig, wenn man das do-Attribut nicht benutzt.

Danke dann hatte ich das doch richtig in Erinnerung :)
Ich habe mal das wait entfernt und trotzdem bleibt das verhalten gleich: cmd_2 wird nochmal ausgeführt! Es wird ein off gesendet:
2022.11.05 09:29:34 3:  SZ_Lightstrip_neu success sending 272: {"id":272,"params":["off"],"method":"set_power"}

AHH Fehler gefunden: Ich hatte noch ein do resetwait sitzen. Ist aber schon fies das er damit das Commando nochmal ausführt ;)

Also bleibt mir nur das Beispiel von Otto ohne cmd_2 richtig?