Licht mit on for timer und Bewegungsmelder schalten

Begonnen von visionsurfer, 01 März 2019, 22:11:35

Vorheriges Thema - Nächstes Thema

Sammy_80

Probiere mal bitte in der letzten Zeile:
(set licht_wand off)

Gesendet von meinem SM-G930F mit Tapatalk


Sammy_80

Bzw. teste Deine Variante mal, indem Du es in der CMD Zeile von fhem eingibst.


Gesendet von meinem SM-G930F mit Tapatalk


Otto123

Hallo Visionsurfer,

da Cooltux auch noch eine Rechtschreibüberkorrektur drin hatte ;D, will ich mal im Detail erläutern:
[praesenz_tv:"on"] ist ein Event Trigger im DOIF der wird quasi in dem Moment wahr wenn dieser Event eintrifft. Und nur in diesem Moment unabhängig vom Status!
[praesenz_tv] eq "on" ist einen Abfragebedingung, die wird in dem Moment wahr, wo irgendein Event eintrifft und diese Abfrage wahr ergibt. Sie bleibt wahr, solange der Status "on" ist!

([praesenz_tv:"on"] or [Praesenz_Buero:"on"]) kann man machen, triggert bei einem von beiden.
([praesenz_tv:"off"] and [Praesenz_Buero:"off"]) kann man nicht machen! Triggert nie, weil nie zwei Events zur gleichen Zeit kommen bzw. verarbeitet werden!

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

visionsurfer

@Otto123

Vielen Dank für die Erklärung. Leuchtet grundsätzlich ein.

Beim einschalten ist mir quasi egal, welcher Melder zuerst Bewegung meldet. TV Zimmer oder Büro. Egal. Meistens wird es TV Zimmer sein, weil man dieses Zimmer vom Schlafzimmer als erstes "erwischt".
Das funktioniert ja auch wunderbar, man kann in der Regel nicht an zwei Orten gleichzeitig sein. Der Vorgang passt und funktioniert.

Beim ausschalten ist man zuerst im Büro (nun Kinderzimmer, muss ich noch umbenennen). Das verlässt man. Also wird dort auch zuerst keine Präsenz mehr gemeldet, aber man ist ja noch unterwegs ins Schlafzimmer und geht vom TV Zimmer aus, ins Schlafzimmer. Ich möchte also warten bis nicht EINER von beiden OFF ist, sondern bis BEIDE OFF sind. Erst wenn wirklich beide Melder OFF sind, soll auch das Licht wieder ausgehen. Weil dann bin ich sicher, das niemand mehr im Kinderzimmer ist und auch nicht mehr "auf dem Weg ins Schlafzimmer".

Daher dachte ich das man die Logik bauen kann, nach dem Motto "Wenn Melder TV ist OFF UND Melder Büro ist OFF, erst dann schalte Licht aus". Funktioniert nur nicht.

Reicht es also wenn ich folgendes schreiben ?


([praesenz_tv] eq "off" and [Praesenz_Buero] eq "off")


Ist das dann richtig, bzw. ist so das Ziel erreichbar, zu warten bis beide OFF sind und dann die Lampe wieder ausgeschaltet wird ?

Grüße,
Visionsurfer

visionsurfer

@Sammy_80:
Das passt soweit. Das habe ich vorher getestet und funktioniert. Der Befehl AUS passt.

Otto123

ZitatReicht es also wenn ich folgendes schreiben ?

Code: [Auswählen]
([praesenz_tv] eq "off" and [Praesenz_Buero] eq "off")

Ist das dann richtig, bzw. ist so das Ziel erreichbar, zu warten bis beide OFF sind und dann die Lampe wieder ausgeschaltet wird ?

Das sollte funktionieren.
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

visionsurfer

Hi,

ich habe es nun so gemacht und nun funktioniert es wunderbar:


([praesenz_tv:"on"] or [Praesenz_Buero:"on"])
   (set licht_wand value 25) 
DOELSEIF     
([praesenz_tv] eq "off" and [Praesenz_Buero] eq "off")
(set licht_wand AUS)


Danke Otto. Ich glaub jetzt habe ich es verstanden.

Nun werde ich noch überlegen wie ich quasi eine dritte Bedingung einbauen kann. Weil ich möchte noch erreichen, dass dieses Licht nur geschaltet wird, wenn der Status von rgr_Bewohner auf asleep steht.
Kann man die Zeile einfach erweitern ?


([praesenz_tv:"on"] or [Praesenz_Buero:"on"] and [rgr_Bewohner:"asleep"])


Würde das schon reichen, oder macht das so keine Sinn ?

Grüße,
Visionsurfer

CoolTux

Zitat von: visionsurfer am 03 März 2019, 21:18:09
Danke Otto. Ich glaub jetzt habe ich es verstanden.


([praesenz_tv:"on"] or [Praesenz_Buero:"on"] and [rgr_Bewohner:"asleep"])


Wenn Du verstanden hast, dürfte diese Frage oben gar nicht mehr auf kommen  ;)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

visionsurfer

#23
Ja da hast du wahrscheinlich recht. Ich bilde mir auch ein, dass ich es verstanden habe. Ich bin mir nicht sicher. Gefühlt würde ich sagen, man kann beides nicht Mischen ?

Dieser CODE funktioniert nicht:


([praesenz_tv:"on"] or [Praesenz_Buero:"on"] and [rgr_Bewohner:"asleep"])


Wenn ich es richtig verstanden habe, kann es nicht gehen, weil es ja wieder zwei Events gleichzeitig wären. Das geht nicht.

Also habe ich das hier probiert:


([praesenz_tv:"on"] or [Praesenz_Buero:"on"] and [rgr_Bewohner] eq "asleep")


Das geht aber auch nicht. Der Status vom Haus ist aktuell HOME. Also dürfe das Licht ja nicht angehen. Es geht aber an.
Wahrscheinlich weil man beide verschiedenen Arten nicht in einer Zeile mischen darf ?

Grüße,
Visionsurfer

CoolTux

( ([praesenz_tv:"on"] or [Praesenz_Buero:"on"]) and [rgr_Bewohner] eq "asleep")

Ich denke es liegt nur an der fehlenden Klammerung. Probiere bitte einmal.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Hallo visionsurfer,

ich mach nochmal den Erklärbär :) die nächste Lektion.

Perl löst immer zuerst and und dann erst or auf. 

Deswegen muss man beim mischen von and und or in der Regel die Ausdrücke klammern.

0 oder 0 und 0 -> 0
0 oder 0 und 1 -> 0
0 oder 1 und 0 -> 0
0 oder 1 und 1 -> 1
1 oder 0 und 0 -> 1
1 oder 0 und 1 -> 1
1 oder 1 und 0 -> 1
1 oder 1 und 1 -> 1
(0 oder 0) und 0 -> 0
(0 oder 0) und 1 -> 0
(0 oder 1) und 0 -> 0
(0 oder 1) und 1 -> 1
(1 oder 0) und 0 -> 0
(1 oder 0) und 1 -> 1
(1 oder 1) und 0 -> 0
(1 oder 1) und 1 -> 1

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

visionsurfer

Tausend Dank. Erklärbär ist super.

Es funktioniert perfekt. Danke Euch.
Jetzt können Windeln bei Licht gewechselt werden.

Grüße,
Visionsurfer

pc1246

Moin
Und da Du Praesenzmelder hast, brauchst Du Dir um die Nachtriggerei keine Gedanken machen.
Trotzdem noch ein kleiner Hinweis von mir. Ich gehe davon aus, dass das nicht die einzige Stelle ist, an der Du das Licht schaltest.
Das fuehrt aus meiner Sicht zu Problemen, da letztendlich nur einer gewinnen kann. Dementsprechend solltest Du alle Funktionen fuer einen Aktor immer zusammenfuehren!
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

visionsurfer

@pc1246
Das habe ich nicht ganz verstanden ? Was meinst du mit "nur einer kann gewinnen" und "alle Funktionen für einen Aktor immer zusammenführen" ?

Damian

Zitat von: visionsurfer am 04 März 2019, 10:59:27
@pc1246
Das habe ich nicht ganz verstanden ? Was meinst du mit "nur einer kann gewinnen" und "alle Funktionen für einen Aktor immer zusammenführen" ?

Ein Aktor kann gleichzeitig nur einen Zustand haben (es kann nicht gleichzeitig an und aus sein), daher sollte es am besten nur durch ein DOIF-Modul gesteuert werden und nicht durch mehrere. Denn erstens kann auch ein DOIF-Modul sich gleichzeitig nur in einem Zustand befinden und zweitens findet man seine Schaltlogik an einer Stelle und muss nicht jedes mal FHEM durchsuchen, um zu schauen wer noch alles den Aktor schaltet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF