HI!
Ich habe unter anderem für mein Rollo folgendes DOIF
([LichtSensor:brightness] > 20.0 and [Tageslicht_indoor] eq "Tag" and [?Haus] eq "present" and [?TerrassenRollo:level:d] < 100 and [?TVTime] eq "off" and [?KINOTime] eq "off")
(set TerrassenRollo on)
Das ist ja auch alles super und es funzt perfekt! Leider zu perfekt!
Wie bringe ich Fhem bzw diesem DOIF bei das wenn ich meinen Terassenschalter selber Drücke er nicht wieder das rollo fahren soll wenn sich die Helligkeit ändert... Sonst soll er es immer machen aber nicht wenn ich es Manuell auf oder zu gefahren habe...
Ist sowas möglich?
Vielen Dank!
Geht bestimmt ;)
Ich habe sowas (allerdings ohne DOIF) bei meinem Eingangslicht.
Geht autom. per Bewegungsmelder an und aus...
...aber nicht, wenn ich es per Schalter einschalte...
Allerdings: ich habe EnOcean-Schalter (Taster), die selbst in fhem "sichtbar" sind (also "zusätzlich" zum eigentlichen Aktor [EnOcean], der auch per fhem steuerbar ist -> Bewegungsmelder [ZWave]) und ich dort die letzte Aktion (Tastendruck) "sehe".
Also habe ich eine zusätzliche Abfrage: wurde Licht per Schalter (Taster) betätigt (innerhalb der letzten paar Sekunden) und wenn ja, dann höre nicht auf den Bewegungsmelder...
Ob du nun eine Unterscheidungsmöglichkeit (wie ich beschrieben) hast, weiß ich nicht (lässt sich aus den gegebenen Informationen nicht entnehmen)...
...wenn ja: einfach Zusatzbedingung
...wenn nein: schwierig (bzw. dann musst du erst mal dafür sorgen)
EDIT: es gibt auch das AutoShuters-Modul (oder so ähnlich), vielleicht kann das sowas...
Gruß, Joachim
Hi,
Ich nehme den Level als Speicher. ;)
Nimm nicht < 100 sondern 99. Setze nicht auf on sondern auf 99. Frage die 99 vorher ab. Oder nimm ein Filter:
set RolloSZ:FILTER=state!=99 99
Es ist unwahrscheinlich, dass Du die 99 per Hand anwählst.
Gruß Otto
??? Hmmm... Ich nutze einen HM Aktor... Der gibt mir am STATE auch einen Wert aber ich sehe nicht ob dieser Manuell oder per Funk abgesetzt wurde..
An sich keine Schlechte Idee! So würde es gehen... Aber glaube nicht bei mir, wegen der fehlenden Info ob Manuell oder per FHEM geschaltet wurde... :-\
Zitat von: misux am 24 März 2020, 11:54:24
Hi,
Ich nehme den Level als Speicher. ;)
Nimm nicht < 100 sondern 99. Setze nicht auf on sondern auf 99. Frage die 99 vorher ab. Oder nimm ein Filter:
Code: [Auswählen]
set RolloSZ:FILTER=state!=99 99
Es ist unwahrscheinlich, dass Du die 99 per Hand anwählst.
:o OKAYYY... Das klingt gut! Werde es testen!!! Vielen Dank!
Ich nutze auch HM Aktoren :) glaub mir - das geht :)
Zitat von: misux am 24 März 2020, 11:54:24
??? Hmmm... Ich nutze einen HM Aktor... Der gibt mir am STATE auch einen Wert aber ich sehe nicht ob dieser Manuell oder per Funk abgesetzt wurde..
Drum hab ich ja extra MEINE Konstellation geschrieben, also mit einem extra "Device" Taster/Schalter...
...weil auch mit EnOcean (oder ZWave oder oder oder) es nicht geht, wenn man nur den Aktor betrachtet...
EDIT: gekauft hatte ich mir das nur weil der ohne Batterie etc. überall platziert werden kann. Das mit dem extra Device usw. war dann ein toller "Nebeneffekt", der hierfür prima gepasst hat :)
Ausnahme sind nat. solche "Tricks" wie der von Otto... ;)
Gruß, Joachim
Zitat von: MadMax-FHEM am 24 März 2020, 13:31:09
EDIT: gekauft hatte ich mir das nur weil der ohne Batterie etc. überall platziert werden kann. Das mit dem extra Device usw. war dann ein toller "Nebeneffekt", der hierfür prima gepasst hat :)
Frage zu dem EnOcean Taster, funktioniert der denn nun mit Fhem.?
Hab ich doch geschrieben: EnOcean Taster der selbst in fhem sichtbar ist...
Oder wo zielt die Frage hin?
Gruß, Joachim
Zitat von: MadMax-FHEM am 28 März 2020, 18:49:06
Hab ich doch geschrieben: EnOcean Taster der selbst in fhem sichtbar ist...
Oder wo zielt die Frage hin?
Gruß, Joachim
nein alles OK, hatte ich wohl nicht gelesen... Danke
Zitat von: Otto123 am 24 März 2020, 11:51:52
Hi,
Ich nehme den Level als Speicher. ;)
Nimm nicht < 100 sondern 99. Setze nicht auf on sondern auf 99. Frage die 99 vorher ab. Oder nimm ein Filter:
set RolloSZ:FILTER=state!=99 99
Es ist unwahrscheinlich, dass Du die 99 per Hand anwählst.
Gruß Otto
Hallo. Habe es nun so versucht..
([LichtSensor:brightness] > 13.0 and [Tageslicht_indoor] eq "Tag" and [?Haus] eq "present" and [?TerrassenRollo:level:d] < 99 and [?TVTime] eq "off")
(set TerrassenRollo 99)
Leider fährt er das Rollo sofort wieder hoch(dann noch nicht mal komplett. Das soll er aber nicht wenn ich es manuell komplett runtergefahren habe.
So sieht nun mein komplettes DOIF für das Rollo aus. Funktioniert auch hervorragend. Aber es soll ja NICHT hoch fahren wenn ich es manuell runterfahre...
HIer ein List vom DOIF
Internals:
DEF ([TVTime:state] eq "on" and ([?Haus] eq "present" or [?DominicHandy] eq "present") and [?TerrassenRollo:level] > 1)
(set TerrassenRollo 0)
DOELSEIF
([PartyTime] eq "off" and [?22:15-07:00] and [TerrassenTuer2] eq "open" and [TerrassenTuer1] eq "closed" and [?TerrassenRollo:level:d] > 1)
(set TerrassenRollo 0)
DOELSEIF
([?PartyTime] eq "off" and [22:15-07:00] and [TerrassenTuer2] eq "open" and [TerrassenTuer1] eq "closed" and [?TerrassenRollo:level:d] > 1)
(set TerrassenRollo 0)
DOELSEIF
([LichtSensor:brightness] < 0.7 and [?PartyTime] eq "off" and [TerrassenTuer1] eq "closed" and ([?Haus] eq "present" or [?DominicHandy] eq "present") and [?TVTime:state] eq "off" and [?TerrassenRollo:level:d] > 1 and [TerrasseBeleuchtung] eq "off")
(set TerrassenRollo 0)
DOELSEIF
([?LichtSensor:brightness] < 0.7 and [?PartyTime] eq "off" and [TerrassenTuer1] eq "open" and [?Haus] eq "present" and [?TVTime:state] eq "off" and [?TerrassenRollo:level:d] < 1)
(set TerrassenRollo 20)
DOELSEIF
([LichtSensor:brightness] < 13.0 and [?PartyTime] eq "off" and [TerrassenTuer1] eq "closed" and [?Haus] eq "present" and [?TVTime:state] eq "off" and [?TerrassenRollo:level:d] > 60)
(set TerrassenRollo 60)
DOELSEIF
([LichtSensor:brightness] < 13.0 and [?PartyTime] eq "off" and [TerrassenTuer1] eq "closed" and [TerrassenTuer2] eq "open" and [?Haus] eq "present" and [?TVTime:state] eq "off" and [?TerrassenRollo:level:d] > 60 and [TerrasseBeleuchtung] eq "on")
(set TerrassenRollo 60)
DOELSEIF
([?LichtSensor:brightness] < 13.0 and [?PartyTime] eq "off" and [TerrassenTuer1] eq "closed" and [?Haus] eq "present" and [?TVTime:state] eq "off" and [?TerrassenRollo:level:d] < 60 and [TerrasseBeleuchtung] eq "on")
(set TerrassenRollo 60)
DOELSEIF
([Haus] eq "absent" and [?TerrassenRollo:level:d] > 1 and [?TerrassenTuer1] eq "closed")
(set TerrassenRollo 0)
DOELSEIF
([Haus] eq "present" and [?LichtSensor:brightness] > 13.0 and [?TerrassenRollo:level:d] < 99 and [TVTime] eq "off")
(set TerrassenRollo 99)
DOELSEIF
([TerrassenTuer2] eq "closed" and [?TerrassenTuer1] eq "open" and ([?Haus] eq "present" or [?DominicHandy] eq "present") and [?TerrassenRollo:level:d] < 99)
(set TerrassenRollo 99)
DOELSEIF
([LichtSensor:brightness] > 13.0 and [Tageslicht_indoor] eq "Tag" and [?Haus] eq "present" and [?TerrassenRollo:level:d] < 99 and [?TVTime] eq "off")
(set TerrassenRollo 99)
DOELSEIF
([PartyTime] eq "on")
(set TerrassenRollo 60)
FUUID 5c4afdc8-f33f-84b4-9757-7f9e75daa228c7a7
MODEL FHEM
NAME DOIFTerrassenRollo
NOTIFYDEV global,TerrassenTuer1,Tageslicht_indoor,PartyTime,Haus,LichtSensor,TerrassenTuer2,TerrasseBeleuchtung,TVTime
NR 112
NTFY_ORDER 50-DOIFTerrassenRollo
STATE cmd_12
TYPE DOIF
VERSION 23235 2020-11-25 22:42:28
READINGS:
2020-12-22 13:36:35 Device LichtSensor
2020-12-22 13:28:49 cmd 12
2020-12-22 13:28:49 cmd_event LichtSensor
2020-12-22 13:28:49 cmd_nr 12
2020-12-22 13:36:35 e_LichtSensor_brightness 111.12
2020-12-22 13:24:48 mode enabled
2020-12-22 13:28:49 state cmd_12
2020-12-22 13:24:48 timer_01_c02 22.12.2020 22:15:00
2020-12-22 13:24:48 timer_02_c02 23.12.2020 07:00:00
2020-12-22 13:24:48 timer_03_c03 22.12.2020 22:15:00
2020-12-22 13:24:48 timer_04_c03 23.12.2020 07:00:00
Regex:
accu:
cond:
Haus:
8:
&STATE ^Haus$
9:
&STATE ^Haus$
LichtSensor:
0:
1:
10:
11:
brightness ^LichtSensor$:^brightness:
12:
2:
3:
brightness ^LichtSensor$:^brightness:
4:
5:
brightness ^LichtSensor$:^brightness:
6:
brightness ^LichtSensor$:^brightness:
7:
8:
9:
PartyTime:
1:
&STATE ^PartyTime$
12:
&STATE ^PartyTime$
TVTime:
0:
state ^TVTime$:^state:
9:
&STATE ^TVTime$
Tageslicht_indoor:
11:
&STATE ^Tageslicht_indoor$
TerrasseBeleuchtung:
3:
&STATE ^TerrasseBeleuchtung$
6:
&STATE ^TerrasseBeleuchtung$
7:
&STATE ^TerrasseBeleuchtung$
TerrassenTuer1:
1:
&STATE ^TerrassenTuer1$
2:
&STATE ^TerrassenTuer1$
3:
&STATE ^TerrassenTuer1$
4:
&STATE ^TerrassenTuer1$
5:
&STATE ^TerrassenTuer1$
6:
&STATE ^TerrassenTuer1$
7:
&STATE ^TerrassenTuer1$
TerrassenTuer2:
1:
&STATE ^TerrassenTuer2$
10:
&STATE ^TerrassenTuer2$
2:
&STATE ^TerrassenTuer2$
6:
&STATE ^TerrassenTuer2$
attr:
cmdState:
wait:
0:
0
1:
300
10:
0
2:
0
3:
0
4:
0
5:
0
6:
0
7:
0
8:
0
9:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'TVTime','state') eq "on" and (::InternalDoIf($hash,'Haus','STATE') eq "present" or ::InternalDoIf($hash,'DominicHandy','STATE') eq "present") and ::ReadingValDoIf($hash,'TerrassenRollo','level') > 1
1 ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'TerrassenTuer2','STATE') eq "open" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 1
10 ::InternalDoIf($hash,'TerrassenTuer2','STATE') eq "closed" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "open" and (::InternalDoIf($hash,'Haus','STATE') eq "present" or ::InternalDoIf($hash,'DominicHandy','STATE') eq "present") and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') < 99
11 ::ReadingValDoIf($hash,'LichtSensor','brightness') > 13.0 and ::InternalDoIf($hash,'Tageslicht_indoor','STATE') eq "Tag" and ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') < 99 and ::InternalDoIf($hash,'TVTime','STATE') eq "off"
12 ::InternalDoIf($hash,'PartyTime','STATE') eq "on"
2 ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::DOIF_time($hash,2,3,$wday,$hms) and ::InternalDoIf($hash,'TerrassenTuer2','STATE') eq "open" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 1
3 ::ReadingValDoIf($hash,'LichtSensor','brightness') < 0.7 and ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and (::InternalDoIf($hash,'Haus','STATE') eq "present" or ::InternalDoIf($hash,'DominicHandy','STATE') eq "present") and ::ReadingValDoIf($hash,'TVTime','state') eq "off" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 1 and ::InternalDoIf($hash,'TerrasseBeleuchtung','STATE') eq "off"
4 ::ReadingValDoIf($hash,'LichtSensor','brightness') < 0.7 and ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "open" and ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'TVTime','state') eq "off" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') < 1
5 ::ReadingValDoIf($hash,'LichtSensor','brightness') < 13.0 and ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'TVTime','state') eq "off" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 60
6 ::ReadingValDoIf($hash,'LichtSensor','brightness') < 13.0 and ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and ::InternalDoIf($hash,'TerrassenTuer2','STATE') eq "open" and ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'TVTime','state') eq "off" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 60 and ::InternalDoIf($hash,'TerrasseBeleuchtung','STATE') eq "on"
7 ::ReadingValDoIf($hash,'LichtSensor','brightness') < 13.0 and ::InternalDoIf($hash,'PartyTime','STATE') eq "off" and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed" and ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'TVTime','state') eq "off" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') < 60 and ::InternalDoIf($hash,'TerrasseBeleuchtung','STATE') eq "on"
8 ::InternalDoIf($hash,'Haus','STATE') eq "absent" and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') > 1 and ::InternalDoIf($hash,'TerrassenTuer1','STATE') eq "closed"
9 ::InternalDoIf($hash,'Haus','STATE') eq "present" and ::ReadingValDoIf($hash,'LichtSensor','brightness') > 13.0 and ::ReadingValDoIf($hash,'TerrassenRollo','level','','d') < 99 and ::InternalDoIf($hash,'TVTime','STATE') eq "off"
days:
do:
0:
0 set TerrassenRollo 0
1:
0 set TerrassenRollo 0
10:
0 set TerrassenRollo 99
11:
0 set TerrassenRollo 99
12:
0 set TerrassenRollo 60
13:
2:
0 set TerrassenRollo 0
3:
0 set TerrassenRollo 0
4:
0 set TerrassenRollo 20
5:
0 set TerrassenRollo 60
6:
0 set TerrassenRollo 60
7:
0 set TerrassenRollo 60
8:
0 set TerrassenRollo 0
9:
0 set TerrassenRollo 99
helper:
DEVFILTER ^global$|^TerrassenTuer1$|^PartyTime$|^Haus$|^Tageslicht_indoor$|^TerrassenTuer2$|^LichtSensor$|^TVTime$|^TerrasseBeleuchtung$
NOTIFYDEV global|TerrassenTuer1|PartyTime|Haus|Tageslicht_indoor|TerrassenTuer2|LichtSensor|TVTime|TerrasseBeleuchtung
event brightness: 111.12,B: 111.12
globalinit 1
last_timer 4
sleeptimer -1
timerdev LichtSensor
timerevent brightness: 71.27,B: 71.27
triggerDev LichtSensor
timerevents:
brightness: 71.27
B: 71.27
timereventsState:
brightness: 71.27
state: B: 71.27
triggerEvents:
brightness: 111.12
B: 111.12
triggerEventsState:
brightness: 111.12
state: B: 111.12
internals:
all Haus:STATE DominicHandy:STATE PartyTime:STATE TerrassenTuer2:STATE TerrassenTuer1:STATE TerrasseBeleuchtung:STATE TVTime:STATE Tageslicht_indoor:STATE
interval:
0 -1
1 0
2 -1
3 2
intervalfunc:
localtime:
0 1608671700
1 1608703200
2 1608671700
3 1608703200
readings:
all TVTime:state LichtSensor:brightness
realtime:
0 22:15:00
1 07:00:00
2 22:15:00
3 07:00:00
time:
0 22:15:00
1 07:00:00
2 22:15:00
3 07:00:00
timeCond:
0 1
1 1
2 2
3 2
timer:
0 0
1 0
2 0
3 0
timers:
2 2 3
trigger:
triggertime:
1608671700:
localtime 1608671700
hash:
1608703200:
localtime 1608703200
hash:
uiState:
uiTable:
Attributes:
do always
room DOIF
wait 0:300:0:0:0:0:0:0:0:0:0
Das ist jetzt die genaue Umkehrung.
Also wenn er auf Null steht soll er nicht automatisch hochfahren? Dann frag das auch so ab!
Du fragst jetzt ab wenn er kleiner 99 ist soll er hochfahren, dass ist ja praktisch immer :)
Naja es ist etwas komplizierter...
Er soll ja schon hoch fahren wenn er auf null steht und es die anderen Fälle eintreffen, ABER er soll es nicht tun wenn ICH Manuell mit dem Rolladentaster das Rollo runtergefahren habe, dann soll er immer zu bleiben, egal wie der Lichtsensor oder sonstiges in diesem DOIF triggern.
Wenn ich es dann Manuell wieder hochgefahren habe soll das DOIF dann wieder automatisch seinen Dienst tun.
Ich befürchte ich werde mir einen zusätzlichen dummy einbauen müssen....Also eine Dummy on/off, wenn dieser auf ON steht wird das DOIF Deaktiviert...Ist vielleicht einfacher...
Du verstehst irgendwie das Prinzip nicht. Manuell kannst Du quasi alles machen, aber es ist unwahrscheinlich das Du z.B. 99 oder 1 per Hand triffst!
Also musst Du für Deine Automatik on = 99 und off = 1 setzen! Und das in Deiner Automatik abfragen.
Bedeutet: Du kannst damit nicht abfragen ob Du per Hand gesteuert hast, aber Du kannst abfragen ob per Automatik gesteuert wurde!
Du kannst auch abfragen ob 0 ist, wenn Du das nicht in der Automatik verwendest, kann es nur per Hand gewesen sein.
[?TerrassenRollo:level:d] != 0
Und im DOIF statt set ... 0 (set TerrassenRollo 1) und in der Abfrage statt > 1 [?TerrassenRollo:level:d] != 100