DOIF mit Bewegungsmelder, Helligkeit und PC ;-)

Begonnen von docb, 13 Februar 2018, 18:09:19

Vorheriges Thema - Nächstes Thema

docb

Moin,
ich bastel jetzt seit Wochen an meinem Doif rum, aber ich habe irgendwo noch einen Wurm drin. Ziel: Wenn es düster ist und ich im Büro bin, soll da das Licht angehen UND anbleiben solange ich dort bin. Der Bewegungsmelder schickt alle 15 Sek ein Motion-Event (falls er Motion registriert), allerdings bewege ich mich vorm PC oft zu wenig  ::) so dass er oft nicht checkt, dass ich noch da bin. Also will ich auch noch abfangen, ob der PC an ist. Gelöst habe ich das so:
   
(([UGBU_Bewegungsmelder_Motion:"motion"] or [BB_WOL] eq "on") and (([?UGBU_Bewegungsmelder_Motion:brightness] < 50) or [?myTwilight:light] < 5)) (set HUEBridge_HUEDevice3 rgb ed0000 : pct 80; set duBuero_anwesend on; set BU_Schreibtischlampe on) (set HUEBridge_HUEDevice3 off; set duBuero_anwesend off; set BU_Schreibtischlampe off)
und einem
do         resetwait
wait       0,180


Aber irgendwie prüft er mir den PC (BB_WOL) nicht - ich sitze gerade schon wieder im Dunkeln  8)
Kann mir bitte jemand draufhelfen?
Danke und viele Grüße
doc
I love FHEM!

Ellert

Liefert BB_WOL regelmäßig Events, die triggern, falls der BM still bleibt?

docb

Nope, der liefert nur einmal ein "on" wenn er an ist und dann ein "off" wenn er aus ist.
I love FHEM!

Otto123

Aber Du hast einfach zwei Befehle, egal wer triggert.
Der erste geht sofort, der zweite nach 180 sec. Der zweite macht aus.

Dein DOIF prüft einmal und macht eine Zeitschaltung.

Mach doch einfach ein DOELSE mit dem zweiten Befehl und lass die Zeitsteuerung weg.

Oder mach es als Zeitsteuerung mit dem Motion und ein DOELSEIF für den PC.

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

docb

Moin,
ok - meinst du so:
([UGBU_Bewegungsmelder_Motion:"motion"] and (([?UGBU_Bewegungsmelder_Motion:brightness] < 50) or [?myTwilight:light] < 5)) (alles an) DOELSEIF ([BB_WOL] eq "on"and (([?UGBU_Bewegungsmelder_Motion:brightness] < 50) or [?myTwilight:light] < 5)) (alles an) ELSE (alles aus)
und den wait dann ändern in: wait 0,0,180?
Obwohl der BB_WOL ja normal nie triggern wird, denn in der Regel komme ich rein, Licht geht an, dann mache ich den PC an.

So ganz klar ist mir das nicht, ich bin eher der gaaaanz einfache DOIF-Ersteller ;-)
I love FHEM!

Otto123

Nee so geht wieder alles aus.

Sagen wir: Du kommst im hellen rein, machst den PC an und dann dämmert es ...

Du musst schon mehrere Fälle berücksichtigen. Mach doch den "Motion 180 wieder aus" Fall und den "ich schlafe am PC" Fall erstmal getrennt.  ;D
Den ersten hast Du schon.
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

Ellert

Zitat von: docb am 13 Februar 2018, 19:57:15
Nope, der liefert nur einmal ein "on" wenn er an ist und dann ein "off" wenn er aus ist.
DOIF arbeitet ereignisbasiert.
Tritt eine Ereignis eines in der Bedingung erwähnten Gerätes ein, dann wird die Bedingung geprüft.
Ist die Bedingung wahr, werden die Befehle ausgeführt.
Wenn do resetwait gesetzt ist, wird der laufendeWaittimer zurückgesetzt und der zugehörige Befehl nicht ausgeführt.

Also, wenn kein Ereignis passiert, wird der Timer nicht zurückgesetzt und die Lampen schalten aus.

Statt WOL könntest Du mit PRESENCE den PC prüfen, dann wird alle 30 s ein Event erzeugt und das DOIF würde funktionieren.

Otto123

Zitat von: Ellert am 13 Februar 2018, 20:39:12
Statt WOL könntest Du mit PRESENCE den PC prüfen, dann wird alle 30 s ein Event erzeugt und das DOIF würde funktionieren.
Das würde WOL auch, ohne event-on-change-reading und der eingebauten presence funktion.

Aber diese Empfehlung halte ich für nonsens, ein dünnes dummes Brett welches gebohrt wird.
Er hat doch Events, und zwar die richtigen PC an - PC aus. Die würde ich auswerten und nicht neue Events produzieren und zusätzlich Strom verbrauchen.  ;)

Meine Meinung
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

docb

Ok, das mit den künstlichen Events vom PC würde ich hinbekommen, aber Ottos Argument ist natürlich richtig. Wobei ich deine Idee noch nicht ganz verstehe -meinst du das so?
1. DOIF: Bewegung + ?Dunkelheit(kein Trigger) -> Lichter an und nach 3 Minuten aus wenn keine neue Bewegung
2. DOIF: PC an + Dunkelheit(hier als zweiter Trigger) -> Lichter an und bleiben an  -> else Lichter aus
Kommen die beiden sich nicht in die Quere? Also schaltet das erste nicht einfach die Lichter aus, wenn der waittimer abläuft?
Viele Grüße
PS: Ganz schönes Hirnjogging dieses DOIF  ;)
I love FHEM!

Otto123

Moin,
Du hast jetzt die Erkenntnis vorneweg genommen, warum man das dann doch besser in ein DOIF packt bzw. welche Bedingungen doch noch alle einfließen müssen.  :D :D :D
Also änderst du
Zitat1. DOIF: Bewegung + ?Dunkelheit(kein Trigger) -> Lichter an und nach 3 Minuten aus wenn keine neue Bewegung
in 
Bewegung + ?Dunkelheit(kein Trigger) + ?PC aus -> Lichter an und nach 3 Minuten aus wenn keine neue Bewegung

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

docb

Hm. Zum Verständnis - wenn ich das so mache
Bewegung + ?Dunkelheit(kein Trigger) + ?PC aus -> Lichter an und nach 3 Minuten aus wenn keine neue Bewegung
dann löst er nur aus, wenn er Bewegung erkennt, es Dunkel ist und der PC aus ist und nach den 3 Minuten verlängert er den Resettimer, weil der PC noch an ist? Habe ich das richtig interpretiert?
Und folgender Fall wäre dann nicht abgedeckt - ich sitze am PC es ist noch hell -> wird dunkel -> Lichter bleiben aus, weil PC an ist.
Knifflige Geschichte  ???
I love FHEM!

Otto123

Nein mein Gedanke zu 1. war: Dieses DOIF  löst nur aus wenn der PC aus ist (und Dunkel) denn wenn der PC an ist hat ja das andere DOIF schon geschaltet.

Das DOIF für den PC schaltet einfach aus der Kombination es ist dunkel und der PC ist an. Beide als Trigger. Wenn du am PC sitzt und es ist hell ist das Licht aus. Wenn es dunkel wird, triggert die Dunkelheit das Licht weil der PC an ist.
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

Per

Zitat von: docb am 13 Februar 2018, 22:50:53Ok, das mit den künstlichen Events vom PC würde ich hinbekommen, aber Ottos Argument ist natürlich richtig.
Wie wäre es andersrum? Erzeuge aus den tausenden Events des Bewegungsmelders einen Zustand und werte diesen aus.

docb

@Otto: ok, du meintest zwei Doifs:
1: Bewegung + ?Dunkel + ?PC aus => Lampen an für 3 Minuten
2: PC an + Dunkel => (Lampe an)  (Lampe aus)
1 ist klar, das Ding geht bei Bewegung für 3 Minuten an und dann aus
2 twilight liefert ja häufiger Werte, also wird das Ding irgendwann anspringen, wenn es nicht der PC auslöst. Und die Lampe müsste ja eigentlich ausgehen, wenn es entweder wieder hell wird, oder der PC aus ist, weil nicht mehr beide Bedingungen erfüllt sind, richig?

@Per: das hatte ich auch schon mal, ändert aber leider nichts am grundsätzlichen Problem. Denn wenn der Bewegungsmelder ein dummy steuert, geht das bei Bewegung auf on, aber halt eben nach 180 Sek ohne Bewegung (und Tippen auf der Tastatur genügt anscheinend nicht) auch wieder auf off. Ich könnte höchstens auf den dummy wieder ein Doif setzen und es bei Statusänderung auf off gleich wieder auf on setzen, wenn der PC noch an ist... aber das ist glaube ich auch nicht die effektivste Lösung

Vielen Dank mal für Eure Hilfe und Anregungen!
I love FHEM!

Otto123

Zitat von: docb am 14 Februar 2018, 14:04:21
2 twilight liefert ja häufiger Werte, also wird das Ding irgendwann anspringen, wenn es nicht der PC auslöst. Und die Lampe müsste ja eigentlich ausgehen, wenn es entweder wieder hell wird, oder der PC aus ist, weil nicht mehr beide Bedingungen erfüllt sind, richig?
Ja so wäre der Gedanke. Wenn twilight zu häufig liefert kann man ja noch etwas "glätten". Das kann DOIF ganz gut.

Wie gesagt erst mal entwickeln bis die Logik stimmt, schön kann man später machen.
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