Unter bestimmten Umständen, soll die Beleuchtung im Garten partiell oder komplett gesteuert werden:
- [1] wenn ein Bewegungsmelder eine bestimmte Helligkeitsschwelle meldet und zugleich mindestens eine Terrassentür geöffnet ist
- [2] wenn eine bestimmte Helligkeitsschwelle unterschritten ist und gleichzeitig die Anwohner abwesend sind und
- [3] wenn am Freitag, Samstag und Sonntag zwischen 19:35 und 23:59 Uhr, Helligkeit und Temperatur ein bestimmtes Niveau haben und zusätzlich eine Terrassentür offen ist.
- [4] Sonst ist das Licht komplett aus
Die vier Verzweigungen funktionieren. Das
Problem ist, dass
cmd1 nach einer kurzen (wenige Minuten)
zufälligen Zeit auf
cmd4 springt (alles aus) obwohl sich an den definierten DOIF-Bedingungen nichts geändert hat.
Lediglich der Bewegungssensor scheint zu diesem Zeitpunkt ein Event zu generieren, nämlich durch die zusätzlich noch gemessene Feuchtigkeit, die sich häufig ändert. Aber die sollte sich doch nicht auf DOIF auswirken, oder?
(
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
([EG_FensterTerrasse_1] eq "open" or [EG_FensterTerrasse_2] eq "open") ## Wenn mind. eine der beiden Terassentüren geöffnet wird
)
(set GA_Schalter01 on) ## Randbeleuchtung
DOELSEIF
(
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
[Residents] eq "absent" ## und Anwohner abwesend
)
(set GA_Schalter01 on, set GA_Schalter03 on) ## Zufallsschaltung für Randbeleuchtung. Todo
DOELSEIF
(
[19:35-23:59|57] and ## Zwischen 19:35 und 23:59 und an bestimmten Wochentagen
[EG_FensterTerrasse_2] eq "open" and ## Terrassenfenster 2 ist geöffnet
[Garten_Bewegungsmelder_1:brightness] < 120 and ## Helligkeit
[Garten_Thermometer:temperature] > 20 ## Außentemperatur
)
(set GA_Schalter0.* on)
DOELSE
(
set GA_Schalter0.* off
)
Ich setze Homematic ein.
Kann mir jedem einen Tipp geben?
Zitat von: Alcamar am 17 August 2017, 08:42:30Lediglich der Bewegungssensor scheint zu diesem Zeitpunkt ein Event zu generieren, nämlich durch die zusätzlich noch gemessene Feuchtigkeit, die sich häufig ändert. Aber die sollte sich doch nicht auf DOIF auswirken, oder?
Doch, macht sie. Sie triggert den entsprechenden
DO(ELSE)IF-Zweig an, wird dort als
false bewertet und geht dann in den
DOELSE-Zweig.
obwohl ich den Wert nicht logisch auswerte? Ok, das versuche ich mal nochmal zu durchdringen. :(
Ist die Lösung nun
- die Deaktivierung der Luftfeuchtigkeitsmeldung vom Bewegungsmelder
oder
- die Aufnahme der Luftfeuchtigkeit in eine DOIF-Verzweigung?
Bei dem ersten weiß ich gar nicht, ob das wirklich geht. Die Events brauche ich ja anderswo. Apropos, würde derzeit auch eine registrierte Bewegung des Bewegungsmelders zum Ausschalten des Lichts führen? Also analog der Luftfeuchtigkeitsänderung? Müsste ich ausprobieren.
Bei der zweiten Alternative müsste ich eine sinnfreie dummy-logik der Luftfeuchtigkeit einbinden?
Garten_Bewegungsmelder_1:humidity > 0
:o
Zitat von: Alcamar am 17 August 2017, 13:44:48Ist die Lösung nun
oder
Weder noch. Du sagst dem
DOIF einfach, es solle nur ihn betreffende Events auswerten. In der CommandRef findest du den entsprechenden Befehl.
Nebenbei solltest du dir für dein nächstes Problem mit einem DOIF eine bessere Überschrift ausdenken ;).
wie würdest Du spontan eine treffendere Überschrift nennen?
Ich wollte schon "ungewollte Lichtorgel" benutzen. Dafür sind aber die Abständen zwischen ein und auschalten zu lang. 8)
Ich schaue, ob ich in der CommandRef schlauer werde. Mein bisheriger Blick darin, hat mir nicht auf die Sprünge helfen können. Aber ich schaue nochmal gezielt nach Events in DOIFs, jetzt wo ich weiß, dass die Luftfeuchtigkeitsmessung, die ich in meiner Syntax nicht nutze, das Problem ist. Danke dafür.
Da die DOIF-Ref recht umfangreich ist, schau mal hier (https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent).
CheckReadingEvent = 1
Würde ich der commandref entnehmen, soll es lösen. Leider aber ohne Erfolg.
:-[
Ein list vom DOIF einmal beim korrekten Zustand und dann noch mal vom nicht gewünschten Zustand könnte helfen.
So sollte es sein:
Internals:
DEF (
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
([EG_FensterTerrasse_1] eq "open" or [EG_FensterTerrasse_2] eq "open") ## Wenn mind. eine der beiden Terassentüren geöffnet wird
)
(set GA_Schalter01 on) ## Randbeleuchtung
DOELSEIF
(
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
[Residents] eq "absent" ## und Anwohner abwesend
)
(set GA_Schalter01 on, set GA_Schalter03 on) ## Zufallsschaltung für Randbeleuchtung. Todo
DOELSEIF
(
[19:35-23:59|57] and ## Zwischen 19:35 und 23:59 und an bestimmten Wochentagen
[EG_FensterTerrasse_2] eq "open" and ## Terrassenfenster 2 ist geöffnet
[Garten_Bewegungsmelder_1:brightness] < 120 and ## Helligkeit
[Garten_Thermometer:temperature] > 20 ## Außentemperatur
)
(set GA_Schalter0.* on)
DOELSE
(
set GA_Schalter0.* off
)
NAME di_Aussenbeleuchtung
NR 1548
NTFY_ORDER 50-di_Aussenbeleuchtung
STATE cmd_1
TYPE DOIF
READINGS:
2017-08-17 22:12:51 Device EG_FensterTerrasse_2
2017-08-17 22:12:51 cmd 1
2017-08-17 22:12:51 cmd_event EG_FensterTerrasse_2
2017-08-17 22:12:51 cmd_nr 1
2017-08-17 22:08:17 e_EG_FensterTerrasse_1_STATE closed
2017-08-17 22:12:51 e_EG_FensterTerrasse_2_STATE open
2017-08-17 22:08:47 e_Garten_Bewegungsmelder_1_brightness 83
2017-08-17 22:04:48 e_Garten_Thermometer_temperature 23.2
2017-08-17 22:12:51 state cmd_1
2017-08-16 23:59:00 timer_01_c03 17.08.2017 19:35:00|57
2017-08-16 23:59:00 timer_02_c03 17.08.2017 23:59:00|57
condition:
0 ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 90 and (InternalDoIf($hash,'EG_FensterTerrasse_1','STATE') eq "open" or InternalDoIf($hash,'EG_FensterTerrasse_2','STATE') eq "open")
1 ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 90 and InternalDoIf($hash,'Residents','STATE') eq "absent"
2 DOIF_time($hash,0,1,$wday,$hms,"57") and InternalDoIf($hash,'EG_FensterTerrasse_2','STATE') eq "open" and ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 120 and ReadingValDoIf($hash,'Garten_Thermometer','temperature') > 20
days:
0 57
1 57
devices:
0 Garten_Bewegungsmelder_1 EG_FensterTerrasse_1 EG_FensterTerrasse_2
1 Garten_Bewegungsmelder_1 Residents
2 EG_FensterTerrasse_2 Garten_Bewegungsmelder_1 Garten_Thermometer
all Garten_Bewegungsmelder_1 EG_FensterTerrasse_1 EG_FensterTerrasse_2 Residents Garten_Thermometer
do:
0:
0 set GA_Schalter01 on
1:
0 set GA_Schalter01 on, set GA_Schalter03 on
2:
0 set GA_Schalter0.* on
3:
0 set GA_Schalter0.* off
helper:
event contact: open (to myVCCU),open,trigger_cnt: 235
globalinit 1
last_timer 2
sleeptimer -1
timerdev EG_FensterTerrasse_2
timerevent contact: open (to myVCCU),open,trigger_cnt: 235
triggerDev EG_FensterTerrasse_2
timerevents:
contact: open (to myVCCU)
open
trigger_cnt: 235
timereventsState:
contact: open (to myVCCU)
state: open
trigger_cnt: 235
triggerEvents:
contact: open (to myVCCU)
open
trigger_cnt: 235
triggerEventsState:
contact: open (to myVCCU)
state: open
trigger_cnt: 235
internals:
0 EG_FensterTerrasse_1:STATE EG_FensterTerrasse_2:STATE
1 Residents:STATE
2 EG_FensterTerrasse_2:STATE
all EG_FensterTerrasse_1:STATE EG_FensterTerrasse_2:STATE Residents:STATE
interval:
0 -1
1 0
itimer:
localtime:
0 1502991300
1 1503007140
readings:
0 Garten_Bewegungsmelder_1:brightness
1 Garten_Bewegungsmelder_1:brightness
2 Garten_Bewegungsmelder_1:brightness Garten_Thermometer:temperature
all Garten_Bewegungsmelder_1:brightness Garten_Thermometer:temperature
realtime:
0 19:35:00
1 23:59:00
regexp:
0:
1:
2:
all:
state:
STATE:
time:
0 19:35:00
1 23:59:00
timeCond:
0 2
1 2
timer:
0 0
1 0
timers:
2 0 1
trigger:
triggertime:
1503007140:
localtime 1503007140
hash:
Attributes:
checkReadingEvent 1
group TriggerTime
icon time_automatic
room Außenbereich,Steuerung
und das ist der ungewünschte Zustand:
Internals:
DEF (
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
([EG_FensterTerrasse_1] eq "open" or [EG_FensterTerrasse_2] eq "open") ## Wenn mind. eine der beiden Terassentüren geöffnet wird
)
(set GA_Schalter01 on) ## Randbeleuchtung
DOELSEIF
(
[Garten_Bewegungsmelder_1:brightness] < 90 and ## Helligkeit
[Residents] eq "absent" ## und Anwohner abwesend
)
(set GA_Schalter01 on, set GA_Schalter03 on) ## Zufallsschaltung für Randbeleuchtung. Todo
DOELSEIF
(
[19:35-23:59|57] and ## Zwischen 19:35 und 23:59 und an bestimmten Wochentagen
[EG_FensterTerrasse_2] eq "open" and ## Terrassenfenster 2 ist geöffnet
[Garten_Bewegungsmelder_1:brightness] < 120 and ## Helligkeit
[Garten_Thermometer:temperature] > 20 ## Außentemperatur
)
(set GA_Schalter0.* on)
DOELSE
(
set GA_Schalter0.* off
)
NAME di_Aussenbeleuchtung
NR 1548
NTFY_ORDER 50-di_Aussenbeleuchtung
STATE cmd_4
TYPE DOIF
READINGS:
2017-08-17 22:15:09 Device Garten_Thermometer
2017-08-17 22:15:09 cmd 4
2017-08-17 22:15:09 cmd_event Garten_Thermometer
2017-08-17 22:15:09 cmd_nr 4
2017-08-17 22:14:39 e_EG_FensterTerrasse_1_STATE closed
2017-08-17 22:12:51 e_EG_FensterTerrasse_2_STATE open
2017-08-17 22:14:47 e_Garten_Bewegungsmelder_1_brightness 83
2017-08-17 22:15:09 e_Garten_Thermometer_temperature 23.1
2017-08-17 22:15:09 state cmd_4
2017-08-16 23:59:00 timer_01_c03 17.08.2017 19:35:00|57
2017-08-16 23:59:00 timer_02_c03 17.08.2017 23:59:00|57
condition:
0 ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 90 and (InternalDoIf($hash,'EG_FensterTerrasse_1','STATE') eq "open" or InternalDoIf($hash,'EG_FensterTerrasse_2','STATE') eq "open")
1 ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 90 and InternalDoIf($hash,'Residents','STATE') eq "absent"
2 DOIF_time($hash,0,1,$wday,$hms,"57") and InternalDoIf($hash,'EG_FensterTerrasse_2','STATE') eq "open" and ReadingValDoIf($hash,'Garten_Bewegungsmelder_1','brightness') < 120 and ReadingValDoIf($hash,'Garten_Thermometer','temperature') > 20
days:
0 57
1 57
devices:
0 Garten_Bewegungsmelder_1 EG_FensterTerrasse_1 EG_FensterTerrasse_2
1 Garten_Bewegungsmelder_1 Residents
2 EG_FensterTerrasse_2 Garten_Bewegungsmelder_1 Garten_Thermometer
all Garten_Bewegungsmelder_1 EG_FensterTerrasse_1 EG_FensterTerrasse_2 Residents Garten_Thermometer
do:
0:
0 set GA_Schalter01 on
1:
0 set GA_Schalter01 on, set GA_Schalter03 on
2:
0 set GA_Schalter0.* on
3:
0 set GA_Schalter0.* off
helper:
event T: 23.1 H: 64,temperature: 23.1
globalinit 1
last_timer 2
sleeptimer -1
timerdev Garten_Thermometer
timerevent T: 23.1 H: 64,temperature: 23.1
triggerDev Garten_Thermometer
timerevents:
T: 23.1 H: 64
temperature: 23.1
timereventsState:
state: T: 23.1 H: 64
temperature: 23.1
triggerEvents:
T: 23.1 H: 64
temperature: 23.1
triggerEventsState:
state: T: 23.1 H: 64
temperature: 23.1
internals:
0 EG_FensterTerrasse_1:STATE EG_FensterTerrasse_2:STATE
1 Residents:STATE
2 EG_FensterTerrasse_2:STATE
all EG_FensterTerrasse_1:STATE EG_FensterTerrasse_2:STATE Residents:STATE
interval:
0 -1
1 0
itimer:
localtime:
0 1502991300
1 1503007140
readings:
0 Garten_Bewegungsmelder_1:brightness
1 Garten_Bewegungsmelder_1:brightness
2 Garten_Bewegungsmelder_1:brightness Garten_Thermometer:temperature
all Garten_Bewegungsmelder_1:brightness Garten_Thermometer:temperature
realtime:
0 19:35:00
1 23:59:00
regexp:
0:
1:
2:
all:
state:
STATE:
time:
0 19:35:00
1 23:59:00
timeCond:
0 2
1 2
timer:
0 0
1 0
timers:
2 0 1
trigger:
triggertime:
1503007140:
localtime 1503007140
hash:
Attributes:
checkReadingEvent 1
group TriggerTime
icon time_automatic
room Außenbereich,Steuerung
Das hier
event T: 23.1 H: 64,temperature: 23.1
Scheint der Schaltens gewesen zu sein.
In dem Fall die Temperatur die Du ja auch drin hast.
Überlege am besten welche Voraussetzungen du triggern willst und welche du mir Abfragen willst. Die zum nur Abfragen setzt Du dann ein ? davor
Im Grunde ist das Öffnen einer Tür der Trigger um das Licht einzuschalten. Temperatur und Lichtverhältnisse sind Nebenbedinungen, die ich prüfe, aber nicht originär triggern sollten.
Wenn ich Dich richtig verstanden habe, müsste das dann so laufen:
(
[Garten_Bewegungsmelder_1:?brightness] < 90 and ## Helligkeit
([EG_FensterTerrasse_1] eq "open" or [EG_FensterTerrasse_2] eq "open") ## Wenn mind. eine der beiden Terassentüren geöffnet wird
)
(set GA_Schalter01 on) ## Randbeleuchtung
DOELSEIF
(
[Garten_Bewegungsmelder_1:?brightness] < 90 and ## Helligkeit
[Residents] eq "absent" ## und Anwohner abwesend
)
(set GA_Schalter01 on, set GA_Schalter03 on) ## Zufallsschaltung für Randbeleuchtung. Todo
DOELSEIF
(
[19:35-23:59|57] and ## Zwischen 19:35 und 23:59 und an bestimmten Wochentagen
[EG_FensterTerrasse_2] eq "open" and ## Terrassenfenster 2 ist geöffnet
[Garten_Bewegungsmelder_1:?brightness] < 120 and ## Helligkeit
[Garten_Thermometer:?temperature] > 20 ## Außentemperatur
)
(set GA_Schalter0.* on)
DOELSE
(
set GA_Schalter0.* off
)
Kann ich heute Abend prüfen. :)
Danke!
Das Fragezeichen kommt ganz vorne hin. Also im Grunde vor dem Device
[?Blabla:blu]
sehr gut, vielen Dank.
Die Syntax war für fhem ok gewesen. :) Aber jetzt auch, und das Fragezeichen ist nun vorne.
Super! Scheint zu funktionieren. Vielen Dank dafür.
Ich habe etwas dazu gelernt: Ein neuer Event sorgt, wohl dafür, dass der aktuelle cmd nicht gilt und der nächste gültige gesucht wird. In meinen Fall ist es DOELSE. Trotz mehrfaches lesen der DOIF Doku, habe ich das jetzt erst verstanden, was da drin steht. :)