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
Ein Komma im Befehl, doppelt klammern.
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.
Wie wäre es hiermit?
... ([Saugroboter:state] eq "Docked" and [10:00|0] and [Anwesenheitsstatus] eq "1") ((set Saugroboter goto 22350,29500))
Ist mir zwar absolut neu den Commandteil in doppelte Klammern zu setzen, aber probiere ich gerne mal aus
Bringt auch keine Besserung.
Die Bedingung des DOIF wird ausgewertet und für Wahr befunden, aber der Command nicht ausgeführt.
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
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.
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.