FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: misux am 24 März 2020, 10:52:23

Titel: DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: misux am 24 März 2020, 10:52:23
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!
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: MadMax-FHEM am 24 März 2020, 11:24:56
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
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag 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
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag 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..

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...  :-\
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: misux am 24 März 2020, 11:55:05
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!
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: Otto123 am 24 März 2020, 11:57:00
Ich nutze auch HM Aktoren :) glaub mir - das geht :)
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: MadMax-FHEM am 24 März 2020, 13:31:09
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
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: moonsorrox am 28 März 2020, 18:36:58
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.?
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag 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
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: moonsorrox am 28 März 2020, 18:51:00
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
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: misux am 22 Dezember 2020, 13:37:48
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

Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: Otto123 am 22 Dezember 2020, 13:44:24
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 :)
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: misux am 22 Dezember 2020, 18:09:07
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...
Titel: Antw:DOIF unterbinden bei manueller Tasterbedienung?
Beitrag von: Otto123 am 22 Dezember 2020, 18:58:14
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