FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: einfach am 20 Juli 2019, 23:04:49

Titel: Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 20 Juli 2019, 23:04:49
Hallo,
ich habe leider nix passendes gefunden, bzw. ich kriege das mit meinen flachen Kenntnissen nicht hin.
Hoffentlich nutze ich das Forum richtig.


Folgender Aufbau:
2 einzeln schaltbare Leuchten (L1 und L2)
ein Doppeltaster (433mhz) an der Wand und je ein Einfach- Taster (433mhz) rechts und links neben dem Bett, eine Bridge.
(alles geflashte Sonoff-Geräte)

Die Leuchten werden von der Wand aus einzeln mit toggle angesprochen.

Vom Bett aus soll das so gehen:
Wenn Code an Lampe geschickt wird soll geprüft werden, ob beide Leuchten den selben Status (on oder off) haben.
Ist der Status gleich, wird der toggle-Befehl ausgegeben, ist er ungleich werden beide Leuchten auf aus gesetzt.

Zitatdefmod Bridge_DOIF_1 DOIF
([Bridge:"^RfReceived_Data:.123456$"] and [MQTT2_L1] eq  [MQTT2_L2]) (@Otto123 danke für den Hinbweis ;D)
(set MQTT2_L1 toggle);
(set MQTT2_L2 toggle)
DOELSEIF
(set (set MQTT2_L1 off);
(set (set MQTT2_L2 off)

Irgendwie funktioniert das aber gar nicht.
Was mache ich falsch? Mag mir jemand helfen?

Bei

Zitatdefmod Bridge_DOIF_1 DOIF ([Bridge:"^RfReceived_Data:.123456$"]) \
(set MQTT2_L1 toggle;;
set MQTT2_L2 toggle)

erreiche ich erst nach dem Drücken eines anderen Tasters und dann wieder des eigentlichen Tasters einen Toggle.

Ich krieg echt nen Knoten im Kopf.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Otto123 am 20 Juli 2019, 23:59:31
Das sollte immer wahr sein:
[MQTT2_L1] eq  [MQTT2_L1]
:-[
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 21 Juli 2019, 11:18:19
Wen ich die Bedingung  [MQTT2_L1] eq  [MQTT2_L2] stelle, vergleicht er dann die Schaltzustände oder noch mehr oder was anderes? Wie müsste ich das schreiben, damit er den Schaltstatus von L1 mit dem Schaltstatus von L2 vergleicht?
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 21 Juli 2019, 16:10:06
defmod doif_Test_L DOIF ([du_Taster_L:"on"] and [du_L1] eq "on" and [du_L2] eq "on")(set du_L.* off) DOELSEIF\
([du_Taster_L:"on"] and [du_L1] eq "off" and [du_L2] eq "off")(set du_L.* on) DOELSEIF\
(([du_Taster_L:"on"]) and ([du_L1] eq "on" or [du_L2] eq "on"))(set du_L.*:FILTER=state=off on)\

attr doif_Test_L do always
attr doif_Test_L room Test


So in der Art könnte mans, ohne toggle, angehen.
Geht mit Sicherheit auch raffinierter.

Gruß

Thomas
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 21 Juli 2019, 19:26:06
Hmm, TomLee, da steige nicht ganz hinter.
Ich habe das jetzt so interpretiert:

[Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on"
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT on)
(set MQTT2_SchlafZiDeckenlichtRe on)


funktioniert leider nicht.


Zitatdefmod doif_Test_L DOIF ([du_Taster_L:"on"] and [du_L1] eq "on" and [du_L2] eq "on")(set du_L.* off) DOELSEIF\
([du_Taster_L:"on"] and [du_L1] eq "off" and [du_L2] eq "off")(set du_L.* on) DOELSEIF\
(([du_Taster_L:"on"]) and ([du_L1] eq "on" or [du_L2] eq "on"))(set du_L.*:FILTER=state=off on)\

Du hast die L1 und L2 ind du_L1 du_L2 umbenannt, um das bei dir zu testen?
Das mit dem (set du_L.*:FILTER=state=off on) macht was?
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 21 Juli 2019, 19:43:40
set du_L.*:FILTER=state=off on
Das schaltet alle Devices "on", wovon der Name mit "du_L" anfängt, und die "off" sind.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 21 Juli 2019, 19:49:05
Zitat von: einfach am 21 Juli 2019, 19:26:06
Hmm, TomLee, da steige nicht ganz hinter.
Ich habe das jetzt so interpretiert:

[Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on"
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT on)
(set MQTT2_SchlafZiDeckenlichtRe on)

Bei der erste Bedingung fehlen die Klammern
Die 4. Bedingung ist gleich wie die 1.

Bitte code tags benutzen (das # Zeichen im Editor-Menü), und ein vollstäntiges "list" des DOIFs  und eines MQTT Devices posten. Das "list" vom DOIF am besten wenn es deiner Meinung nach "nich funktioniert" hat.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 21 Juli 2019, 19:53:07
ZitatDu hast die L1 und L2 ind du_L1 du_L2 umbenannt, um das bei dir zu testen?

Richtig, anbei die Definitionen der einfachen Dummys, falls dir das schwer fällt  :). Damit würd ich einfach mal" rumspielen", dann kommt Stück für Stück auch das Verständis bezüglich set du_L.*:FILTER=state=off on, hoff ich  :P

defmod du_L1 dummy
attr du_L1 room Test
attr du_L1 setList on off


defmod du_L2 dummy
attr du_L2 room Test
attr du_L2 setList on off


defmod du_Taster_L dummy
attr du_Taster_L room Test
attr du_Taster_L setList on off
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 21 Juli 2019, 20:50:06

([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on"
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT on)
(set MQTT2_SchlafZiDeckenlichtRe on)


ergibt leider

Bad regexp: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE [Bridge:"^RfReceived_Data:.1173A4$"]$/ at ./FHEM/91_notify.pm line 56.

TomLee
Bei deiner Lösung klappt das schon gar nicht schlecht, aber das sieht so umwegig aus, auch wenn das Resultat stimmt. Da wäre ich nie drauf gekommen.

defmod du_L1 dummy
attr du_L1 room Test
attr du_L1 setList on off

defmod du_L2 dummy
attr du_L2 room Test
attr du_L2 setList on off

defmod du_Taster_L dummy
attr du_Taster_L room Test
attr du_Taster_L setList on off

defmod doif_Test_L DOIF ([du_Taster_L:"on"] and [du_L1] eq "on" and [du_L2] eq "on")(set du_L.* off) DOELSEIF\
([du_Taster_L:"on"] and [du_L1] eq "off" and [du_L2] eq "off")(set du_L.* on) DOELSEIF\
(([du_Taster_L:"on"]) and ([du_L1] eq "on" or [du_L2] eq "on"))(set du_L.*:FILTER=state=on off)

defmod Bridge_notify_2 notify Bridge:RfReceived_Data:.1173A4 set du_Taster_L on


Wird jetzt das Signal empfangen wird bei ungleichem Zustand L1 und L2 auf aus gesetzt und beim nächsten mal beide an und dann beide auf aus gestellt.
ABER: in echt, im System gibt es ein erhebliches Problem mit dem Filter: Das System verlangsamt sich drastisch, bis fast nix mehr geht.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 21 Juli 2019, 21:36:17
Zitat von: einfach am 21 Juli 2019, 20:50:06

([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on"
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)


Es fehlt immer noch ein Klammer (am Ende der Bedingung)
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 21 Juli 2019, 22:03:26
ZitatWird jetzt das Signal empfangen wird bei ungleichem Zustand L1 und L2 auf aus gesetzt und beim nächsten mal beide an und dann beide auf aus gestellt.

Zitat von: einfach am 21 Juli 2019, 20:50:06
(([du_Taster_L:"on"]) and ([du_L1] eq "on" or [du_L2] eq "on"))(set du_L.*:FILTER=state=on off)

Das hast du daraus gemacht.  ;D
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 21 Juli 2019, 22:10:19
@TomLee
ja, damit der Schalter lieber erst das Licht aus macht und nicht erst noch die zweite Lampe an.
Im Dummymodel geht das wunderbar, mit den Aktoren geht der Raspi auf Volllast.

@Amenomade

([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)

DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "on")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT off)
(set MQTT2_SchlafZiDeckenlichtRe off)
DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off" and [MQTT2_SchlafZiDeckenlichtRe] eq "off")
(set MQTT2_SchlafZiDeckenlichtLiLfT on)
(set MQTT2_SchlafZiDeckenlichtRe on)}


ergit immer diesen Fehler
Bad regexp: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE [Bridge:"^RfReceived_Data:.1173A4$"]$/ at ./FHEM/91_notify.pm line 56.
und ich kann es dann nicht so eintragen.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 21 Juli 2019, 22:25:51
Wann kommt der Fehler? Beim Speichern der Definition , oder beim Schalten des Bridges?

"und ich kann es dann nicht so eintragen." Bei mir kann ich das problemlos eintragen (bis auf das } am Ende)

Wie trägst Du das ein?
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 21 Juli 2019, 22:30:33
Im Dummymodel geht das wunderbar, mit den Aktoren geht der Raspi auf Volllast.

Ohne list (https://forum.fhem.de/index.php/topic,71806.msg633579.html#msg633579) der Definition mit Aktoren ein Ratespiel.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 21 Juli 2019, 22:40:47
Zitat von: TomLee am 21 Juli 2019, 22:30:33
Im Dummymodel geht das wunderbar, mit den Aktoren geht der Raspi auf Volllast.

Ohne list (https://forum.fhem.de/index.php/topic,71806.msg633579.html#msg633579) der Definition mit Aktoren ein Ratespiel.
Und wenn direkt in fhem.cfg editiert, noch mehr ein Ratespiel. Das könnte die Fehlermeldung bei Änderung des DOIFs (der Fehler deutet auf dem notify Modul!!) so wohl auch den Volllast erklären...
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 22 Juli 2019, 09:52:03
@amenomade

die Fehlermeldung bekomme ich, wenn ich versuche die Änderung ganz normal auf der Geräte-Website, mit dem dortigen UI zu übernehmen. Direkt in der fhem.cfg mache ich nix.

@TomLee

Internals:
   DEF        ([du_Taster_L:"on"] and [MQTT2_SchlafZiDeckenlichtRe] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on")(set MQTT2_SchlafZiDeckenlicht.* off) DOELSEIF
([du_Taster_L:"on"] and [MQTT2_SchlafZiDeckenlichtRe] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off")(set du_L.* on) DOELSEIF
(([du_Taster_L:"on"]) and ([MQTT2_SchlafZiDeckenlichtRe] eq "on" or [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on"))(set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on)
   FUUID      5d34b4ad-f33f-d1e3-2775-a3f59439329f3d55
   MODEL      FHEM
   NAME       DOIF_Decider_SchlafZiDeLi
   NR         150
   NTFY_ORDER 50-DOIF_Decider_SchlafZiDeLi
   STATE      disabled
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   READINGS:
     2019-07-21 22:16:09   Device          MQTT2_SchlafZiDeckenlichtLiLfT
     2019-07-21 22:15:31   cmd             0
     2019-07-21 22:16:09   e_MQTT2_SchlafZiDeckenlichtLiLfT_STATE 61.5 %LF
23.3 °C <br>
off
Online
     2019-07-21 22:15:54   e_du_Taster_L_events on
     2019-07-21 22:16:20   last_cmd        initialized
     2019-07-21 22:16:20   mode            disabled
     2019-07-21 22:16:20   state           disabled
   Regex:
     accu:
   condition:
     0          ::EventDoIf('du_Taster_L',$hash,'on',1) and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "on" and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "on"
     1          ::EventDoIf('du_Taster_L',$hash,'on',1) and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "off" and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "off"
     2          (::EventDoIf('du_Taster_L',$hash,'on',1)) and (::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "on" or ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "on")
   devices:
     0           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     1           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     2           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     all         du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
   do:
     0:
       0          set MQTT2_SchlafZiDeckenlicht.* off
     1:
       0          set du_L.* on
     2:
       0          set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on
     3:
   helper:
     event      LWT: Online
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev MQTT2_SchlafZiDeckenlichtLiLfT
     triggerEvents:
       LWT: Online
     triggerEventsState:
       LWT: Online
   internals:
     0           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     1           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     2           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     all         MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
   itimer:
   readings:
   trigger:
     all         du_Taster_L
   uiState:
   uiTable:
Attributes:
   room       SchlafZi,SchlafZi-Logik
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 22 Juli 2019, 10:02:16
Zitat von: einfach am 22 Juli 2019, 09:52:03

Internals:
   DEF        ([du_Taster_L:"on"] and [MQTT2_SchlafZiDeckenlichtRe] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on")(set MQTT2_SchlafZiDeckenlicht.* off) DOELSEIF
([du_Taster_L:"on"] and [MQTT2_SchlafZiDeckenlichtRe] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off")(set du_L.* on) DOELSEIF
(([du_Taster_L:"on"]) and ([MQTT2_SchlafZiDeckenlichtRe] eq "on" or [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on"))(set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on)
   FUUID      5d34b4ad-f33f-d1e3-2775-a3f59439329f3d55
   MODEL      FHEM
   NAME       DOIF_Decider_SchlafZiDeLi
   NR         150
   NTFY_ORDER 50-DOIF_Decider_SchlafZiDeLi
   STATE      disabled
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   READINGS:
     2019-07-21 22:16:09   Device          MQTT2_SchlafZiDeckenlichtLiLfT
     2019-07-21 22:15:31   cmd             0
     2019-07-21 22:16:09   e_MQTT2_SchlafZiDeckenlichtLiLfT_STATE 61.5 %LF
23.3 °C <br>
off
Online
     2019-07-21 22:15:54   e_du_Taster_L_events on
     2019-07-21 22:16:20   last_cmd        initialized
     2019-07-21 22:16:20   mode            disabled
     2019-07-21 22:16:20   state           disabled
   Regex:
     accu:
   condition:
     0          ::EventDoIf('du_Taster_L',$hash,'on',1) and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "on" and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "on"
     1          ::EventDoIf('du_Taster_L',$hash,'on',1) and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "off" and ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "off"
     2          (::EventDoIf('du_Taster_L',$hash,'on',1)) and (::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtRe','STATE') eq "on" or ::InternalDoIf($hash,'MQTT2_SchlafZiDeckenlichtLiLfT','STATE') eq "on")
   devices:
     0           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     1           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     2           du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
     all         du_Taster_L MQTT2_SchlafZiDeckenlichtRe MQTT2_SchlafZiDeckenlichtLiLfT
   do:
     0:
       0          set MQTT2_SchlafZiDeckenlicht.* off
     1:
       0          set du_L.* on
     2:
       0          set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on
     3:
   helper:
     event      LWT: Online
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev MQTT2_SchlafZiDeckenlichtLiLfT
     triggerEvents:
       LWT: Online
     triggerEventsState:
       LWT: Online
   internals:
     0           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     1           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     2           MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
     all         MQTT2_SchlafZiDeckenlichtRe:STATE MQTT2_SchlafZiDeckenlichtLiLfT:STATE
   itimer:
   readings:
   trigger:
     all         du_Taster_L
   uiState:
   uiTable:
Attributes:
   room       SchlafZi,SchlafZi-Logik

Mit dem Problem hat das aber denk ich weniger zu tun.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 22 Juli 2019, 11:28:49
Schließ doch einfach mal das notify als mögliche Fehlerursache (Volllast) aus:

([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtRe] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on")(set MQTT2_SchlafZiDeckenlicht.* off) DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtRe] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off")(set MQTT2_SchlafZiDeckenlicht.* on) DOELSEIF
(([Bridge:"^RfReceived_Data:.1173A4$"]) and ([MQTT2_SchlafZiDeckenlichtRe] eq "on" or [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on"))(set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on)
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 22 Juli 2019, 12:30:53
Zitat von: TomLee am 21 Juli 2019, 16:10:06
Geht mit Sicherheit auch raffinierter.

Zitat von: einfach am 21 Juli 2019, 20:50:06
Bei deiner Lösung klappt das schon gar nicht schlecht, aber das sieht so umwegig aus, auch wenn das Resultat stimmt. Da wäre ich nie drauf gekommen.

Jetzt beschäftige ich mich wegen dir tiefer mit DOIF dabei sollte ich mehr Zeit in das Verständnis von notify stecken  ;D

Etwas kürzer/eleganter:

defmod doif_Test2_L DOIF
([du_Taster_L:"on"] and [#"^du_L":state:"on"] == 2)(set du_L.* off) DOELSEIF\
([du_Taster_L:"on"] and [#"^du_L":state:"off"] == 2)(set du_L.* on) DOELSEIF\
([du_Taster_L:"on"] and [#"^du_L":state:"on"] == 1)(set du_L.*:FILTER=state=off on)\

attr doif_Test2_L do always
attr doif_Test2_L room Test

Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 22 Juli 2019, 13:05:19
@TomLee
ZitatSchließ doch einfach mal das notify als mögliche Fehlerursache (Volllast) aus:

Code: [Auswählen]

([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtRe] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on")(set MQTT2_SchlafZiDeckenlicht.* off) DOELSEIF
([Bridge:"^RfReceived_Data:.1173A4$"] and [MQTT2_SchlafZiDeckenlichtRe] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT] eq "off")(set MQTT2_SchlafZiDeckenlicht.* on) DOELSEIF
(([Bridge:"^RfReceived_Data:.1173A4$"]) and ([MQTT2_SchlafZiDeckenlichtRe] eq "on" or [MQTT2_SchlafZiDeckenlichtLiLfT] eq "on"))(set MQTT2_SchlafZiDeckenlicht.*:FILTER=state=off on)


ergibt diese Fehlermeldung

set MQTT2_SchlafZiDeckenlicht.* off: Unknown argument off, choose one of attrTemplate:?,0_00_General_Info,A_00_MQTT2_CLIENT_general_bridge,A_01_tasmota_basic,A_01a_tasmota_basic_state_power1,A_01b_tasmota_1ch+motion+SI7021,A_01c_tasmota_POW,A_01d_tasmota_ir,A_01d_tasmota_rf,A_01x_tasmota_clear_readings_reset_readingsList_and_reboot,A_01z_tasmota_set_lowercase_texts_and_state1,A_01z_tasmota_set_power1_state_to_power,A_01z_tasmota_set_uppercase_texts_and_state1,A_02_tasmota_2channel_split,A_02a_tasmota_2ch_unified,A_02b_tasmota_2ch_shutter_invert_0,A_02b_tasmota_2ch_shutter_invert_1,A_04a_tasmota_4ch_unified_basic_text,A_04b_tasmota_4ch_unified_icon,A_05a_tasmota_rgb_led_controller,A_10_shelly1,E_01a_eBus_daemon_splitter,L_01_zigbee2mqtt_bridge,X_01_esp_milight_hub_bridge
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 22 Juli 2019, 13:17:21
folglich fehlt ein list auch dann von dem Device.

Ins Blaue, ist es eventuell ein OFF.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 22 Juli 2019, 19:56:59
Zitat von: einfach am 22 Juli 2019, 09:52:03
@amenomade

die Fehlermeldung bekomme ich, wenn ich versuche die Änderung ganz normal auf der Geräte-Website, mit dem dortigen UI zu übernehmen. Direkt in der fhem.cfg mache ich nix.

Ehrlich gesagt... ich weiss nicht, was Du machst, aber es ist total unmöglich, dass bei einer Änderung eines DOIFs, eine Fehlermeldung aus dem notify Modul kommt. Ist es ein notify oder ein DOIF ??????

Ich weiss nicht. Zeig vielleicht Bildschirmkopien von deiner Vorgehensweise...
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 23 Juli 2019, 09:08:20
Es kommt ja auch nicht aus dem Notify, sondern beim Versuch Änderung des DOIFs.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Otto123 am 23 Juli 2019, 09:57:59
Dann vermute ich Du hast ein notify was auf "alles" triggert? Schau mal bitte nach:
list TYPE=notify REGEXP

Gruß Otto
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Damian am 23 Juli 2019, 09:58:30
ZitatBad regexp: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE [Bridge:"^RfReceived_Data:.1173A4$"]$/ at ./FHEM/91_notify.pm line 56.

ist definitiv eine Meldung des Moduls notify. Schau dir mal alle deine notify-Definitionen an, dann wirst du bestimmt eine finden.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 23 Juli 2019, 15:16:42
So, diese Konstellation läuft, aber es wäre mir lieber, wenn das weniger Gerätedefinitionen wären.
Vielen Dank für eure Hinweise und Hilfestellungen!

Das Zentralmodul, dass zwei Notifys steuert (aktiviert, bzw. deaktiviert)

defmod doif_SchlaZi_notifywahl DOIF ([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "on") \
(set SchlafZiDeLi_gleich active, \
set SchlafZiDeLi_ungleich inactive)\
DOELSEIF\
([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "off") \
(set SchlafZiDeLi_gleich active,\
set SchlafZiDeLi_ungleich inactive)\
DOELSE\
([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "on") \
(set SchlafZiDeLi_gleich inactive, \
set SchlafZiDeLi_ungleich active)\
DOELSE \
([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "off") \
(set SchlafZiDeLi_gleich inactive,\
set SchlafZiDeLi_ungleich active)
attr doif_SchlaZi_notifywahl do always
attr doif_SchlaZi_notifywahl room DOIF,SchlafZi-Logik


Dann die beiden Notifys, die den gleichen Signalcode für unterschiedliche Befehle als Auslöser haben.
Und dann eben die beiden Leuten, deren POWER1 ich abfragen lasse.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Otto123 am 23 Juli 2019, 16:48:25
Das DOELSE ist falsch! DOELSE hat keine Bedingung!

Aber es geht natürlich weil diese Abfragen zweimal ob der erste Teil nicht wahr war - ist überflüssig.
defmod doif_SchlaZi_notifywahl DOIF ([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "on" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "on") \
(set SchlafZiDeLi_gleich active, \
set SchlafZiDeLi_ungleich inactive)\
DOELSEIF\
([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq "off" and [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1] eq "off") \
(set SchlafZiDeLi_gleich active,\
set SchlafZiDeLi_ungleich inactive)\
DOELSE\
(set SchlafZiDeLi_gleich inactive, \
set SchlafZiDeLi_ungleich active)\

attr doif_SchlaZi_notifywahl do always
attr doif_SchlaZi_notifywahl room DOIF,SchlafZi-Logik
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 23 Juli 2019, 17:37:25
Ja, cool, das ist etwas kürzer und funktioniert! ;D

Aber auf das richtige Statusauslesen bin ich echt spät gekommen. Dieses List-Tool ist praktisch!
Auch, dass man Notifys einfach aktive oder inaktive setzen kann, macht die sache leichter.

Und dass die Befehle in eine Klammer durch ein Komma getrennt gehören ist mir dann auch aufgefallen.

DOELSE oder DOELSEIF nist mir noch nicht ganz so klar.
Auch wann man eq und ne, bzw. == verwendet, und das gegenteil von == sind mir etwas schleierhaft geblieben.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Otto123 am 23 Juli 2019, 18:53:19
DOELSEIF ist die Alternative mit einer Bedingung, davon kann es viele geben.
DOELSE ist einfach die letzte bedingungslose Alternative, wenn keine Bedingung vorher wahr war mach das. Maximal einmal am Ende!

Kurzfassung
eq und ne nimmst du bei "Strings" -> "on" "off" "0" "1"
== und != nimmst Du bei Zahlen -> 0 1 2 10
Langfassung
https://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

:D
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 23 Juli 2019, 19:26:02
Dankeschön!

Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 23 Juli 2019, 20:05:55
Ich verstehe die Notwendigkeit vom Umweg über 2 notify nicht ganz... aber gut... wenn es funktioniert! Never touch a running system ;)

Wenn @Damian noch hier mitliest: kann man nicht direkt 2 triggernde (oder mit "?" nicht triggernde) Readings vergleichen?
DOIF ([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1])
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: Damian am 23 Juli 2019, 22:55:21
Zitat von: amenomade am 23 Juli 2019, 20:05:55
Ich verstehe die Notwendigkeit vom Umweg über 2 notify nicht ganz... aber gut... wenn es funktioniert! Never touch a running system ;)

Wenn @Damian noch hier mitliest: kann man nicht direkt 2 triggernde (oder mit "?" nicht triggernde) Readings vergleichen?
DOIF ([MQTT2_SchlafZiDeckenlichtRe:POWER1] eq [MQTT2_SchlafZiDeckenlichtLiLfT:POWER1])

Natürlich kann man auch zwei Readings wie oben mit oder ohne Trigger miteinander vergleichen.
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: einfach am 24 Juli 2019, 08:55:41
ZitatIch verstehe die Notwendigkeit vom Umweg über 2 notify nicht ganz... aber gut... wenn es funktioniert! Never touch a running system ;)

Naja, wenn ich mit dem Notify Bedingungen nicht vernünftig abgefragt bekomme, mache ich mir einfach zwei Notifis die ich mit einem DOIF bei Bedingungserfüllung jeweils scharf schalte oder deaktiviere,
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: TomLee am 24 Juli 2019, 11:56:08
Zitat von: Damian am 23 Juli 2019, 22:55:21
Natürlich kann man auch zwei Readings wie oben mit oder ohne Trigger miteinander vergleichen.

Dazu hätte ich auch eine Verständnisfrage, nicht mehr, das DOIF macht was es soll.

Zitat von: commandrefIn der Bedingung und im Status reagiert sie auf Ereignistrigger. Das lässt sich durch ein vorangestelltes Fragezeichen unterbinden.

In meinem Beispiel (https://forum.fhem.de/index.php/topic,102407.msg960165.html#msg960165) vergleiche ich doch mit der Aggregationsfunktion ( bspw. [#"^du_L":state:"on"] ) zwei nicht triggernde Readings und würde erwarten das ich ein ? voranstellen muss, es funktioniert aber so.

Weiter bin ich irritiert von der Syntax, die entspricht hier doch jetzt der von Ereignissteuerung über Auswertung von Events ich mach doch aber nur eine vergleichende Abfrage.

Gruß

Thomas
Titel: Antw:Aktion abhängig vom Vergleich der Zustände zweier Aktoren
Beitrag von: amenomade am 24 Juli 2019, 12:14:03
Also, ich verstehe es so: die Aggregationsfunktion reagiert auf Ereignisse der zugehörigen Devices, sprich z.B. die Summe wird dann neu kalkuliert. Es ist aber grundsätzlich eine Zustandabfrage als Bedingung.
In deinem Beispiel funktioniert es, weil ein DOIF auf sich selbst nicht getriggert wird:
https://www.fhem.de/commandref_DE.html#DOIF_selftrigger
Zitat von: CommandRefStandardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst.