FHEM Forum

FHEM - Hausautomations-Systeme => Zigbee => Thema gestartet von: eckhard scholz am 19 Juni 2025, 09:02:20

Titel: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 09:02:20
Hallo Fhem Gemeinde,

was ist an den DOIF`s falsch?
define TrepT_BewUnt DOIF ([06:00-09:59] or [19:00-21:59] and [Treppe_unten:"^occupancy:.true$"]) \
(set TreppeLi_Ure on-for-timer 60, set TreppeLi_Ure brightness 150, set TreppeLi_Ure ct 300 )\
DOELSE (set TreppeLi_Ure off)
define TrepT_BewUnt DOIF ([06:00-09:59] or [19:00-21:59] and [Treppe_unten:"^occupancy:.true"]) \
(set TreppeLi_Ure on-for-timer 60, set TreppeLi_Ure brightness 150, set TreppeLi_Ure ct 300 )\
DOELSE (set TreppeLi_Ure off)
Beide DOIF`s funktionieren genau nur einmal. Der einzige Unterschied ist hier "Treppe_unten:"^occupancy:.true" mit und ohne $.
Ich hab mir die Befehle aus Beispielen zusammengesucht. Ich bin nicht ganz so der Experte mit den ganzen Sonderzeichen und deren Funktion.  :(

Gruß
Eckhard
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 09:11:45
Noch ein Nachtrag:

Diese etwas einfachere Anweisung funktioniert talellos.
define Gwc_Bewegung DOIF ([Gwc_Bew:"^occupancy:.true$"]) (set GwcSpLicht on) DOELSE (set GwcSpLicht on-for-timer 100)
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: Laffer72 am 19 Juni 2025, 12:59:16
Hallo,

nach meinem Verständnis, fehlt in Deinen DOIFs durch das Ausschalten per Timer im set-Befehl der Statuswechsel.
Die Lampe schaltet nach 60 Sekunden aus, das DOIF bleibt aber im ersten DOIF-Zweig.
Ein erneutes Auslösen durch den Bewegungsmelder spricht dann nicht mehr an, da das DOIF ja bereits in diesem Zweig ist.

Versuch mal in den Attributen do-always zu setzen, dann sollte es klappen.

Viel Erfolg

Reinhard
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: passibe am 19 Juni 2025, 13:20:06
Du brauchst auch gar keine Sonderzeichen.
Denn du brauchst auch gar keine Regex, weil du ja eh nur auf ein Reading triggerst. Deshalb kannst du auch ganz einfach sagen:
[Treppe_unten:occupancy] eq "true"
Ansonsten hat Laffer72 recht, wenn du sowieso on-for-timer nutzt, kannst du einfach attr do always verwenden. Du kannst dann auch den DOELSE-Zweig löschen.

Du solltest auch noch die Hierarchie der Bedingungen durch Klammern klar angeben, sodass klar ist, dass zunächst das "or" der Zeiten bearbeitet wird und dann das gesammelte Ergebnis des "or" mit "and" verknüpft wird (dann ist man nicht dem, was perl automatisch macht, ausgeliefert).

Ansonsten bietet es sich noch an, "Schaltbedingungen" von "Bedingungen, die nur geprüft werden sollen" zu trennen, damit jeweils klar ist, auf welche Events reagiert wird. Kann manchmal dazu führen, dass das DOIF erst gar nicht ausgeführt wird, weil FHEM die Events sequentiell abarbeitet und deshalb niemals zwei Events auf einmal vorliegen können.
Siehe dazu den Abschnitt Zeitintervalle, Readings und Status ohne Trigger in der commandref (https://commandref.fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger):
ZitatAngaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always

Insgesamt ergibt sich damit für dich:
defmod TrepT_BewUnt DOIF (([?06:00-09:59] or [?19:00-21:59]) and [Treppe_unten:occupancy] eq "true") \
(set TreppeLi_Ure on-for-timer 60, set TreppeLi_Ure brightness 150, set TreppeLi_Ure ct 300 )
attr TrepT_BewUnt do always
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: rabehd am 19 Juni 2025, 13:26:03
Zitat von: eckhard scholz am 19 Juni 2025, 09:02:20Ich hab mir die Befehle aus Beispielen zusammengesucht.
Wenn es um den Bedingungsteil geht, dann ist ein Anfang über den Eventmonitor immer ganz gut.
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 17:12:32
Hallo possible,
danke für die Infos

Ich habe mir als erstes den Hinweis angesehen.
ZitatDu solltest auch noch die Hierarchie der Bedingungen durch Klammern klar angeben, sodass klar ist, dass zunächst das "or" der Zeiten bearbeitet wird und dann das gesammelte Ergebnis des "or" mit "and" verknüpft wird.
So sieht jetzt mein DOIF aus und das Funktioniert schon mal.
define TrepT_BewUnt DOIF (([06:00-09:59] or [19:00-21:59]) and [Treppe_unten:"^occupancy:.true$"]) \
(set TreppeLi_Ure on-for-timer 60, set TreppeLi_Ure brightness 150, set TreppeLi_Ure ct 300 )\
DOELSE (set TreppeLi_Ure off)

ZitatAnsonsten bietet es sich noch an, "Schaltbedingungen" von "Bedingungen, die nur geprüft werden sollen" zu trennen
Hat der Hinweis was mit den gesetzten Fragezeichen vor den Zeitangaben zu tun?



Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 17:17:23
Hallo Laffer72,

ich schau mir das an, do-always habe ich noch nicht benutz. Vielleicht macht das meine Anwendung etwas einfacher.
ZitatVersuch mal in den Attributen do-always zu setzen, dann sollte es klappen.

Danke und Gruß
Eckhard
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: Beta-User am 19 Juni 2025, 17:48:57
OT:
Was hat ein imo reines DOIF-Problem mit (vermutlich) ausschließlich MQTT-Devices als Trigger- und Ziel-Geräten im Forenbereich für ZigBee zu suchen?!?

Nur, dass da irgendwo im Hintergrund ein bestimmtes Funkprotokoll eine Rolle spielen mag? Imo: nope.
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 19:41:14
Ja für mich sind Zigbee Devices über Zigbee2MQTT etwas anderes als MQTT Devices.
Und der Befehlsaufbau von Zigbee-Devices sieht schon etwas anders aus als z.B. zu FS20-Devices.
Aber bestimmt hätte ich es auch zu MQTT oder DOIF fragen können.
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 20:03:12
guten Abend passibe,
so habe ich es jetzt auch ausprobiert und es funktioniert.
Danke noch mal ... viele Wege führen zu Ziel, nur die Richtigen müssen es sein.  8)

define TrepA_BewUnt DOIF ([?22:00-05:59] and [Treppe_unten:occupancy] eq "true") \
(set TreppeLi_Ure on-for-timer 60, set TreppeLi_Ure brightness 1, set TreppeLi_Ure ct 490) \
DOELSE (set TreppeLi_Ure off)

Wo finde ich die Erklärung zu dem ? vor der Zeitangabe?

Gruß
Eckhard
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: mw77 am 19 Juni 2025, 20:57:28
Zitat von: eckhard scholz am 19 Juni 2025, 20:03:12Wo finde ich die Erklärung zu dem ? vor der Zeitangabe?
https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: Beta-User am 19 Juni 2025, 22:17:27
Zitat von: eckhard scholz am 19 Juni 2025, 19:41:14Ja für mich sind Zigbee Devices über Zigbee2MQTT etwas anderes als MQTT Devices.
Und der Befehlsaufbau von Zigbee-Devices sieht schon etwas anders aus als z.B. zu FS20-Devices.
Aber bestimmt hätte ich es auch zu MQTT oder DOIF fragen können.
Aha. Völlig logisch, dass du aus diesem Grund ausschließlich zwei DOIF-defines zeigst...
Titel: Aw: Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices
Beitrag von: eckhard scholz am 19 Juni 2025, 22:44:31
Danke mw77,

ehrlich gesagt, ist es nicht immer einfach nach solch kleinen Details zu suchen.

Gruß
Eckhard