cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt

Begonnen von Superposchi, 22 Mai 2021, 13:09:35

Vorheriges Thema - Nächstes Thema

Superposchi

Hallo,

ich habe ein Problem mit einem DOIF. Mein Saugroboter soll immer Samstags eine bestimmte Position anfahren - soweit so gut dank dem anderen Thread.
Jetzt kommt aber das Problem: Das DOIF wird ganz normal ausgeführt, doch das Command nicht. Kopiere ich das Command in die Kommandozeile und führe es direkt aus, geht es hingegen.

Vielleicht kann mir ja jemand einen Tip geben wo der Denkfehler liegt. Wie gesagt, dass DOIF wird ausgeführt, dass ist nicht das Problem. Es liegt ausschließlich am Command im DOIF.

Hier das List des DOIF's:
Internals:
   .FhemMetaInternals 1
   DEF        (([Saugroboter:state] eq "Docked") and [10:00|0] and ([Anwesenheitsstatus] eq "1"))
     (set Saugroboter goto 22350,29500)
   FUUID      6084693f-f33f-793a-bb39-cfd1a0b92d1b76cb
   FVERSION   98_DOIF.pm:0.243300/2021-04-24
   MODEL      FHEM
   NAME       Saugroboter_starten_sa
   NOTIFYDEV  global,Anwesenheitsstatus,Saugroboter
   NR         268
   NTFY_ORDER 50-Saugroboter_starten_sa
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24330 2021-04-24 21:09:16
   .attraggr:
   .attrminint:
   READINGS:
     2021-05-22 13:04:47   Device          Saugroboter
     2021-05-22 13:04:18   cmd             1
     2021-05-22 13:04:18   cmd_event       set_cmd_1
     2021-05-22 13:04:18   cmd_nr          1
     2021-05-22 12:40:55   e_Anwesenheitsstatus_STATE 3
     2021-05-22 13:04:47   e_Saugroboter_state Goto
     2021-05-22 13:04:18   error           29500: Unknown command 29500, try help.
     2021-05-22 12:33:26   mode            enabled
     2021-05-22 13:04:18   state           cmd_1
     2021-05-22 12:33:27   timer_01_c01    23.05.2021 10:00:00
   Regex:
     accu:
     collect:
     cond:
       Anwesenheitsstatus:
         0:
           &STATE     ^Anwesenheitsstatus$
       Saugroboter:
         0:
           state      ^Saugroboter$:^state:
   attr:
     cmdState:
     wait:
       0:
         900
   condition:
     0          (::ReadingValDoIf($hash,'Saugroboter','state') eq "Docked") and ::DOIF_time_once($hash,0,$wday,"0") and (::InternalDoIf($hash,'Anwesenheitsstatus','STATE') eq "1")
   days:
   do:
     0:
       0          set Saugroboter goto 22350,29500
     1:
   helper:
     DEVFILTER  ^global$|^Saugroboter$|^Anwesenheitsstatus$
     NOTIFYDEV  global|Saugroboter|Anwesenheitsstatus
     event      Goto,in_fresh_state: no,state_old: Charging
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev Saugroboter
     triggerEvents:
       Goto
       in_fresh_state: no
       state_old: Charging
     triggerEventsState:
       state: Goto
       in_fresh_state: no
       state_old: Charging
   internals:
     all         Anwesenheitsstatus:STATE
   intervalfunc:
   localtime:
     0          1621756800
   readings:
     all         Saugroboter:state
   realtime:
     0          10:00:00
   time:
     0          10:00:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   trigger:
   triggertime:
     1621756800:
       localtime  1621756800
       hash:
   uiState:
   uiTable:
Attributes:
   alias      Durchwischen Starten
   do         always
   group      Saugroboter
   room       Steuerung->Saugroboter
   verbose    4
   wait       900

Frank_Huber


Superposchi

Wenn du das Komma bei den Koordinaten meinst, so ist die Syntex. Bei der direkten Eingabe in der Fhem-Kommandozeile muss es exakt so geschrieben werden damit es funktioniert. Muss das innerhalb des DOIF irgendwie maskiert werden?

Doppelte Klammern sehe ich nur bei der Bedingung, wobei die 2. Klammer ja alles umschließt. Soweit ich das verstanden habe kann man das machen um eine bessere Struktur zu erreichen.
Außerdem wird das DOIF ja gestartet, lediglich der Command nicht ausgeführt, also kann es nicht am Bedingungsteil liegen.

Gisbert

Wie wäre es hiermit?
... ([Saugroboter:state] eq "Docked" and [10:00|0] and [Anwesenheitsstatus] eq "1") ((set Saugroboter goto 22350,29500))
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Superposchi

Ist mir zwar absolut neu den Commandteil in doppelte Klammern zu setzen, aber probiere ich gerne mal aus

Superposchi

Bringt auch keine Besserung.

Die Bedingung des DOIF wird ausgewertet und für Wahr befunden, aber der Command nicht ausgeführt.

Gisbert

Zitat von: Superposchi am 22 Mai 2021, 17:10:26
Ist mir zwar absolut neu den Commandteil in doppelte Klammern zu setzen, aber probiere ich gerne mal aus

Das glaub ich gerne, ich benutze es aber schon länger. Die Begründung kann ich dir im Moment nicht liefern, aber es gab eine.

Was meinst du damit, dass der Command = Ausführungsteil (?) nicht ausgeführt wird?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Superposchi

Ich meine Damit das das DOIF zwar auf cmd1 wechselt es aber nichts passiert.
Habe das Problem aber inzwischen hoffentlich gefunden. Jedenfalls wird das cmd1 jetzt ausgeführt wenn ich es mit set bewusst anstoße, also sollte es auch bei Eintreten der Bedingung laufen.

Der Fehler war die Leerstelle hinter dem Komma. Nachdem ich die doppelten Klammern gesetzt hatte und das Leerzeichen gelöscht habe geht es jetzt anscheinend. Muss es Morgen in ruhe durchtesten.

Frank_Huber

Das Komma trennt bei DOIF Befehle.
mit einfacher Klammer hast Du also Zwei Befehle im Ausführungsteil.
#1: set Saugroboter goto 22350
#2 29500

deswegen auch der Fehler: 2021-05-22 13:04:18   error           29500: Unknown command 29500, try help.

Baue es mal wie von Gisbert und mir vorgeschlagen um zu ((set Saugroboter goto 22350,29500))
Wenn es dann noch immer nicht läuft postest Du bitte ein List im Fehlerzustand.
damit können wir dann idR sehen wo es klemmt.

EDIT:
man sollte alles lesen bevor man antwortet. ;-)
Die Leerstelle hast dann wohl versehentlich mit eingebaut beim Doppel-Klammern setzen.
schön dass es jetzt geht! lass uns wissen wenn es klemmt und du Hilfe brauchst.