FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: laserrichi am 17 April 2021, 09:25:17

Titel: DOIF löst bei MQTT nicht aus
Beitrag von: laserrichi am 17 April 2021, 09:25:17
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 ?
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: Gisbert am 17 April 2021, 11:23:45
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
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: laserrichi am 17 April 2021, 12:08:10
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:
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: laserrichi am 17 April 2021, 14:30:27
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 :-)
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: rabehd am 17 April 2021, 15:04:58
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.
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: Gisbert am 17 April 2021, 15:14:50
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​
Titel: Antw:DOIF löst bei MQTT nicht aus
Beitrag von: Otto123 am 17 April 2021, 16:37:49
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