FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 20 September 2015, 09:37:32

Titel: GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 09:37:32
Hallo, eigentlich ganz simpel, aber zwei Punkte bekomme ich einfach nicht hin.

- Ich möchte einen Bewegungsmelder eine Lampe für 5 Minuten einschalten lassen.
- Wenn in der Einschaltzeit ein erneuter Motion vom BW kommt, soll die Einschaltzeit verlängert werden.
- Wenn die Lampe vorher schon an war, soll sie nicht vom BW geschaltet werden, da er sie ja sonst nach der angelaufenen Zeit auschaltet
- Wenn wärend der Einschaltdauer der Lampe durch den BW MANUELL der Unterputz-Schalter betätigt wird, soll die BW-Logik abgebrochen werden.

Das sieht im Moment so aus

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [Container_BEWEGUNGSMELDER:brightness] < 120 and [Anwesenheit:state] eq "present" and [Container_TASTER_linksDummy:state] eq "off") (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,300
attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized

###check ob Licht manuell angeschaltet wurde

define Container_TASTER_linksDummy dummy
attr Container_TASTER_linksDummy room Anwesenheit
attr Container_TASTER_linksDummy group Zeitschalter

define Container_TASTER_linksNotify notify Container_TASTER_links sleep 2;; { fhem("set Container_TASTER_linksDummy ".ReadingsVal("Container_LICHT_Aussen_Strahler", "state", "")) };; { fhem("set Container_BEWEGUNGSMELDER_Zeitschalter initialize") }
attr Container_TASTER_linksNotify room Anwesenheit
attr Container_TASTER_linksNotify group Zeitschalter


Ich habe 3 Probleme:

- Irgendwie erscheint es mir nicht galant ;)
- Wenn ich über TabletUI oder sonstwie die Lampe direkt schalte (ohne den Unterputz-Schalter zu nutzen) funktioniert die Logik nicht mehr. Das ist so wie es im Moment ist auch klar. Dieser Part ist nur auf den Schalter gelegt, weil mir nichts einfällt wie ich es anders überhaupt lösen könnte.
- Ich schaffe es einfach nicht über  "set Container_BEWEGUNGSMELDER_Zeitschalter initialize" den Timer für das Ausschalten vom DOIF zu löschen. Sprich, egal wie, er schaltet mir wenn der Timer läuft bei Ende das Licht aus.

Über Logikunterstützung wäre ich dankbar

Grüße

H.

EDIT: Lösung


define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?motion] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and ([?Container_LICHT_Aussen_Strahler:state] eq "off" or [?Container_BEWEGUNGSMELDER_Zeitschalter] eq "cmd_1_1")) (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off) DOELSEIF ([Container_TASTER_links] =~ "press_short")
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,180
attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Brice am 20 September 2015, 10:30:33
Evt. verstehe ich den letzten Teil (soll die BW-Logik abgebrochen werden) nicht. Ich löse ähnliches mit einem einfachen Notify:

define nty_LED notify Bewegungsmelder_Kueche:.* {
my $StatusLED=(ReadingsVal("LED","state","on"));
if ($StatusLED eq "off")
{
  {fhem "set LED on-for-timer 120"}
   }
}


- LED wird nicht durch Bewegungsmelder eingeschaltet, wenn schon an
- LED wird durch Bewegungsmelder für 120 sec eingeschaltet, wenn Zustand off ist
- wenn innerhalb der 120 sec der Schalter per Fernbedienung oder MobilePhone betätigt wird, wird der Zustand "on-for-timer" in "on" oder "off" geändert

Wozu soll die Bewegungsmelder-Logik nochmals abgebrochen werden?
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 10:46:26
Hallo Brice, die Bewegungsmelder-Logik (der AUS Timer) soll abgebrochen werden damit das DOIF nicht nach dem Ablauf des Timers die Lampe, obwohl du sie manuell eingeschaltet hast, trotzdem abschaltet.

Das entspräche deinem:

Zitat von: Brice am 20 September 2015, 10:30:33
- wenn innerhalb der 120 sec der Schalter per Fernbedienung oder MobilePhone betätigt wird, wird der Zustand "on-for-timer" in "on" oder "off" geändert

Schaltet denn dein notify die Lampe erneut an, resp. verlängert die Anschaltzeit wenn in der AN-Phase erneut ein motion vom BW kommt? State der Lampe ist dann ja "on" und er würde nicht erneut auslösen.

Problem bei dem Homematic FunkBW ist, dass er nur max alle 4 Minuten triggert. Wenn du also 5 Minuten das Licht an hast, nach 4 Minuten erneut am BW eine Motion auslöst, das Licht nach einer weiteren Minute ausgeht ... dann stehst du 3 Minuten im Dunkeln bevor er wieder triggert. Daher kommt das ganze Übel ;) .... wenn das Ding ständig triggern würde wären die paar Sekunden im Dunkeln kein Problem.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 10:52:12
ps: vielleicht wäre der beste workaround die Einschaltzeit auf 3:55 zu legen ? Mmh, würde alles extrem vereinfachen wenn ich so drüber nachdenke und ich könnte dein notify nutzen. Dann gäbe es nur die paar Sekunden im Dunkeln.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Brice am 20 September 2015, 10:58:13
ok, mit Homematik kenne ich mich aus. Ich nutze FS20 PIRI, da sind die Sendeabstände (Zeit, die mindestens seit der letzten Auslösung vergangen sein muss) einstellbar (8, 24, 56, 120 sec). Im Bad wird per PIRI das Radio für 120 sec eingeschaltet, Sendeabstand ist auf 56 sec gesetzt. Der Timer verlängert sich jedesmal, also ist das Radio an, solange Bewegungen im Bad festgestellt werden.

edit:
Bewegungsmelder_Bad:on.* {if ((ReadingsVal("Radio_Bad","state","off") && ($hour >= 5 && $hour <= 22))){ fhem "set Radio_Bad on-for-timer 120" }}
Der Code scheint mir nicht logisch zu sein, aber es läuft....
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: pnewman am 20 September 2015, 11:03:29
Hallo,

ich habe einen Homematicbewegungsmelder für aussen direkt an dem Badezimmerdimmer HM angelernt.
Der Bewegungsmelder schaltet somit von sich aus das Licht für 5min ein und bei bewegungen innerhalb der Zeit bleibt es weiterhin an. Nach 4,5min flackert das Licht(mittlerweile wurde diese Funktion von mir deaktiviert) und geht danach aus wenn sich niemand bewegt.

Wenn ich zwischendurch das Licht selbst einschalte muss ich es auch wieder ausschalten, da es sonst an bleibt.
Wenn ich nach aktivierung des Bewegungsmelders das Licht manuell anschalte (Der bewegungsmelder schaltet das Licht nur auf 6%) bleibt das Licht so lange an bis ich es wieder ausschalte.

Dies ist dann Systemunabhängig.

Gruß
Ralf
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 11:14:22
@Brice:

bedeutet das notify ignoriert die Abfrage ob Radio state = "off" wenn der Bewegungsmelder erneut triggert?  Interessant.

OT, welchen PIRI hast du verbaut? Brauche auch noch ein 24V Bewegungsmelder im Bad und such mich schon blöd.

EDIT: Sorry FS20 beim PIRI überlesen

@pnewman:

Im Prinzip hätte ich das gerne so. Würde es aber gerne in fhem umsetzen um noch andere Abhängigkeiten später reinzubringen.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Gigafix am 20 September 2015, 12:40:32
Also die 4 Min bis zur erneuten Erkennung sind vermutlich auch änderbar auf minmal 15 sec - abhängig von dem Modell. Ist natürlich im Einzelfall auch recht lange. Weitere Infos siehe Infos dazu im WIKI. Hier ein kleiner Auszug:

Konfiguration über Register
Anzeige aller dekodierten Register
get <name> regList zeigt alle möglichen 'dekodierten' Register an. Hier findet man sowohl den Wertebereich als auch eine (sehr) kleine Beschreibung. Ausgabe:

   1: minInterval      |     literal        |          | minimum interval in sec options:240,60,120,30,15

minInterval
Minimaler Interval in Sekunden ab wann die nächste Bewegung registriert werden kann. Der Standard ist 240. Also nach einer Bewegungs-Meldung werden weitere Bewegungen für 4 Minuten ignoriert bis die nächste Meldung erfolgt.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 13:13:59
ich bastel gerade an allen Varianten.

muß mal probieren, was die ganzen Register für Auswirkungen haben. Was mich wundert: wenn ich R-captInInterval auf "on" setze bekomme ich im EventMonitor immer ALLE Readings angezeigt. Entsprechend der in R-minInterval eingestellten Zeit.

Egal welches der Register ich umsetzte ist das so. Wenn ich alle Register auf die Defaults stelle bekomme ich nur

2015-09-20 13:03:01 CUL_HM Container_BEWEGUNGSMELDER battery: ok
2015-09-20 13:03:01 CUL_HM Container_BEWEGUNGSMELDER brightness: 205
2015-09-20 13:03:01 CUL_HM Container_BEWEGUNGSMELDER cover: closed


im EventMonitor. Mit EINEM umgestellten Register (egal welches) sieht es so aus:

2015-09-20 13:07:11 CUL_HM Container_BEWEGUNGSMELDER brightness: 205
2015-09-20 13:07:11 CUL_HM Container_BEWEGUNGSMELDER motion: on (to HM_LAN_FUNK)
2015-09-20 13:07:11 CUL_HM Container_BEWEGUNGSMELDER motionCount: 51_next:-
2015-09-20 13:07:11 CUL_HM Container_BEWEGUNGSMELDER motion
2015-09-20 13:07:11 CUL_HM Container_BEWEGUNGSMELDER trigger_cnt: 51
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER brightness: 205
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER motion: on (to HM_LAN_FUNK)
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER motionCount: 52_next:116s
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER motion
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER trigDst_29A557: noConfig
2015-09-20 13:08:41 CUL_HM Container_BEWEGUNGSMELDER trigger_cnt: 52


da ich auf trigDst_29A557 trigger (was bei Default Einstellungen nur kommt wenn wirklich motion) funktioniert das jetzt alles nicht mehr.

motion ist immer auf "on", warum auch immer. Also bleibt mir nur trigDst_29A557 als Trigger. ..... und der wird wie gesagt bei Umgestellten Readings jetzt immer angezeigt.

Ist das Teil defekt ?
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 15:42:03
So, Alarm zurück, das Teil braucht scheinbar eine Weile bis es sich eingependelt hat nachdem man etwas an den Registern umgestellt hat. Habe jetzt folgendes Setup:

- minInterval am BW auf 15 Sekunden gesetzt
- diese cfg

define Container_BEWEGUNGSMELDER_Zeitschalter notify Container_BEWEGUNGSMELDER:trigDst_29A557.* { if ( Value("Container_LICHT_Aussen_Strahler") eq "off" &&  Value("Anwesenheit") eq "present" && ReadingsVal( "Container_BEWEGUNGSMELDER", "brightness", "") <= 120 ) { fhem ("set Container_LICHT_Aussen_Strahler on-for-timer 180") } }

funktioniert gut, allerdings mit dem erwarteten Effekt, dass die on-for-timer Zeit bei Motion nicht verlängert wird (weil Container_LICHT_Aussen_Strahler dann "on" ist). Wieso das bei Brice funktioniert weiss ich nicht. Oder umgekehrt warum bei mir nicht.

jetzt kann ich auch wieder das alte DOIF verwenden (ist mir irgendwie angenehmer) da sich an der Funktionalität ja nicht wirklich was geändert hat. Das alte Problem besteht weiterhin, durch das umsetzen der minInterval ist der Schmerz darüber aber nur halb so groß.

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [Container_BEWEGUNGSMELDER:brightness] < 120 and [Anwesenheit:state] eq "present" and [Container_LICHT_Aussen_Strahler:state] ne "on") (set Container_LICHT_Aussen_Strahler on-for-timer 235)

falls noch jemand eine Idee hat, gerne her damit. Ansonsten schon mal vielen Dank an alle.

H.



Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Damian am 20 September 2015, 15:57:39
Zitat von: holle75 am 20 September 2015, 15:42:03

falls noch jemand eine Idee hat, gerne her damit. Ansonsten schon mal vielen Dank an alle.

H.

Zitat aus der Commandref zu DOIF:

ZitatDie Nachbildung eines on-for-timers lässt sich wie folgt realisieren:

define di_on_for_timer ([detector:?motion])
(set light on)
(set light off)
attr di_on_for_timer do resetwait
attr di_on_for_timer wait 0,30

Hiermit wird das Licht bei Bewegung eingeschaltet. Dabei wird, solange es brennt, bei jeder Bewegung die Ausschaltzeit neu auf 30 Sekunden gesetzt, "set light on" wird dabei nicht unnötig wiederholt.

Gruß

Damian
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 16:11:10
Hallo Damian, genaus damit habe ich es am Anfang gemacht und das hat auch (fast) funktioniert. Problem war u.a., dass ein Event (in meinem Fall Anwesenheit was in unregelmäßigen Abständen einen Event liefert) das DOIF resettet hatte -> Licht ging vor Ende des wait_timers aus. Warum weiss ich nicht.

Das sah dann so aus:

#define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [Container_BEWEGUNGSMELDER:brightness] < 120 and [Anwesenheit:state] eq "present" and [Container_TASTER_linksDummy:state] eq "off") (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
#attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
#attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,300
#attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
#attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
#attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized

###check ob Licht manuell angeschaltet wurde

#define Container_TASTER_linksDummy dummy
#attr Container_TASTER_linksDummy room Anwesenheit
#attr Container_TASTER_linksDummy group Zeitschalter

#define Container_TASTER_linksNotify notify Container_TASTER_links sleep 2;; { fhem("set Container_TASTER_linksDummy ".ReadingsVal("Container_LICHT_Aussen_Strahler", "state", "")) };; { fhem("set Container_BEWEGUNGSMELDER_Zeitschalter initialize") }
#attr Container_TASTER_linksNotify room Anwesenheit
#attr Container_TASTER_linksNotify group Zeitschalter


Zweites Problem war das Einbinden der "Unterputz Schalter wird manuell betätigt"-Logik.

Und noch ein paar Probleme, weiss jetzt nicht mehr in welcher Version des Rumprobierens was genau. Ist nicht so einfach vor Bewegugsmeldern rumzuhüpfen und verschiedene Codes bei so vielen Abhängigkeiten durchzuprobieren.

H.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Damian am 20 September 2015, 17:24:39
Zitat von: holle75 am 20 September 2015, 16:11:10
Hallo Damian, genaus damit habe ich es am Anfang gemacht und das hat auch (fast) funktioniert. Problem war u.a., dass ein Event (in meinem Fall Anwesenheit was in unregelmäßigen Abständen einen Event liefert) das DOIF resettet hatte -> Licht ging vor Ende des wait_timers aus. Warum weiss ich nicht.

H.

Wenn andere nicht triggern sollen, dann musst du Fragezeichen für reine Abfragen angeben:

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF
([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and [?Container_TASTER_linksDummy:state] eq "off")
   (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)


Gruß

Damian
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 18:08:15
Danke Damian, ich werde probieren. Gibt es noch einen Trick, wie ich die Abfrage von Container_TASTER_linksDummy direkt durch Container_LICHT_Aussen_Strahler ersetzen könnte um den Status vor einer Aktivierung (und damit Ausschaltung) des Zeitschalters abzufragen ohne dann das resetwait zu eliminieren?

Also statt:

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF
([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and [?Container_TASTER_linksDummy:state] eq "off")
   (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,120

so:

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF
([Container_BEWEGUNGSMELDER:?trigDst_29A557] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and [?Container_LICHT_Aussen_Strahler:state] eq "off")
   (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,120

Sorry, es ist wirklich kompliziert in Worte zu fassen was ich möchte. Nochmal Zitat aus dem ersten Post

Zitat von: holle75 am 20 September 2015, 09:37:32
- Ich möchte einen Bewegungsmelder eine Lampe für 5 Minuten einschalten lassen.
- Wenn in der Einschaltzeit ein erneuter Motion vom BW kommt, soll die Einschaltzeit verlängert werden.
- Wenn die Lampe vorher schon an war, soll sie nicht vom BW geschaltet werden, da er sie ja sonst nach der abgelaufenen Zeit ausschaltet
- Wenn wärend der Einschaltdauer der Lampe  MANUELL der Unterputz-Schalter betätigt wird, soll die DOIF-Logik abgebrochen werden (Licht wird nicht nach WAIT abgeschaltet).

Problem:

- Wenn ich über TabletUI oder sonstwie die Lampe direkt schalte (ohne den Unterputz-Schalter zu nutzen) funktioniert die Logik nicht mehr. Das ist so wie es im Moment ist auch klar. Dieser Part ist nur auf den Schalter gelegt, weil mir nichts einfällt wie ich es anders überhaupt lösen könnte.

Grüße

H.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Damian am 20 September 2015, 18:55:17
ja, jetzt wird es etwas tricky:

... and ([?Container_LICHT_Aussen_Strahler:state] eq "off" or [?Container_BEWEGUNGSMELDER_Zeitschalter] eq "cmd_1_1") ...

Gruß

Damian
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 19:24:44
Yeees, das Geht! Dankeschön.

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?motion] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and ([?Container_LICHT_Aussen_Strahler:state] eq "off" or [?Container_BEWEGUNGSMELDER_Zeitschalter] eq "cmd_1_1")) (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,180
attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized


... verlängern der Wait_time plus/trotz Vorhercheck ob die Lampe an ist funktioniert vorzüglich. Wenn du mir jetzt noch einen Tip geben kannst, wie ich bei Betätigen des Schalters das DOIF abbrechen kann um das Ausschalten (wenn noch in der Wait_Time der Schalter betätigt wird) zu verhindern ....? Also ein Reset/Abbruch des DOIF´s egal wo es gerade steckt. Dachte mal mit Initialize würde das gehen, aber wenn ich die commandref richtig verstanden habe, behält das DOIF dann die Timer.

Danke und Gruß

H.
Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Damian am 20 September 2015, 19:48:22
Zitat von: holle75 am 20 September 2015, 19:24:44
Yeees, das Geht! Dankeschön.

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?motion] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and ([?Container_LICHT_Aussen_Strahler:state] eq "off" or [?Container_BEWEGUNGSMELDER_Zeitschalter] eq "cmd_1_1")) (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off)
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,180
attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized


... verlängern der Wait_time plus/trotz Vorhercheck ob die Lampe an ist funktioniert vorzüglich. Wenn du mir jetzt noch einen Tip geben kannst, wie ich bei Betätigen des Schalters das DOIF abbrechen kann um das Ausschalten (wenn noch in der Wait_Time der Schalter betätigt wird) zu verhindern ....? Also ein Reset/Abbruch des DOIF´s egal wo es gerade steckt. Dachte mal mit Initialize würde das gehen, aber wenn ich die commandref richtig verstanden habe, behält das DOIF dann die Timer.

Danke und Gruß

H.

Das ist einfach, du musst einen weiteren Zweig mit DOELSEIF ohne Ausführungsteil einfügen:

... DOELSEIF ([Taster] eq "on")

Aber bedenke, dass solange das Licht an ist, dein DOIF ja außer Gefecht gesetzt ist, bis du das Licht, wie auch immer, wieder ausschaltest.


Gruß

Damian

Titel: Antw:DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: holle75 am 20 September 2015, 20:20:11
Wie eine EINS. Vielen Dank Damian!

define Container_BEWEGUNGSMELDER_Zeitschalter DOIF ([Container_BEWEGUNGSMELDER:?motion] and [?Container_BEWEGUNGSMELDER:brightness] < 120 and [?Anwesenheit:state] eq "present" and ([?Container_LICHT_Aussen_Strahler:state] eq "off" or [?Container_BEWEGUNGSMELDER_Zeitschalter] eq "cmd_1_1")) (set Container_LICHT_Aussen_Strahler on) (set Container_LICHT_Aussen_Strahler off) DOELSEIF ([Container_TASTER_links] =~ "press_short")
attr Container_BEWEGUNGSMELDER_Zeitschalter do resetwait
attr Container_BEWEGUNGSMELDER_Zeitschalter wait 0,180
attr Container_BEWEGUNGSMELDER_Zeitschalter room Anwesenheit
attr Container_BEWEGUNGSMELDER_Zeitschalter group Zeitschalter
attr Container_BEWEGUNGSMELDER_Zeitschalter initialize initialized
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Mumpitz am 05 Januar 2016, 20:54:51
Hallo zusammen

ich hoffe es ist nicht unhöflich wenn ich einen als gelöst markierten Thread nochmals aufmache und nochmals eine Frage dazu stelle:
Ich habe die genau gleichen Anforderungen an den Beweungsmeldet wie holle75. Allerdings habe ich als Taster, mit welchem ich die Lampe einschalten kann, keinen Homematic Taster, sondern einen normalen Homematic Schaltaktor

ich habe bis jetzt definiert:

([Bewegungsmelder_OG:?motion] and [Rollladen_Galerie] eq "ab" and ([?Licht_Esszimmer:state] eq "off" or [?Bewegungsmelder_OG] eq "cmd_1_1")) (set Licht_Esszimmer on)(set Licht_Esszimmer off)

do resetwait
initialize initialized
wait 0,180


ich möchte nun, wenn ich den Lichtschalter in dieser Zeit manuell Drücke, der per DOIF programmierte on for timer von 20 minuten ausgelöst wird...

ist verständlich was ich möchte?
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: CoolTux am 05 Januar 2016, 21:04:43
Aus der Commandref


Zitat
Sollen Verzögerungen innerhalb von Befehlsfolgen stattfinden, so müssen diese Komandos in eigene Klammern gesetzt werden, das Modul arbeitet dann mit Zwischenzuständen.

Beispiel: Bei einer Befehlssequenz, hier: (set lamp1 on, set lamp2 on), soll vor dem Schalten von lamp2 eine Verzögerung von einer Sekunde stattfinden. Die Befehlsfolge muss zunächst mit Hilfe von Klammerblöcke aufgespaltet werden: (set lamp1 on)(set lamp2 on). Nun kann mit dem wait-Attribut nicht nur für den Beginn der Sequenz, sondern für jeden Klammerblock eine Verzögerung, getrennt mit Komma, definieren werden, hier also: wait 0,1. Damit wird lamp1 sofort, lamp2 nach einer Sekunden geschaltet.

Beispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSE (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden

attr <DOIF-modul> wait 1,2:3,0.5

Für Kommandos ohne Verzögerung werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Mumpitz am 05 Januar 2016, 21:10:43
Besten Dank, aber das ist mir alles klar!

Wie gesagt, es funktioniert ja auch mit meinem Wait und dem Timer, wenn das Licht_Esszimmer durch den Bewegungsmelder ausgelöst wird. Ich möchte nun jedoch zusätzlich, dass wenn ich in dieser Zeit auf den Einschalter drücke, die Lampe einschaltet und nicht durch nach meinen definierten 180 Sekunden (siehe mein Wait Attribut) wieder abschaltet. Sondern dann, wenn ich eben diesen Schalter drücke, soll der dortige Befehl (in diesem Fall soll das Licht 20min eingeschaltet bleiben) umgesetzt sein. Das habe ich mit diesem DOIF realisiert:

([?20:00-06:00] and [Licht_Esszimmer:?on]) (set Licht_Esszimmer on) (set Licht_Esszimmer off)

do resetwait
wait 0,120


Weisst Du jetzt was ich meine?
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: CoolTux am 05 Januar 2016, 21:19:41

([?20:00-06:00] and [Licht_Esszimmer:?on]) (set Licht_Esszimmer on) (set Licht_Esszimmer off) DOELSIF ([Licht_Esszimmer:on]) (set Licht_Esszimmer on)
wait 0,120:0


Meinst so in etwa? Gedankenstoß
Ich sehe keine 180 Sekunden und keine 20min. Wo hast Du die?
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Mumpitz am 05 Januar 2016, 21:23:07
Entschuldigung  :)

also, die 180 Sekunden sind beim Einschalten des Bewegungsmelders.

Die 20 minuten beim doif wenn ich manuel auf den Schalter drücke. Habe das Wait Attribut falsch abgeschrieben:
Zitat([?20:00-06:00] and [Licht_Esszimmer:?on]) (set Licht_Esszimmer on) (set Licht_Esszimmer off)

do resetwait
wait 0,120

sollte hier heissen:
wait 0,1200
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: CoolTux am 05 Januar 2016, 21:53:19

([?20:00-06:00] and [Licht_Esszimmer:?on]) (set Licht_Esszimmer on) (set Licht_Esszimmer off) DOELSIF ([Licht_Esszimmer:on]) ()

do resetwait
wait 0,1200:0



versuch mal so, ich gehe davon aus das Dein Lichtschalter Licht_Esszimmer ein Unterputz Aktor ist ist selbst sofort schaltet. Alles was Du brauchst ist eine Zustandsänderung Deines DOIF's
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Mumpitz am 06 Januar 2016, 19:43:14
Dein Vorschlag hat nicht geklappt. Ist nachvollziehbar, weil sobald die Lampe durch den Bewegungsmelder eingeschaltet wird springt er automatisch auf cmd_2, weil da [Lichtschalter:on] die Bedingung zutrifft! dadurch werden die Timer des Bewegungsmelder sofort deletet!

Anderer Lösungsvorschlag?
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: CoolTux am 06 Januar 2016, 20:27:37
Hast Recht. Hätte mir auch auffallen müssen. Ist knifflige, im Moment fällt mir nichts ein.
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Mumpitz am 06 Januar 2016, 20:39:52
Dann hoffe ich doch, dass Damian hier mal vorbei schaut :)


Gesendet von iPad mit Tapatalk
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Volker! am 07 Januar 2016, 19:38:41
Setze das doif des Bewegungsmelders mal testweise auf auf inaktiv wenn das Licht noch an ist. Sollte das Licht dann an bleiben kannst du mit dem doif des Schalters das ganze automatisieren.
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: joshi04 am 09 April 2016, 12:06:41
Hallo Mumpitz,
ist ja schon ein wenig her und außerdem ist der Thread als gelöst markiert. Daher sinkt vermutlich die Wahrscheinlichkeit, das hier noch viele Helfer vorbeikommen, außer sie suchen selbst nach einer Lösung  ;)

Ich denke, ich habe eine ähnliche Anwendung und bin dadurch drauf gestoßen. Derzeit teste ich folgende Logik:

([FL_Bewegungsmelder:"motion"] and ## wird ausgelöst, wenn der Bewegungsmelder das Event "motion" meldet
[?FL_Bewegungsmelder:brightness] <80 and ## UND das reading für die Helligkeit weniger als 70
[?HM_3D9CF2] ne "HM_3D9CF2_Btn_01 Short") ## UND der Status der FB nicht auf dem Taster für an steht
(set HM_43B16D_Dim on)(set HM_43B16D_Dim off, setreading $DEVICE state sensing, setreading $DEVICE motion sensing)
## dann wird zunächst der Aktuator an geschaltet und als zweites der Aktuator wieder aus, sowie die beiden reading des Bewegungsmelder zurückgesetzt
DOELSEIF ([HM_3D9CF2] eq "HM_3D9CF2_Btn_01 Short") ## wird ausgelöst, für die FB das entsprechende Event kommt
(set HM_43B16D_Dim on)(set HM_43B16D_Dim off, setreading HM_3D9CF2 state HM_3D9CF2_Btn_02 Short)
## dann wird zunächst der Aktuator an geschaltet und als zweites der Aktuator wieder aus, sowie die beiden reading des Bewegungsmelder zurückgesetzt
DOELSEIF ([HM_3D9CF2] eq "HM_3D9CF2_Btn_02 Short") ## wird ausgelöst, für die FB das entsprechende Event kommt
(set HM_43B16D_Dim off)
## dann wird der Aktuator ausgeschaltet
## hinzu gehören die beiden Attribute
## wait 0,130:0,1800:0: erster Befehl der ersten Bedingung wird sofort ausgefürt. zweiter Befehl der ersten Bedingung wird um 130 Sekunden verzögert,
##   erster Befehl der zweiten Bedingung wird sofort ausgeführt, zweiter Befehl der zweiten Bedingung wird um 1800 Sekunden verzögert,
##   erster Befehl der dritten Bedingung wird sofort ausgeführt. (letzter Doppelpunkz gehört nicht zum Attribut.)
## resetwait: damit die Timer zurückgesetzt werden, wenn die Bedingung zwischenzeitlich erneut wahr wird, z.B. das Triggern des Bewegungsmelders nach 120 Sekunden.
## Der Bewegungsmelder ist eingestellt auf eine erneute Sendung nach 120 Sekunden und erneute Sendung, wenn während dieser 120 Sekunden eine Bewegung festgestellt wird.


Die Einbindung des Schalter ist noch ungetestet und sicherlich noch falsch, als Platzhalter aber schon mal drin.
Vielleicht erreicht es Dich noch und Du kannst für Dich daraus etwas ableiten.
Schöne Grüße,
John

Edith: motion muss in Anführungsstriche, sonst wird auch bei anderen Events getriggert. Getestet, leicht überarbeitet und bei mir noch deutlich erweitert, führt hier aber mM nicht zu Mehrwert.
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Per am 09 April 2016, 16:27:16
Ich habe ein ähnliches Problem mit Steckdosen, welche durch das Programm automatisch und durch das Webfrontend/am Gerät selbst manuell geschaltet werden können. Oder das Gerät ändert seinen Status eigenständig ( >:().
Um nicht mit Unmengen Hilfsvariablen und Notifys zu arbeiten, schreibe ich gerade ein "Device" MANU, welches für solche Zwecke den Auslöse-Ort erkennt und speichert. Damit kann man hinterher granular unterscheiden, wer wie geschaltet hat und was man damit machen will.
Denke, dass ich nächste Woche die erste Beta veröffentliche.
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: joshi04 am 09 April 2016, 19:21:34
Hört sich spannend an. Sollte es soweit sein, mach gerne mal einen neuen Thread mit Verlinkung von hier auf.

Die Logik ist mittlerweile getestet und bei mir noch um ein paar logische Zeitabfragen erweitert (mit kleinem Update, s.o.).
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Per am 09 April 2016, 21:37:04
Zitat von: joshi04 am 09 April 2016, 19:21:34
Hört sich spannend an.
Ich mach es auf jeden Fall fertig, auch wenn mein heutiger "Mittagsschlaf" mir die Erkenntnis brachte, wie ich DOIF und Gerät auch ohne verknüpfe.
Aber darüber muss ich auch noch etwas nachdenken...
Titel: Antw:GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik
Beitrag von: Per am 15 April 2016, 18:30:01
Zitat von: joshi04 am 09 April 2016, 19:21:34mit Verlinkung
Hier (https://forum.fhem.de/index.php/topic,52225.0.html)...