FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Superposchi am 22 Mai 2021, 13:09:35

Titel: cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Superposchi am 22 Mai 2021, 13:09:35
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
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Frank_Huber am 22 Mai 2021, 13:13:37
Ein Komma im Befehl, doppelt klammern.
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Superposchi am 22 Mai 2021, 15:31:23
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.
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Gisbert am 22 Mai 2021, 17:05:38
Wie wäre es hiermit?
... ([Saugroboter:state] eq "Docked" and [10:00|0] and [Anwesenheitsstatus] eq "1") ((set Saugroboter goto 22350,29500))
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag 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
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Superposchi am 22 Mai 2021, 17:27:35
Bringt auch keine Besserung.

Die Bedingung des DOIF wird ausgewertet und für Wahr befunden, aber der Command nicht ausgeführt.
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Gisbert am 22 Mai 2021, 20:18:42
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​
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Superposchi am 22 Mai 2021, 20:26:55
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.
Titel: Antw:cmd1 wird nicht ausgeführt - in Kommandozeile wird der gleiche Befehl ausgeführt
Beitrag von: Frank_Huber am 25 Mai 2021, 10:40:44
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.