DOIF löst bei MQTT nicht aus

Begonnen von laserrichi, 17 April 2021, 09:25:17

Vorheriges Thema - Nächstes Thema

laserrichi

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 ?
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

laserrichi

#2
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:
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

laserrichi

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 :-)
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

rabehd

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

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz