Ich brauch mal Unterstützung zu Fhem-Befehlen an Zigbee-Devices

Begonnen von eckhard scholz, 19 Juni 2025, 09:02:20

Vorheriges Thema - Nächstes Thema

eckhard scholz

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
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

eckhard scholz

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)
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

Laffer72

#2
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
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

passibe

#3
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:
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

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

eckhard scholz

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?



F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

eckhard scholz

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
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

eckhard scholz

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.
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

eckhard scholz

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
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,


Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

eckhard scholz

Danke mw77,

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

Gruß
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,