FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: mindkicker am 07 Dezember 2022, 22:08:51

Titel: [gelöst] DOIF mit Funkschalter
Beitrag von: mindkicker am 07 Dezember 2022, 22:08:51
Nun ist es soweit dass auch ich mal Euer Schwarmwissen benötige. Ich habe mir im Baumarkt einen 2-Kanal Funktaster (Schalter_Kueche) gekauft, welchen ich per MQTT eingebunden habe um damit zwei verschiedene Lampen (Unterbauleuchte und Wandlicht_Kueche)in der Küche zu schalten. Die beiden Readings status und unit kommen am Device an und je nachdem bei Kanal 1 auf ON oder OFF gedrückt wurde ändert sich der Wert bei status auf ON oder OFF und unit auf 1. Das Gleiche bei Kanal 2 - ON/OFF und unit auf 2.

Nun kommt das DOIF mit dem Problem

define di_unterbaulicht DOIF ([Schalter_Kueche:unit] eq "1" and [Schalter_Kueche:status] eq "ON") (set Unterbauleuchte on) DOELSEIF ([Schalter_Kueche:unit] eq "1" and [Schalter_Kueche:status] eq "OFF") (set Unterbauleuchte off)
attr di_unterbaulicht room System

define di_wandlicht DOIF ([Schalter_Kueche:unit] eq "2" and [Schalter_Kueche:status] eq "ON") (set Wandlicht_Kueche on) DOELSEIF ([Schalter_Kueche:unit] eq "2" and [Schalter_Kueche:status] eq "OFF") (set Wandlicht_Kueche off)
attr di_wandlicht room System


Nun mein Dilemma:
Schalte ich Kanal 1 auf ON (Unterbauleuchte) funktioniert alles normal - also ON = Unterbauleuchte geht an; OFF = Unterbauleuchte geht aus. Schalte ich Kanal 2 auf ON (Wandlicht_Kueche) dann geht jedesmal auch die Unterbauleuchte mit an - was sie nicht soll. Schalte ich OFF geht nur das Wandlicht_Kueche aus.

Ich hatte auch schon den Effekt dass sich Wandleuchte ohne Probleme schalten ließ und diese sich aber beim Schalten von Unterbauleuchte mit einschaltete.
Dass ich DOELSEIF auch mit einem einfachen DOELSE schreiben könnte ist mir bekannt - es war mein Versuch durch zwei zusätzliche Bedingungen das Problem zu lösen. Funktioniert aber nicht.  :'(
Ich verstehe es nicht bzw. weiß nicht mehr weiter.
Titel: Antw:DOIF mit Funkschalter
Beitrag von: Per am 07 Dezember 2022, 23:43:25
Die beiden Ereignisse kommen wahrscheinlich nicht gleichzeitig an, das kann man im Eventmonitor ansehen. Triggern tun bei dir aber beide. Schau mal nach der Reihenfolge, die Abfrage für das zeitlich erste ergänzt du mit einem Fragezeichen, so triggert es nicht mehr.
Titel: Antw:DOIF mit Funkschalter
Beitrag von: mindkicker am 08 Dezember 2022, 08:52:22
Die Ausgabe im Event-Monitor sieht so aus


2022-12-08 08:49:46 DOIF di_unterbaulicht cmd_event: Schalter_Kueche
2022-12-08 08:49:46 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:46 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:46 DOIF di_wandlicht cmd_event: Schalter_Kueche
2022-12-08 08:49:46 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:47 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:48 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 08:49:49 MQTT_DEVICE Schalter_Kueche unit: 2


Wie meinst Du das mit dem Fragezeichen?
Titel: Antw:DOIF mit Funkschalter
Beitrag von: Per am 08 Dezember 2022, 11:51:31
Ist das von einmal drücken? Und was ist mit dem anderen Schalter? Und mit off?

Fragezeichen in der Abfrage, siehe auch commandref, dass auf das Ereignis nicht getriggert wird, sondern es beim Auftreten eines anderen, zutreffenden Ereignis nur verglichen wird.
Titel: Antw:DOIF mit Funkschalter
Beitrag von: mindkicker am 08 Dezember 2022, 22:19:11
Also bei Kanal  1 OFF

2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:29 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:30 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:31 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:01:32 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:32 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:01:32 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:01:32 MQTT_DEVICE Schalter_Kueche unit: 1


bei Kanal 2 OFF

2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:39 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:40 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche status: OFF
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:02:41 MQTT_DEVICE Schalter_Kueche unit: 2


bei Kanal 1 ON ... und wenn ich das richtig interpretiere reagiert hier das DOIF di_unterbaulicht, aber hier geht auch das Wandlicht_Kueche mit an - was es ja nicht soll

2022-12-08 22:03:43 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:43 DOIF di_wandlicht cmd_event: Schalter_Kueche
2022-12-08 22:03:43 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:43 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:43 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 DOIF di_unterbaulicht cmd_event: Schalter_Kueche
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:44 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:45 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche unit: 1
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:03:46 MQTT_DEVICE Schalter_Kueche unit: 1


bei Kanal 2 ON funktioniert alles korrekt

2022-12-08 22:07:02 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:03 DOIF di_wandlicht cmd_event: Schalter_Kueche
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:03 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:04 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche unit: 2
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche status: ON
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche transmission-state: incoming publish received
2022-12-08 22:07:05 MQTT_DEVICE Schalter_Kueche unit: 2


Das mit den Fragezeichen habe ich probiert in den verschiedensten Konstellationen z.B.

define di_wandlicht DOIF ([?Schalter_Kueche:unit] eq "2" and ...

allerdings bringt das nichts und ich finde in der commandoref auch keinerlei Hinweise auf diese Funktion überhaupt bzw. deren Sinn. Liegt vielleicht auch daran dass ich gar nicht weiß nach was ich suchen soll.

Habe ich eventuell im Device das Schalters einen Fehler drin?

define Schalter_Kueche MQTT_DEVICE
setuuid Schalter_Kueche 6387a8c8-f33f-034c-596d-f9013032d8db3b4a
attr Schalter_Kueche IODev myBroker
attr Schalter_Kueche autoSubscribeReadings rtl_433/homebase2/devices/Nexa-Security/3/35883008/
attr Schalter_Kueche genericDeviceType Switch
attr Schalter_Kueche icon tradfri_dimmerswitch
attr Schalter_Kueche room Küche
attr Schalter_Kueche stateFormat status
attr Schalter_Kueche subscribeReading_status rtl_433/homebase2/devices/Nexa-Security/3/35883008/state
attr Schalter_Kueche subscribeReading_unit rtl_433/homebase2/devices/Nexa-Security/3/35883008/unit


Wie gesagt ich bin mit meinem Latein am Ende
Titel: Antw:DOIF mit Funkschalter
Beitrag von: Per am 09 Dezember 2022, 17:53:39
Triggern musst du auf unit, da beim ersten B
Mal status noch gar nicht richtig gesetzt ist.

define di_wandlicht DOIF ([Schalter_Kueche:unit] eq "1" and [?Schalter_Kueche:status] eq "ON") (set Unterbauleuchte on) DOELSEIF ([Schalter_Kueche:unit] eq "1" and [?Schalter_Kueche:status] eq "OFF") (set Unterbauleuchte off)

Falls deine Unterbauleuchte auch auf ON und OFF statt on und off reagiert, kannst du es noch einfacher machen
code]define di_wandlicht DOIF ([Schalter_Kueche:unit] eq "1") (set Unterbauleuchte  [$DEVICE:status])[/code]

Wobei man die Kleinschreibung auch mit Formatierung hinbekommen kann, bin aber gerade mit dem Hund im Kalten Gassi, das suche ich jetzt nicht raus.
Titel: Antw:DOIF mit Funkschalter
Beitrag von: mindkicker am 09 Dezember 2022, 21:30:51
Also der Code

define di_unterbaulicht DOIF ([Schalter_Kueche:unit] eq "1") (set Unterbauleuchte  [$DEVICE:status])

wäre natürlich mehr als elegant. Leider weiß ich nicht wie ich aus ON = on bzw. OFF = off mache, aber

define di_unterbaulicht DOIF ([Schalter_Kueche:unit] eq "1" and [?Schalter_Kueche:status] eq "ON") (set Unterbauleuchte on) DOELSEIF ([Schalter_Kueche:unit] eq "1" and [Schalter_Kueche:status] eq "OFF") (set Unterbauleuchte off)


und für das zweite Device

define di_wandlicht DOIF ([Schalter_Kueche:unit] eq "2" and [?Schalter_Kueche:status] eq "ON") (set Wandlicht_Kueche on) DOELSEIF ([Schalter_Kueche:unit] eq "2" and [Schalter_Kueche:status] eq "OFF") (set Wandlicht_Kueche off)


führte letztlich zum Ergebnis dass nun beide Geräte sauber geschalten werden. Solltest Du lieber Per nochmal Zeit und Muße haben mir den entscheidenden Hinweis zum umformatieren geben zu können wäre ich Dir sehr dankbar.

Das Problem ist hiermit gelöst und ich bedanke mich an der Stelle für die schnelle und unkomplizierte Hilfe. Ich habe nur mitunter Probleme Eure (und damit meine ich auch die vielen anderen Experten hier im Forum) knappen Antworten zu verstehen.
Titel: Antw:[gelöst] DOIF mit Funkschalter
Beitrag von: Per am 10 Dezember 2022, 17:56:15
Wichtig ist, den Code zu verstehen, warum er jetzt funktioniert und deine Variante nicht ganz.

Zur Groß-Kleinschreibung; ohne Perl Kenntnisse kannst du mit attr eventMap bei den Lampen arbeiten, auf MQTT Seite was einstellen oder mit RegEx arbeiten. Bei letzterem mache ich aber auch nur trail'&'error :D