(Gelöst) DOIF "and" und "and"? Synatx error...

Begonnen von misux, 17 März 2018, 01:31:41

Vorheriges Thema - Nächstes Thema

misux

Hi, versuche ein Doif mit 2x and und Wochenzeit  zu erstellen. Die Einschaltzeiten werden angezeigt aber beim ausführen wird nicht geschaltet und ich bekomme ein Syntax error.....

Was mache ich falsch?
(([Tageslicht_weather:"Nacht"]) and ([DavidFruehschicht:"on"]) and ([01:00:00|123456] [06:45:00|0])) (set Deckenfluter on) DOELSE (set Deckenfluter off)

Hier der error:    
condition c01: syntax error, DOIF_time_once"

Und ein warning:
condition c01: (Missing operator before DOIF_time_once?)

Und der Listeintrag:
   Internals:
   CFGFN     
   DEF        ([Tageslicht_weather:"Nacht"] and [DavidFruehschicht:"on"] and [01:00:00|123456] [06:45:00|0])  (set Deckenfluter on) DOELSE (set Deckenfluter off)
   NAME       DeckenfluterOnOff
   NR         702
   NTFY_ORDER 50-DeckenfluterOnOff
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-03-17 01:12:20   cmd             0
     2018-03-17 01:12:31   error           condition c01: syntax error, DOIF_time_once"

     2018-03-17 01:12:20   mode            enabled
     2018-03-17 01:12:20   state           initialized
     2018-03-17 01:12:20   timer_01_c01    18.03.2018 01:00:00|123456
     2018-03-17 01:12:20   timer_02_c01    17.03.2018 06:45:00|0
     2018-03-17 01:12:31   warning         condition c01: (Missing operator before DOIF_time_once?)

   Regex:
   condition:
     0          EventDoIf('Tageslicht_weather',$hash,'Nacht',1) and EventDoIf('DavidFruehschicht',$hash,'on',1) and DOIF_time_once($hash,0,$wday,"123456") DOIF_time_once($hash,1,$wday,"0")
   days:
     0          123456
     1          0
   devices:
     0           Tageslicht_weather DavidFruehschicht
     all         Tageslicht_weather DavidFruehschicht
   do:
     0:
       0          set Deckenfluter on
     1:
       0          set Deckenfluter off
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev
   internals:
   itimer:
   localtime:
     0          1521331200
     1          1521265500
   readings:
   realtime:
     0          01:00:00
     1          06:45:00
   time:
     0          01:00:00
     1          06:45:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
     all         Tageslicht_weather DavidFruehschicht
   triggertime:
     1521265500:
       localtime  1521265500
       hash:
     1521331200:
       localtime  1521331200
       hash:
   uiState:
   uiTable:
Attributes:
   room       2 DOIF

Ellert

Du hast einen Operator vergessen, vermutlich or.

misux

Okayyyy, das müsste ich jetzt noch verstehen...  :-\

Damian

([01:00:00|123456] [06:45:00|0]))

Das ist wohl kein Zeitintervall, sondern zwei Zeitangaben, die logisch miteinander verknüpft werden wollen, soviel sei verraten: and würde hier keinen Sinn machen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Icinger

([01:00:00|123456] [06:45:00|0]))
Zwei unterschiedliche Zeitangaben innerhalb einer Bedingung werden nicht funktionieren ......

Also sollte in etwa eher so aussehen:
([01:00:00|123456]) or ( [06:45:00|0]))

PS: Damian war schneller :D
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Damian

Zitat von: Icinger am 17 März 2018, 08:38:04
([01:00:00|123456] [06:45:00|0]))
Zwei unterschiedliche Zeitangaben innerhalb einer Bedingung werden nicht funktionieren ......

Also sollte in etwa eher so aussehen:
([01:00:00|123456]) or ( [06:45:00|0]))

PS: Damian war schneller :D

ich denke, er will eher

([01:00:00|123456] or  [06:45:00|0])

denn or ist in der Rangpriorität hinter and, and bindet stärker als or - daher or klammern, wenn die letzte Zeitangabe nicht für sich alleine stehen soll.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

Joaaa, ich denke das ist was ich will... Komme aber mit dem or nicht klar im Kopf....

Ich möchte das das Licht um 1:00 UND 6:45 uhr an geht...  Das macht mich wuschig in meinen Schaltkreisen...

Muss ich dieses or zwischen den Zeiten so sehen das er mir das licht zu den beiden Zeiten einschaltet?

misux

Habe es jetzt mal getestet... Er zeigt zwar keinen Fehler mehr und führt im Fhem die Schaltung durch, aber er setzt mir den Deckenfluter nicht on...

Was mache ich falsch? Habe schon sämtliche klammersetzungen getestet...

  (([Tageslicht_weather:"Tag"]) and ([DavidFruehschicht:"on"]) and ([11:14:00|123456] or [06:45:00|0])) (set Deckenfluter on) DOELSE (set Deckenfluter off) 

Frank_Huber

Ich würde aber die Abfrage "Tag" und "Frühschicht" auf Zustand umbauen. Event ist hier eher ungünstig.

((also [Tageslicht_waether] eq "Tag" and [DavidFruehschicht] eq "on") and (.......)) (set ....)

Weiterer Tip: für Frühschicht wäre "ja/nein" bestimmt verständlicher. :-)

misux

 ;D Hervorragend! Jetzt klappt es auch mit dem Nachbarn!

Vielen Dank!!!

HIer der funktionierende Code:
([Tageslicht_weather] eq "Tag" and [DavidFruehschicht] eq "on" and [05:45:00|123456] or [06:45:00|0]) (set Deckenfluter on) DOELSE (set Deckenfluter off)