FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: maddinthebrain am 24 Juli 2019, 13:01:45

Titel: [gelöst]condition c01: Argument "off" isn't numeric in numeric eq (==)
Beitrag von: maddinthebrain am 24 Juli 2019, 13:01:45
Hallo zusammen,
ich habe einen DOIF erstellt. Dieser soll zum Sonnenuntergang oder wenn der Wind zu stark oder wenn der Gewitterwarner anschlägt die Markise einfahren. Aber nur wenn die Markise auch wirklich ausgefahren ist. Den Code siehe unten


Internals:
   DEF        (
(
[[Sonnenuntergang]] || [Windwarner] == "on" || [Gewitterwarner] == "on"
)
&& [Markise:position] > 0
)
(
set Markise up
)
   FUUID      5c937ae4-f33f-ab72-e8dc-99b04ab41e1ad91e
   MODEL      FHEM
   NAME       di_Markise_zu
   NR         213
   NTFY_ORDER 50-di_Markise_zu
   STATE      cmd_2
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   Helper:
     DBLOG:
       cmd:
         logmysql:
           TIME       1563965813.83629
           VALUE      2
       cmd_event:
         logmysql:
           TIME       1563965813.83629
           VALUE      di_Markise_zu
       cmd_nr:
         logmysql:
           TIME       1563965813.83629
           VALUE      2
       error:
         logmysql:
           TIME       1563965800.16069
           VALUE      condition c01
       mode:
         logmysql:
           TIME       1563965812.83145
           VALUE      enabled
       state:
         logmysql:
           TIME       1563965813.83629
           VALUE      cmd_2
       warning:
         logmysql:
           TIME       1563965980.21711
           VALUE      condition c01
   READINGS:
     2019-07-24 12:59:40   Device          Windwarner
     2019-07-24 12:56:53   cmd             2
     2019-07-24 12:56:53   cmd_event       di_Markise_zu
     2019-07-24 12:56:53   cmd_nr          2
     2019-07-24 12:59:40   e_Windwarner_STATE off
     2019-07-24 12:56:52   mode            enabled
     2019-07-24 12:56:53   state           cmd_2
     2019-07-24 12:56:52   timer_01_c01    24.07.2019 21:00:00
     2019-07-24 12:59:40   warning         condition c01: Argument "off" isn't numeric in numeric eq (==)

   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0            (  ::DOIF_time_once($hash,0,$wday) || ::InternalDoIf($hash,'Windwarner','STATE') == "on" || ::InternalDoIf($hash,'Gewitterwarner','STATE') == "on"  )  && ::ReadingValDoIf($hash,'Markise','position') > 0
   days:
   devices:
     0           Windwarner Gewitterwarner Markise
     all         Windwarner Gewitterwarner Markise
   do:
     0:
       0           set Markise up
     1:
   helper:
     event      off
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   Windwarner
     timerevent off
     triggerDev Windwarner
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: di_Markise_zu
       state: cmd_2
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
     0           Windwarner:STATE Gewitterwarner:STATE
     all         Windwarner:STATE Gewitterwarner:STATE
   intervalfunc:
   itimer:
     all         Sonnenuntergang
   localtime:
     0          1563994800
   readings:
     0           Markise:position
     all         Markise:position
   realtime:
     0          21:00:00
   time:
     0          [Sonnenuntergang]
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   trigger:
   triggertime:
     1563994800:
       localtime  1563994800
       hash:
   uiState:
   uiTable:
Attributes:


Es kommt aber der Fehler "condition c01: Argument "off" isn't numeric in numeric eq (==)". Was ist denn hier der Fehler? Ist mein ersten größeres DOIF. Passen die Operatoren, muss ich die Parameter noch irgenwie casten?

Vielen Dank!

Grüße Martin
Titel: Antw:condition c01: Argument "off" isn't numeric in numeric eq (==)
Beitrag von: Haecksler am 24 Juli 2019, 13:27:48
Falscher Operator du musst eq statt == vewenden.
Titel: Antw:condition c01: Argument "off" isn't numeric in numeric eq (==)
Beitrag von: maddinthebrain am 24 Juli 2019, 14:12:31
ok vielen Dank, dachte ich mir schon, dass das sowas ist.

Gibt es eine Liste mit den ganzen Operatoren? Ich finden nur welche für Perl... Das sollte eigentlich in den Einsteigerleitfaden.

Grüße Martin
Titel: Antw:condition c01: Argument "off" isn't numeric in numeric eq (==)
Beitrag von: Haecksler am 24 Juli 2019, 14:21:07
ZitatDie Unterscheidung wird also nicht zum Zeitpunkt der Variablendeklaration durchgeführt, sondern
durch die Auswahl des Operators (hier > oder gt). Daher merke:
<, >, <=, >=, ==, != sind numerische Operatoren
lt, gt, le, ge, eq, ne sind die entsprechenden Stringvergleichsoperatoren

Seite 40 Einsteigerleitfaden  ;D
Titel: Antw:condition c01: Argument "off" isn't numeric in numeric eq (==)
Beitrag von: maddinthebrain am 24 Juli 2019, 14:27:41
Aha, leider steht das nicht im entsprechenden wiki-Artikel. Da hatte ich zuerst geschaut. Generell habe ich diese Hinweise im Wiki nicht so wirklich gefunden.

Dankeschön!  :D