Hi,
ich habe folgendes DOIF:
([OG.Flur.BWM.Treppe:motion] eq "on" and [OG.Flur.BWM.Treppe:current] < 10)
(set FSR14_2_3 on)(set FSR14_2_3 off)
DOELSE ()
Als wait habe ich derzeit zum testen 0,10 gesetzt. Leider habe ich das Problem, dass der erste Befehl im cmd nicht ausgeführt wird. Im Log steht folgendes:
2016.11.27 22:22:00 2: OG.Flur.BWM.Treppe_actions: set FSR14_2_3 on: Please define FSR14_2_3 on first
2016.11.27 22:22:10 3: EnOcean set FSR14_2_3 off
Tausche ich die Befehle, schlägt auch wieder der erste fehl und der Zweite wird ausgeführt. Wo ist der Fehler?
VG
F.
Poste mal ein list <DOIFname>
Hier:
Internals:
CFGFN
DEF ([OG.Flur.BWM.Treppe:motion] eq "on" and [OG.Flur.BWM.Treppe:current] < 10)
(set FSR14_2_3 on)(set FSR14_2_3 off)
DOELSE ()
NAME OG.Flur.BWM.Treppe_actions
NR 1934
NTFY_ORDER 50-OG.Flur.BWM.Treppe_actions
STATE cmd_2
TYPE DOIF
Helper:
Dblog:
Cmd:
Logdb:
TIME 1480292122.58064
VALUE 2
Cmd_event:
Logdb:
TIME 1480292122.58064
VALUE OG.Flur.BWM.Treppe
Cmd_nr:
Logdb:
TIME 1480292122.58064
VALUE 2
Cmd_seqnr:
Logdb:
TIME 1480290323.86128
VALUE 2
Error:
Logdb:
TIME 1480290311.85359
VALUE set FSR14_2_3 on
State:
Logdb:
TIME 1480292122.58064
VALUE cmd_2
Wait_timer:
Logdb:
TIME 1480290323.25936
VALUE no timer
Readings:
2016-11-28 01:15:22 Device OG.Flur.BWM.Treppe
2016-11-28 01:15:22 cmd 2
2016-11-28 01:15:22 cmd_event OG.Flur.BWM.Treppe
2016-11-28 01:15:22 cmd_nr 2
2016-11-28 01:15:22 e_OG.Flur.BWM.Treppe_current 0.0
2016-11-28 01:15:22 e_OG.Flur.BWM.Treppe_motion off
2016-11-28 01:15:22 state cmd_2
2016-11-28 00:45:23 wait_timer no timer
Condition:
0 ReadingValDoIf($hash,'OG.Flur.BWM.Treppe','motion','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" and ReadingValDoIf($hash,'OG.Flur.BWM.Treppe','current','','',AttrVal($hash->{NAME},'notexist',undef)) < 10
Devices:
0 OG.Flur.BWM.Treppe
all OG.Flur.BWM.Treppe
Do:
0:
0 set FSR14_2_3 on
1 set FSR14_2_3 off
1:
0
Helper:
event voltage: 3.6,current: 0.0,sensorType: wall,battery: ok,motion: off,off
globalinit 1
last_timer 0
sleepdevice OG.Flur.BWM.Treppe
sleepsubtimer -1
sleeptimer -1
timerdev OG.Flur.BWM.Treppe
timerevent voltage: 3.6,current: 0.0,sensorType: wall,battery: ok,motion: off,off
triggerDev OG.Flur.BWM.Treppe
timerevents:
voltage: 3.6
current: 0.0
sensorType: wall
battery: ok
motion: off
off
timereventsState:
voltage: 3.6
current: 0.0
sensorType: wall
battery: ok
motion: off
state: off
triggerEvents:
voltage: 3.6
current: 0.0
sensorType: wall
battery: ok
motion: off
off
triggerEventsState:
voltage: 3.6
current: 0.0
sensorType: wall
battery: ok
motion: off
state: off
Internals:
Itimer:
Readings:
0 OG.Flur.BWM.Treppe:motion OG.Flur.BWM.Treppe:current
all OG.Flur.BWM.Treppe:motion OG.Flur.BWM.Treppe:current
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
room OG.Flur
wait 0,10
Ich verstehe nur das hier nicht:
ZitatReadingValDoIf($hash,'OG.Flur.BWM.Treppe','motion','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" and ReadingValDoIf($hash,'OG.Flur.BWM.Treppe','current','','',AttrVal($hash->{NAME},'notexist',undef)) < 10
Hier sind die Readings vom Bewegungsmelder:
ZitatReadings
battery ok 2016-11-28 01:15:22
current 0.0 2016-11-28 01:15:22
motion off 2016-11-28 01:15:22
sensorType wall 2016-11-28 01:15:22
state off 2016-11-28 01:15:22
teach 4BS teach-in accepted EEP A5-07-01 Manufacturer: EnOcean GmbH 2016-11-24 01:14:57
voltage 3.6 2016-11-28 01:15:22
ZitatIch verstehe nur das hier nicht:
Das ist die DOIF interne Umsetzung der Bedingung.
Die DOIF Definition sieht o.k. aus.
Was passiert, wenn Du 3 Befehlssequenzen verwendest?
() (set FSR14_2_3 on) (set FSR14_2_3 off)
oder
(set FSR14_2_3 on) (set FSR14_2_3 on) (set FSR14_2_3 off)
mit
wait 0,5,10
Welche DOIF-Version verwendest Du?
version DOIF
Was passiert, wenn Du die Befehle in die Befehlszeile eingibst?
set FSR14_2_3 on;sleep 10; set FSR14_2_3 off
Oder mal FSR14_2_3 löschen, Restart und FSR14_2_3 neu anlegen. Über Raw definition geht es einfach, wenn Du den Code vorher kopierst.
Version ist folgende:
ZitatFile Rev Last Change
98_DOIF.pm 12215 2016-09-26 21:02:49Z damian-s
Die Befehlszeile mit:
Zitatset FSR14_2_3 on;sleep 10; set FSR14_2_3 off
funktioniert problemlos.
Den Rest kann ich erst heute Abend testen. Remote und per Tel. Brech ich mir sonst beim Tippen die Finger ;D
Ich hab jetzt 3 Kommandos drin und jetzt kommt der Fehler bei den ersten beiden :(
Das ist echt strange...
Keiner eine Idee? Das mit dem Löschen kann ich nicht nachvollziehen, was soll das bewirken?
ZitatDas mit dem Löschen kann ich nicht nachvollziehen, was soll das bewirken?
Ist ein Hausmittel, wenn ich nicht weiter weiss.
DOIF stellt die Meldung, die vom Set-Befehl kommt nur dar.
Auffällig ist, dass die Meldung lautet "define
FSR14_2_3 on first", als ob "FSR14_2_3" und "on" zum Gerätenamen gehören, als verwendestest Du ein nichtkonformes Leerzeichen.
Mit EnOcean habe ich keine Erfahrung, da kann ich nicht weiter helfen.
Nach allem rumprobieren, funktioniert es jetzt:
([OG.Flur.BWM.Treppe:motion] eq "on" and [OG.Flur.BWM.Treppe:current] < 10)
(define Treppe_an at +00:00:01 set FSR14_2_3 on)(define Treppe_aus at +00:00:01 set FSR14_2_3 off)
DOELSE ()
Warum die ursprünglicher Version nicht läuft, weiß ich immer noch nicht. Das Leerzeichen scheidet auch aus, da das Vertauschen der Kommandos trotzdem immer nur den letzten Befehl ausgeführt hat.