Was ist hier falsch?
Ich habe paar Sekunden die folgenden Meldungen im Log:
2018.06.30 23:29:24 1: PERL WARNING: Bareword found where operator expected at (eval 163604) line 1, near ") DOELSEIF"
2018.06.30 23:29:24 3: eval: Sonnenschutz: warning in condition c01
Das zugehörige device sieht wie folgt aus:
Internals:
CFGFN
DEF (([Lichtsensor:brightness] > 60000 and ([$SELF:average_out] > 25 or [$SELF:average_in] > 25) and ([Roll2:state] ne "go-my" and [11:00-([Astro:SunSet]-[01:00])])) (trigger Rollladen_ntfy) DOELSEIF (([Lichtsensor:brightness] < 60000 or [$SELF:average_out] < 25 or [([Astro:SunSet]-[01:00])])) and ([Roll2:state] eq "go-my")) (set Roll1 off,set Roll2 off,set Roll1_old_State up) DOELSE ()
MODEL FHEM
NAME Sonnenschutz
NR 588
NTFY_ORDER 50-Sonnenschutz
STATE initialized
TYPE DOIF
DOIF_Readings:
average_in {(ReadingValDoIf($hash,'Thermo_Wz','temperature')+ReadingValDoIf($hash,'HM_Sensor2','temperature'))/2}
average_out {(ReadingValDoIf($hash,'Thermo_Sz_aussen','temperature')+ReadingValDoIf($hash,'Thermo_Balkon','temperature'))/2}
Helper:
DBLOG:
average_out:
fhemlogDB:
TIME 1530388308.52676
VALUE 21.8
cmd:
fhemlogDB:
TIME 1530388308.52676
VALUE 0
cmd_event:
fhemlogDB:
TIME 1530387499.27783
VALUE Sonnenschutz
cmd_nr:
fhemlogDB:
TIME 1530387499.27783
VALUE 3
mode:
fhemlogDB:
TIME 1530388308.52676
VALUE enabled
state:
fhemlogDB:
TIME 1530388308.52676
VALUE initialized
wait_timer:
fhemlogDB:
TIME 1530387444.81138
VALUE no timer
READINGS:
2018-06-30 23:40:34 Device Sonnenschutz
2018-06-30 23:39:31 average_in 24.6
2018-06-30 23:40:34 average_out 19.35
2018-06-30 21:51:47 cmd 0
2018-06-30 23:08:12 e_Lichtsensor_brightness 0
2018-06-30 23:00:59 e_Roll2_state closed
2018-06-30 23:39:31 e_Sonnenschutz_average_in 24.6
2018-06-30 23:40:34 e_Sonnenschutz_average_out 19.35
2018-06-30 23:40:34 error condition c01: syntax error, ("
2018-06-30 21:51:47 mode enabled
2018-06-30 21:51:47 state initialized
2018-06-30 21:51:48 timer_01_c01 01.07.2018 11:00:00
2018-06-30 23:02:10 timer_02_c01 01.07.2018 20:46:00
2018-06-30 23:02:10 timer_03_c01 01.07.2018 20:46:00
2018-06-30 23:40:34 warning condition c01: (Missing operator before DOELSEIF?)
Regex:
DOIF_Readings:
HM_Sensor2:
average_in:
temperature ^HM_Sensor2$:^temperature:
Sonnenschutz:
Thermo_Balkon:
average_out:
temperature ^Thermo_Balkon$:^temperature:
Thermo_Sz_aussen:
average_out:
temperature ^Thermo_Sz_aussen$:^temperature:
Thermo_Wz:
average_in:
temperature ^Thermo_Wz$:^temperature:
attrtimer:
wait:
0:
900
1:
900
waitdel:
condition:
0 (ReadingValDoIf($hash,'Lichtsensor','brightness') > 60000 and (ReadingValDoIf($hash,'Sonnenschutz','average_out') > 25 or ReadingValDoIf($hash,'Sonnenschutz','average_in') > 25) and (ReadingValDoIf($hash,'Roll2','state') ne "go-my" and DOIF_time($hash,0,1,$wday,$hms))) (trigger Rollladen_ntfy) DOELSEIF ((ReadingValDoIf($hash,'Lichtsensor','brightness') < 60000 or ReadingValDoIf($hash,'Sonnenschutz','average_out') < 25 or DOIF_time_once($hash,2,$wday))) and (ReadingValDoIf($hash,'Roll2','state') eq "go-my")
days:
devices:
0 Lichtsensor Sonnenschutz Roll2
all Lichtsensor Sonnenschutz Roll2
do:
0:
0 set Roll1 off,set Roll2 off,set Roll1_old_State up
1:
0
helper:
DOIF_Readings_events
DOIF_eventas
event average_out: 19.35
globalinit 1
last_timer 3
sleeptimer -1
triggerDev Sonnenschutz
bm:
DOIF_Get:
cnt 2
dmx -1000
dtot 0
dtotcnt 0
mTS 30.06. 22:26:53
max 4.50611114501953e-05
tot 7.12871551513672e-05
mAr:
HASH(0x64fabc8)
Sonnenschutz
?
DOIF_Notify:
cnt 12173
dmx -1000
dtot 0
dtotcnt 0
mTS 30.06. 22:02:10
max 0.0162339210510254
tot 2.33735203742981
mAr:
HASH(0x64fabc8)
HASH(0x67af578)
DOIF_Set:
cnt 9
dmx -1000
dtot 0
dtotcnt 0
mTS 30.06. 22:26:53
max 0.000200033187866211
tot 0.00095677375793457
mAr:
HASH(0x64fabc8)
Sonnenschutz
?
triggerEvents:
average_out: 19.35
e_Sonnenschutz_average_out: 19.35
triggerEventsState:
average_out: 19.35
internals:
interval:
0 -1
1 0
intervalfunc:
intervaltimer:
itimer:
all Astro
localtime:
0 1530435600
1 1530470760
2 1530470760
readings:
0 Lichtsensor:brightness Sonnenschutz:average_out Sonnenschutz:average_in Roll2:state
all Lichtsensor:brightness Sonnenschutz:average_out Sonnenschutz:average_in Roll2:state
realtime:
0 11:00:00
1 20:46:00
2 20:46:00
time:
0 11:00:00
1 ([Astro:SunSet]-[01:00])
2 ([Astro:SunSet]-[01:00])
timeCond:
0 0
1 0
2 0
timer:
0 0
1 0
2 0
timers:
0 0 1 2
trigger:
triggertime:
1530435600:
localtime 1530435600
hash:
1530470760:
localtime 1530470760
hash:
uiState:
uiTable:
Attributes:
DOIF_Readings average_out:{([Thermo_Sz_aussen:temperature]+[Thermo_Balkon:temperature])/2},average_in:{([Thermo_Wz:temperature]+[HM_Sensor2:temperature])/2}
room Somfy
verbose 5
wait 900:900
jemand ne Idee?
Gruß
Arthur
Ist am Handy schwer zu lesen,
Ich würde aber auf einen Klammer Fehler tippen.
Ist ja schon recht "wild" geklammert.
Was auch auffällt ist dein Befehl für cmd1
Trigger devicename
Fehlt da nicht was?
Ich triggere gpio so: trigger gpio on
Gesendet von meinem Doogee S60 mit Tapatalk
Klammerfehler werden ja nicht angemeckert, ist halt ein etwas kompliziertes Gebilde aus and/or Bedingungen die geklammert werden müssen. Ist vielleicht auch die eine oder andere übeflüssige Klammer.
Der trigger auf das notify funktioniert auch ohne on/off oder so.
Internals:
CFGFN
DEF Rollladen_ntfy IF ([HM_Tuerkontakt_Balkon:state] eq "closed") (set Roll1 go-my,sleep 40,set Roll1_old_State go-my,set Roll2 go-my) ELSE (set Roll2 go-my,set Roll1_old_State go-my)
NAME Rollladen_ntfy
NOTIFYDEV Rollladen_ntfy
NR 589
NTFY_ORDER 50-Rollladen_ntfy
REGEXP Rollladen_ntfy
STATE 2018-06-30 17:44:06
TYPE notify
Helper:
DBLOG:
state:
fhemlogDB:
TIME 1530373447.10215
VALUE
READINGS:
2018-06-30 04:01:07 state active
helper:
bm:
notify_Exec:
cnt 2
dmx -1000
dtot 0
dtotcnt 0
mTS 30.06. 17:44:07
max 0.241856098175049
tot 0.431074142456055
mAr:
HASH(0x650ba68)
HASH(0x650ba68)
notify_Set:
cnt 7
dmx -1000
dtot 0
dtotcnt 0
mTS 01.07. 00:22:23
max 0.000161170959472656
tot 0.000737667083740234
mAr:
HASH(0x650ba68)
Rollladen_ntfy
?
Attributes:
Gruß
Arthur
Aber Klammerfehler sieht man in jedem Editor!!! :-X Ich habe es jetzt einfach mit notepad++ gemacht.
So sollten die Klammern wenigstens vorne und hinten stimmen.
Der Inhalt der DEF:
([Lichtsensor:brightness] > 60000 and ([$SELF:average_out] > 25 or [$SELF:average_in] > 25) and ([Roll2:state] ne "go-my" and [11:00-([Astro:SunSet]-[01:00])])) (trigger Rollladen_ntfy) DOELSEIF (([Lichtsensor:brightness] < 60000 or [$SELF:average_out] < 25 or [([Astro:SunSet]-[01:00])]) and [Roll2:state] eq "go-my") (set Roll1 off,set Roll2 off,set Roll1_old_State up) DOELSE ()
Gruß Otto
Moin Otto,
gute Idee, ich sehe mir das nachher mal im kwrite an, bin zur Zeit mit Windoof unterwegs :(
Guts Nächtle
Arthur
Moin Arthur,
attr WEB JavaScripts codemirror/fhem_codemirror.js
Und der integrierte DEF Editor von FHEM hat Syntax Hervorhebung und Klammer Check!
Gruß Otto
Hallo Otto,
Danke, wieder was gelernt :)
Die Meldungen sind jetzt auch weg 8)
Gruß
Arthur
Hallo Arthur,
ich glaube der interne Syntaxcheck macht eine Prüfung von links nach rechts, er kontrolliert nicht als Erstes ob die Klammern paarig sind.
Dabei kommt er an die erste Stelle die nicht mehr logisch ist, weil eventuell vorher eine Klammer hätte kommen "müssen" damit das nach der Klammer richtig ist.
Im Umkehrschluss: Die Fehlermeldung wird wohl nie auf eine Klammer hindeuten, sondern immer auf das was nach der fehlenden Klammer kommt und dann an der Stelle nicht mehr geht. Vorausgesetzt die einzelnen Befehle und Variablen stimmig.
Deswegen immer zuerst die Klammern prüfen.
Und man darf im Code auch Zeilenumbrüche im internen Editor machen, da wird es besser lesbar.
Gruß Otto
Hallo Otto,
ich frage mich warum man die Syntaxprüfung explizit einschalten muss wenn sie serienmäßig an Bord ist... :o Ich habe mir immer mit kwrite beholfen um wenigstens die Klammern paarig zu bekommen, nur gestern nicht >:(
Noch mal Danke für Deinen Hinweis darauf!
Gruß
Arthur