Hauptmenü

Syntaxprobleme "unknown command"

Begonnen von abc2006, 31 Oktober 2016, 17:18:31

Vorheriges Thema - Nächstes Thema

abc2006

Hi, ich habe heute folgendes DOIF erarbeitet. Es löst wie gewünscht aus, wenn der dummy D_FFO_Alarm geändert wird. Leider werden die Aktionen nicht ausgeführt, sondern ich bekomme eine Fehlermeldung. Habe schon diverse Quelltextveränderungen probiert, aber die Meldung bleibt gleich. Siehe 2. Post.


{ fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }: Unknown command {, try help. Unknown command if, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.

([D_FFO_Alarm])({
fhem("set remotebot message ALARM");
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
}
})


Internals:
   CFGFN
   DEF        ([D_FFO_Alarm])({
fhem("set remotebot message ALARM");
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
}
})

   NAME       DF_FFO_Alarm
   NR         43713
   NTFY_ORDER 50-DF_FFO_Alarm
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-10-31 17:14:02   Device          D_FFO_Alarm
     2016-10-31 17:14:02   cmd             1
     2016-10-31 17:14:02   cmd_event       D_FFO_Alarm
     2016-10-31 17:14:02   cmd_nr          1
     2016-10-31 17:14:02   e_D_FFO_Alarm_STATE 1
     2016-10-31 17:14:02   error           { fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }: Unknown command {, try help.
Unknown command if, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
     2016-10-31 17:14:02   state           cmd_1
   Condition:
     0          InternalDoIf($hash,'D_FFO_Alarm','STATE','','',AttrVal($hash->{NAME},'notexist',undef))
   Devices:
     0           D_FFO_Alarm
     all         D_FFO_Alarm
   Do:
     0:
       0          { fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }
   Helper:
     event      1
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   D_FFO_Alarm
     timerevent 1
     triggerDev D_FFO_Alarm
     timerevents:
       1
     timereventsState:
       state: 1
     triggerEvents:
       1
     triggerEventsState:
       state: 1
   Internals:
     0           D_FFO_Alarm:STATE
     all         D_FFO_Alarm:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   room       x_FFO



FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

das hier funktioniert:
([D_FFO_Alarm])({fhem("set remotebot message ALARM")})
## if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
## fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
## }
## if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
## fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
## }
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
## fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
## }
##})
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 31 Oktober 2016, 17:19:00
das hier funktioniert:
([D_FFO_Alarm])({fhem("set remotebot message ALARM")})
## if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
## fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
## }
## if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
## fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
## }
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
## fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
## }
##})


1. Die Definition wird ohne Semikolons funktionieren.
oder
2. Wenn Semikolon dann immer doppelt.
oder
3. FHEM-IF verwenden ohne fhem()-Befehl
oder
4. Readingangaben in DOIF/IF-Syntax verwenden



Bsp:

([D_FFO_Alarm]) (IF ([HMW01.O01_Leuchte_Flur_OG] eq "off") (set HMW01.O01_Leuchte_Flur_OG on-for-timer 300),
IF (..)(...),
IF (..)(...),
)


Ist kürzer und damit weniger fehlerträchtig.

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

Hi,
danke für deine Antwort.

ich habe zuerst 1) versucht:

([D_FFO_Alarm])({
fhem("set remotebot message ALARM")
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300")
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300")
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300")
}
})


Fehlermeldung:

{ fhem("set remotebot message ALARM") if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set
HMW01.O01_Leuchte_Flur_OG on-for-timer 300") } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set
HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300") } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set
HMW01.O04_Leuchte_HzgRaum on-for-timer 300") } }: syntax error at (eval 1010) line 1, near ") {" syntax error at (eval 1010) line 1, near "} }"


2) hat dann funktioniert:

([D_FFO_Alarm])({
fhem("set remotebot message ALARM");;
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");;
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");;
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");;
}
})

4) funktioniert leider auch nicht, hätte ich aber auch nicht erwartet:
    funktioniert, wenn das Reading zusätzlich in "" eingeschlossen wird, - cool, war mir nicht bekannt :-)
([D_FFO_Alarm])({
fhem("set remotebot message ALARM");;
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");;
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");;
}
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
if ("[HMW01.O04_Leuchte_HzgRaum]" eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");;
}
})


Der Grund, warum ich 3)IF nicht verwende, ist zum einen, dass ich ggf noch Berechnungen einbauen will - und zum anderen, dass ich versuche, irgendwie eine Kontinuität reinzukriegen, damit nicht jedes DOIF und notify in einer anderen Syntax geschrieben ist - ich seh so schon nicht mehr durch :/


Darf ich noch ne zweite Frage stellen?
([+:[D_sendAll_Interval]])({sendAllTemp()})
ergibt folgenden Fehler:
DF_sendAll DOIF: Wrong timespec :15: either HH:MM:SS or {perlcode}: +:[D_sendAll_Interval]

wohingegen
([+:15])({sendAllTemp()})
funktioniert. Laut Commandref hätte ich vermutet, dass ich beliebige Zahlen aus der Bedingung durch Variablen ersetzen kann?



FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 01 November 2016, 20:17:06

Darf ich noch ne zweite Frage stellen?
([+:[D_sendAll_Interval]])({sendAllTemp()})
ergibt folgenden Fehler:
DF_sendAll DOIF: Wrong timespec :15: either HH:MM:SS or {perlcode}: +:[D_sendAll_Interval]

wohingegen
([+:15])({sendAllTemp()})
funktioniert. Laut Commandref hätte ich vermutet, dass ich beliebige Zahlen aus der Bedingung durch Variablen ersetzen kann?

Dahinter steckt ein selbst geschriebener Parser, der nicht alle Variationen zulässt.

Übrigens, ich würde in diesem Fall mir das Leben etwas einfacher machen und gar kein if/IF verwenden.

([D_FFO_Alarm]) (set remotebot message ALARM,
                 set HMW01.O01_Leuchte_Flur_OG:FILTER=STATE=off on-for-timer 300,
         ...
                 )




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

Interessanter Ansatz  :o
Werde ich morgen mal verfolgen, danke!

Hast du denn eine Idee, wie ich das "jede volle Viertelstunde" variabel umsetze? mit [+[D_dummy]] soll es ja laut commandref funktionieren.. aber ist eigentlich nicht ganz das, was ich will...

Danke
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

#6
Zitat von: abc2006 am 01 November 2016, 23:28:51
Interessanter Ansatz  :o
Werde ich morgen mal verfolgen, danke!

Hast du denn eine Idee, wie ich das "jede volle Viertelstunde" variabel umsetze? mit [+[D_dummy]] soll es ja laut commandref funktionieren.. aber ist eigentlich nicht ganz das, was ich will...

Danke
Stephan
jede volle Viertelstunde indirekt geht z. Zt. nur mit

set D_dummy +:15

[[D_dummy]]

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF