[Frage] DOIF Objekt soll nur triggern aber nicht abgefragt werden

Begonnen von rubinho, 16 April 2019, 10:56:00

Vorheriges Thema - Nächstes Thema

rubinho

Hallo Leute,

ich sehe wohl vor lauter Wald die Bäume nicht mehr.

Ich habe eine Anforderung wo verschiedene Bedingungen abgefragt werden sollen. Nun wollte ich noch ein Objekt hinzufügen, das nur bei Event triggert, jedoch ansonsten nicht abgefragt wird, oder einen fest definierten Defaultwert ausgibt.
Umgekehrt ist es ja einfach durch das "?" vor dem Objekt, nur ich benötige es genau andersrum.

Gibt es diese Möglichkeit ?

Um folgendes geht es....

Ich hab in meinem Bad einen Präsenzmelder und wenn dieser Präsenz meldet, oder das Licht im Bad an ist, soll das Radio angehen.
Das funktioniert soweit auch.
Nun möchte ich aber meinen Taster der Beleuchtung mit einbinden,der  bei der manuellen Betätigung auf Aus, nicht nur das Lich ausschaltet (Wenn es an ist), sondern auch das Radio)
Leider Funktioniert das aber nicht, solange die Präsenzmeldung noch aktiv ist. Sprich, das Radio läuft noch 2-3 Minuten nach.

Nun wollte ich den Taster als NOR (Nicht-Oder) einbinden, der nur bei Event des Tasters ausgewertet wird. Damit könnte ich beim verlassen des Bades das Radio ausschalten, trotz der aktiven Präsenz.

Gruß
Rubinho
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

rubinho

#2
Wenns weiter nichts ist :)

Bitteschön....


Internals:
   CFGFN      ./FHEM/Logic.cfg
   DEF        (([Bad_Presence_Day] eq "on" or [Zentral_Bad_Bel_Status] eq "on") and [5:30-23:59]) (set rpi_zero_mpd playlist radio-dvb) DOELSEIF (([Bad_Presence_Night] eq "on" or [Zentral_Bad_Bel_Status] eq "on") and [0:00-05:29]) (set rpi_zero_mpd volume 20,set rpi_zero_mpd playlist radio-dvb) DOELSE  (set rpi_zero_mpd stop,set rpi_zero_mpd volume 60)
   MODEL      FHEM
   NAME       radio_auto_on
   NR         801
   NTFY_ORDER 50-radio_auto_on
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2019-04-16 11:05:17   cmd             0
     2019-04-16 11:05:17   mode            enabled
     2019-04-16 11:05:17   state           initialized
     2019-04-16 11:05:17   timer_01_c01    17.04.2019 05:30:00
     2019-04-16 11:05:17   timer_02_c01    16.04.2019 23:59:00
     2019-04-16 11:05:17   timer_03_c02    17.04.2019 00:00:00
     2019-04-16 11:05:17   timer_04_c02    17.04.2019 05:29:00
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          (::InternalDoIf($hash,'Bad_Presence_Day','STATE') eq "on" or ::InternalDoIf($hash,'Zentral_Bad_Bel_Status','STATE') eq "on") and ::DOIF_time($hash,0,1,$wday,$hms)
     1          (::InternalDoIf($hash,'Bad_Presence_Night','STATE') eq "on" or ::InternalDoIf($hash,'Zentral_Bad_Bel_Status','STATE') eq "on") and ::DOIF_time($hash,2,3,$wday,$hms)
   days:
   devices:
     0           Bad_Presence_Day Zentral_Bad_Bel_Status
     1           Bad_Presence_Night Zentral_Bad_Bel_Status
     all         Bad_Presence_Day Zentral_Bad_Bel_Status Bad_Presence_Night
   do:
     0:
       0          set rpi_zero_mpd playlist radio-dvb
     1:
       0          set rpi_zero_mpd volume 20,set rpi_zero_mpd playlist radio-dvb
     2:
       0          set rpi_zero_mpd stop,set rpi_zero_mpd volume 60
   helper:
     globalinit 1
     last_timer 4
     sleeptimer -1
   internals:
     0           Bad_Presence_Day:STATE Zentral_Bad_Bel_Status:STATE
     1           Bad_Presence_Night:STATE Zentral_Bad_Bel_Status:STATE
     all         Bad_Presence_Day:STATE Zentral_Bad_Bel_Status:STATE Bad_Presence_Night:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1555471800
     1          1555451940
     2          1555452000
     3          1555471740
   realtime:
     0          05:30:00
     1          23:59:00
     2          00:00:00
     3          05:29:00
   time:
     0          5:30
     1          23:59:00
     2          0:00
     3          05:29:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   triggertime:
     1555451940:
       localtime  1555451940
       hash:
     1555452000:
       localtime  1555452000
       hash:
     1555471740:
       localtime  1555471740
       hash:
     1555471800:
       localtime  1555471800
       hash:
   uiState:
   uiTable:
Attributes:
   room       Bad,Logic


--Edit--

Hier das Objekt, dass noch dazukommen soll....

[KNX_0100020:getG1] eq "off"
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

rabehd

ZitatIch habe eine Anforderung wo verschiedene Bedingungen abgefragt werden sollen.
Das tust Du nicht.
[Bad_Presence_Day] , [Zentral_Bad_Bel_Status] und [Bad_Presence_Night]  triggern.

Mach Dir mal Gedanke welche Ereignisse das Einschalten und welche das Ausschalten des Radios auslösen sollen.
Ich würde erstmal auch die Zeiträume weglassen.

Zitatdas Licht im Bad an ist, soll das Radio angehen.
Vermutlich soll das Radio ausgehen, wenn das List ausgeht. Oder gibt es die situation das Du im Dunkeln im Bad Radio hörst?
Auch funktionierende Lösungen kann man hinterfragen.

rubinho

#4
Mein Bad hat ein Fenster, natürlich will ich Radio hören wenn das Licht aus ist, aus diesem Grund hab ich den Präsenzmelder drin.

Ansonsten wäre es Einfach mit dem Koppeln ans Licht wie ich es früher hatte.

Die Uhrzeiten habe ich deswegen drin, damit meine Frau Nachts keinen Hörsturz bekommt, wenn sie ins Bad geht.

Wie gesagt die Grundfunktion geht ja, ich möchte nur, dass das Radio, unabhängig davon ob mein Licht an ist oder auch nicht und unabhängig ob Präsenz getriggert wird oder auch nicht, aus geht. Aber beim nächsten betreten des Bads, soll alles nochmal automatisch an gehen.

Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Damian

Zitat von: rubinho am 16 April 2019, 11:38:38
Mein Bad hat ein Fenster, natürlich will ich Radio hören wenn das Licht aus ist, aus diesem Grund hab ich den Präsenzmelder drin.

Ansonsten wäre es Einfach mit dem Koppeln ans Licht wie ich es früher hatte.

Die Uhrzeiten habe ich deswegen drin, damit meine Frau Nachts keinen Hörsturz bekommt, wenn sie ins Bad geht.

Wie gesagt die Grundfunktion geht ja, ich möchte nur, dass das Radio, unabhängig davon ob mein Licht an ist oder auch nicht und unabhängig ob Präsenz getriggert wird oder auch nicht, aus geht. Aber beim nächsten betreten des Bads, soll alles nochmal automatisch an gehen.

Ich denke, du möchtest nur Events abfragen und keine Zustände:

[Bad_Presence_Day:"on"] or ....

Eine Eventabfrage ist nur wahr oder falsch, wahr ist sie nur im Augenblick des Triggers.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rubinho

Irgendwie drücke ich mich falsch aus...

Nein, ich möchte nur die Events von meinem Taster, den ich in das DOIF einbauen will.
Der Taster darf aber nicht abgefragt werden, wenn ein anderer Trigger auslöst.

Der Taster ist aber noch nicht drin in dem DOIF

Das DOIF, das ich euch aufgelistet habe, funktioniert so wie es ist, ich möchte aber den Taster dazu haben.

Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Otto123

Hi,

wenn ich Dich richtig verstehe, würde ich zu Damians Vorschlag dann den hier
ZitatNun möchte ich aber meinen Taster der Beleuchtung mit einbinden,der  bei der manuellen Betätigung auf Aus, nicht nur das Lich ausschaltet (Wenn es an ist), sondern auch das Radio)
in einem DOELSEIF Zweig einbinden und keinen DOELSE Zweig machen.

Edit:
ZitatNein, ich möchte nur die Events von meinem Taster, den ich in das DOIF einbauen will.
Das ist aber Damians Vorschlag: Nur Event Abfragen und keinen Zustand.

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

rubinho

Zitat von: Damian am 16 April 2019, 11:46:14
[Bad_Presence_Day:"on"] or ....

Eine Eventabfrage ist nur wahr oder falsch, wahr ist sie nur im Augenblick des Triggers.

Ok, es hat etwas länger gedauert bis ich der Meinung war, es verstanden zu haben.

Wenn diese Eventabfrage nur den Trigger auslöst und das nur mit Wahr bzw. Unwahr, bringt mir das in dem Fall wohl nichts.
Ich dachte, es könnte in diesem Fall auch der Wert angegeben werden. Aber das war wohl von mir falsch interpretiert.
Dann muss ich mir wohl irgendwas anderes überlegen.

Trotzdem danke
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Otto123

Bist Du sicher, dass Du es verstanden hast?  :-[ Ich glaube nicht

[Bad_Presence_Day:"on"] ist wahr, wenn der Event on vom Bad_Presence_Day kommt und nicht wenn irgendetwas vom Gerät Bad_Presence_Day kommt und auch nicht wenn irgendetwas anderes das DOIF triggert.
Das ist also der gleiche Event, den Du mit [Bad_Presence_Day] eq "on" abfragst. Nur ohne Abfrage und damit unwirksam wenn ein Event von Zentral_Bad_Bel_Status kommt.

Am besten Du machst mal den Eventmonitor auf, baust ein Beispiel und schaust Dir beide Varianten an.

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

Ellert

#10
Zitat von: rubinho am 16 April 2019, 18:26:27
Ok, es hat etwas länger gedauert bis ich der Meinung war, es verstanden zu haben.

Wenn diese Eventabfrage nur den Trigger auslöst und das nur mit Wahr bzw. Unwahr, bringt mir das in dem Fall wohl nichts.
Ich dachte, es könnte in diesem Fall auch der Wert angegeben werden. Aber das war wohl von mir falsch interpretiert.
Dann muss ich mir wohl irgendwas anderes überlegen.

Trotzdem danke
Es können die aktuellen Werte oder ein Defaultwert zurückgegeben werden, ich spare mir die Nacherzählung und zitiere die deutschsprachige Befehlsreferenz
ZitatPerl-Modus:
define di_warning DOIF {if ([":^temperature",0]< 0) {fhem_set"pushmsg danger of frost $DEVICE}}

Damit wird auf alle Devices getriggert, die mit "temperature" im Event beginnen. Zurückgeliefert wird der Wert, der im Event hinter "temperature: " steht. Wenn kein Event stattfindet, wird der Defaultwert, hier 0, zurückgeliefert.
Ebenfalls kann ein Ereignisfilter mit Ausgabeformatierung angegeben werden.

Syntax:

["regex for trigger":"<regex filter>":<output>,<default value>]

Regex-Filter- und Output-Parameter sind optional. Der Default-Wert ist verpflichtend.

Die Angaben zum Filter und Output funktionieren, wie die beim Reading-Filter. Siehe: Filtern nach Ausdrücken mit Ausgabeformatierung

Wenn kein Filter, wie obigen Beispiel, angegeben wird, so wird intern folgende Regex vorbelegt: "[^\:]*: (.*)" Damit wird der Wert hinter der Readingangabe genommen. Durch eigene Regex-Filter-Angaben kann man beliebige Teile des Events herausfiltern, ggf. über Output formatieren und in der Bedingung entsprechend auswerten, ohne auf Readings zurückgreifen zu müssen.
Das Beispiel ist für den Perlmode, die Erklärung auch für den FHEM-Mode

rubinho

Danke nochmal für die Mühe, aber ich habs mir jetzt einfach gemacht und einen Notify geschrieben.

Damit hab ich zwar ein zusätzliches Objekt aber es funktioniert.

define radio_off notify KNX_0100020:getG1:.off set rpi_zero_mpd stop

Gruß
Rubinho
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Otto123

Moin rubinho,

ich glaub jetzt hast Du es  ;)
Wenn Du jetzt diesen Event in einen DOELSEIF Zweig packst, hast Du es wieder in einem Device.  :D
DOELSEIF ([KNX_0100020:"getG1:.off"])(set rpi_zero_mpd stop)

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

rubinho

Zitat von: Otto123 am 17 April 2019, 09:39:46
Moin rubinho,

ich glaub jetzt hast Du es  ;)

Gruß Otto

Stimmt  ;D

So klappts auch, danke  :)
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP