Ich habe einen doif etwas aufgebohrt der schon funktionierte. Der Trigger kommt jetzt noch zusätzlich von einem MQTT2 und löst leider nicht aus.
([bobby:"fehler"] or [bobby.allgemein-status:"fehler"] or [bobby.allgemein-status:"angehoben"] or [Bobby_MQTT.plain:"Kollision!"] or [Bobby_MQTT.plain:"Kein.*"] or [Bobby_MQTT.plain:"Angehoben"] or [Bobby_MQTT.plain:"Räder.*"]) ("sh /opt/fhem/FHEM/bobbybild.sh [bobby:allgemein-batteriezustand] [bobby:fehler_aktuell] [Bobby_MQTT:plain]> /dev/null 2>&1 &")
desweiteren habe ich auch festgestellt das bei dem bobby.allgemein-status er dieses als timer_01_c01 scheinbar interpretiert.
Wird wohl sicher an dem - liegen, und wenn ich das so sehe kann ich auch vermutlich readings mit - dann bei doif nicht nehmen.
Hatte das doif schon total bereinigt um zu sehen ob Bobby_MQTT.plain: überhaupt das doif auslöst... aber leider nicht.
Denkfehler ?
Hallo laserrichi,
vorab, ich kann dir leider nicht wirklich weiterhelfen, da ich mich mit dem Ausführungsteil gar nicht auskenne.
Ein list deines DOIFs wäre sicher auch noch hilfreich.
DOIF kann einmal triggern (und dann nie mehr wieder), weil du möglicherweise nicht attr do always gesetzt hast, und du nur eine einzige Bedingung hast.
Also bitte ein list, oder wenigstens die raw-Definition.
Desweiteren wäre total hilfreich, wenn du in Worten beschreibst, was gemacht werden soll.
Was mir noch auffällt, sind die expliziten Wiederholungen, die man kürzer fassen können sollte (nicht getestet):
([bobby.*:("fehler"|"angehoben")] or [Bobby_MQTT.plain:("Kollision!"|"Kein.*"|"Angehoben"|"Räder.*"])
Ich hoffe, dass jemad mit mehr Durchblick als ich dir helfen kann, wenn du die o.g. Vorarbeit lieferst.
Viele Grüße Gisbert
der Ausführungsteil funktioniert. Als ich nur bobby:"fehler" hatte ging es perfekt. Auch das übergeben der Readings an das shell script.
habe mal das so angepasst wie du das geschrieben hattest, aber klappt leider nicht. do always habe ich bei keinem doif bei mir und alle arbeiten wie sie sollen.
hier mal das list:
Internals:
DEF ([bobby.*("fehler"|"angehoben")] or [Bobby_MQTT.plain:("Kollision!"|"Kein.*"|"Angehoben!"|"Räder.*")]) ("sh /opt/fhem/FHEM/bobbybild.sh [bobby:allgemein-batteriezustand] [bobby:fehler_aktuell] [Bobby_MQTT:plain]> /dev/null 2>&1 &")
DOIFDEV ^global$|^Bobby_MQTT.plain$
FUUID 5f64e4c5-f33f-48c4-af8e-335747e4771f7ece
MODEL FHEM
NAME doif_Fotos_bobby
NR 460
NTFY_ORDER 50-doif_Fotos_bobby
STATE initialized
TYPE DOIF
VERSION 24259 2021-04-16 10:48:08
READINGS:
2021-04-17 12:04:43 cmd 0
2021-04-17 12:04:43 mode enabled
2021-04-17 12:04:43 state initialized
2021-04-17 12:04:43 timer_01_c01 error: Wrong timespec bobby.*("fehler"|"angehoben"): either HH:MM:SS or {perlcode}
Regex:
accu:
collect:
cond:
Bobby_MQTT.plain:
0:
("Kollision!"|"Kein.*"|"Angehoben!"|"Räder.*") ^Bobby_MQTT.plain$:^("Kollision!"|"Kein.*"|"Angehoben!"|"Räder.*"):
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday) or ::ReadingValDoIf($hash,'Bobby_MQTT.plain','("Kollision!"|"Kein.*"|"Angehoben!"|"Räder.*")')
do:
0:
0 "sh /opt/fhem/FHEM/bobbybild.sh [bobby:allgemein-batteriezustand] [bobby:fehler_aktuell] [Bobby_MQTT:plain]> /dev/null 2>&1 &"
1:
helper:
DEVFILTER ^global$|^Bobby_MQTT.plain$
NOTIFYDEV global|Bobby_MQTT.plain
globalinit 1
last_timer 1
sleeptimer -1
localtime:
readings:
all Bobby_MQTT.plain:("Kollision!"|"Kein.*"|"Angehoben!"|"Räder.*")
time:
0 bobby.*("fehler"|"angehoben")
timeCond:
0 0
timer:
0 0
timers:
0 0
uiState:
uiTable:
Attributes:
room Kameras
webCmd cmd_1
webCmdLabel Foto:
etwas weiter probiert und es geht jetzt, wenn auch nicht mit dem zusammenfassen der events.
([bobby:"fehler"] or [bobby:"Angehoben"] or [Bobby_MQTT:"Kollision"] or [Bobby_MQTT:"Kein"] or [Bobby_MQTT:"Angehoben"] or [Bobby_MQTT:"Räder"] or [Bobby_MQTT:"Schleife"]) ("sh /opt/fhem/FHEM/bobbybild.sh [bobby:allgemein-batteriezustand] [bobby:fehler_aktuell] [Bobby_MQTT:plain]> /dev/null 2>&1 &")
jetzt triggert er auf bobby und auch auf den Bobby_MQTT
Wenn jemand das noch geschickter weis wie man das zusammenfasst dann nur her damit :-)
do always habe ich bei keinem doif bei mir und alle arbeiten wie sie sollen.
Und das ist für Dich der Beweis das es hier auch so ist?
Ich bin der Meinung ohne "do always" oder einen DOELSE-Zweig ist der Fall problematisch.
Hallo laserrichi,
ZitatWenn jemand das noch geschickter weis wie man das zusammenfasst dann nur her damit :-)
Vielleicht sind nur einmalig am Anfang und Ende Gänsefüßchen nötig, und nicht zwischendurch.
Wie soll ein DOIF auf die einzige Bedingung ohne do always triggern? Ohne do always wird genau einmal der Ausführungsteil ausgeführt, und dann entweder nie mehr, oder bis zum Neustart von Fhem.
Viele Grüße Gisbert
Hi,
Eigentlich ist das Ganze hier gut beschrieben, auch dass dazu ein do always gehört:
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Die Zusammenfassung würde ich so versuchen
([bobby:"fehler|Angehoben"] or [Bobby_MQTT:"Kollision|Kein|Angehoben|Räder|Schleife"])
Das & am Ende vom Ausführungsteil kann man sich hier sparen da FHEM diesen Ausdruck "Der Shell Befehl" nicht blockierend im Hintergrund ausführt. ;)
Gruß Otto