Hauptmenü

cmd_1 versus cmd_2

Begonnen von TobiasR, 11 August 2025, 11:12:22

Vorheriges Thema - Nächstes Thema

TobiasR

Hallo,

ich brauche mal Hilfe.
Wieso wie lege ich fest ob eine Funktion in DOIF mit "set xyz cmd_1" oder "set xyz cmd_2" ausgeführt werden soll?

Hintergrund:
Wenn mein Klingeltaster betätigt wird, wurde bisher immer eine Telegramnachricht erzeugt.
Seit gestern ist das nicht mehr der Fall und ich habe jetzt rausgefunden dass offensichtlich seit gestern der Befehl nur noch über cmd_2 raus geht.
Aber wo lege ich das fest?

Hier die Sequenz:
define Hofklingel DOIF (\
[K_Klingel:"^sensor:.closed$"]\
) \
(\
get WebCamHof image\
) \
(\
set Telegram sendImage @Tobias /opt/fhem/www/webcam/WebCamHof_snapshot.jpg Es hat gerade am Hoftor geklingelt\
)\
(\
set Telegram sendImage @Tobias /opt/fhem/www/webcam/WebCamHof_snapshot_2.jpg\
)\
\

setuuid Hofklingel 68960241-f33f-f1f8-4a89-1bcaf9bf4d25b116

Prof. Dr. Peter Henning

Welcher ist
Zitat von: TobiasR am 11 August 2025, 11:12:22der Befehl
?
Und was heißt "rausgehen"?
Und warum stehen in der Definition die ganzen "\", das ist ziemlich unwartbar.
Es fehlen außerdem Angaben über sonstige Attribute, z.B. Zeitverzögerungen.

LG

pah

passibe

#2
Zitat von: Prof. Dr. Peter Henning am 11 August 2025, 14:41:29Und warum stehen in der Definition die ganzen "\", das ist ziemlich unwartbar.
Das sind doch einfach nur die Zeilenumbrüche aus dem raw editor lol

Aber zur Abwechslung vielleicht mal ein Versuch, das eigentliche Problem zu lösen:

@TobiasR, cmd_2 ist der zweite Bedingungszweig (zum Begriff siehe hier).

Weil dein DOIF nur einen DOIF-Zweig und kein DOELSE enthält, fällt es, wenn die im DOIF-Zweig angegebene Bedingung unwahr ist, in ein "internes" bzw. unsichtbares DOELSE zurück. Das ist das cmd_2, was du siehst.

Dazu aus dem Wiki:
ZitatEin DOIF mit nur einem Bedingungszweig enthält ein internes DOELSE, d.h. bei unwahrer Bedingung und vorhandenem Auslöser findet ein Statuswechsel auf cmd_2 statt.

Die von dir in der Klammer angegebenen Kommandos (get WebCamHof, set Telegram, set Telegram) sind cmd 1.1, 1.2 und 1.3, nicht etwa cmd_1, cmd_2 und cmd_3. Also nochmal: Bei cmd_n bezeichnet n immer den Bedingungszweig.

Im Prinzip heißt das hier einfach, dass deine Bedingung [K_Klingel:"^sensor:.closed$"] nicht wahr wird. Du triggerst also nicht auf das richtige Event. Wieso das bis jetzt funktioniert hat, keine Ahnung. Irgendwas muss sich da geändert haben. Schau nochmal im Eventmonitor, ob tatsächlich auch dieses Event von K_Klingel ankommt, wenn jemand klingelt, bzw. arbeite der Übersichtlichkeit halber vielleicht sowieso lieber einfach mit setmagic und eq statt mit regex, also: [K_Klingel:sensor] eq "closed".

TomLee

Zitat von: passibe am 11 August 2025, 14:58:15Das sind doch einfach nur die Zeilenumbrüche aus dem raw editor lol

Es ist ein Auszug aus der fhem.cfg.

passibe

Stimmt, wegen setuuid. Aber ändert nichts :D