Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: juppzupp am 07 Januar 2015, 18:52:52
ok, danke.
in der commandref hatte ich gelesen, das immer der erste fall der matched genommen wird, und da doelse ganz hinten steht.......
falsch interpretiert.

ja, wenn er "matched". Aber die Angabe [16:00-18:30] ist genau ab 18:30 nicht wahr, also "matched" nicht. Und die anderen Angaben werden um 18:30 erst gar nicht ausgewertet, weil der gesetzte Timer um 18:30 ja nur für die erste Bedingung gilt.

Als Regel: Es ist immer kritisch bei mehreren Bedingungen den DOELSE-Fall anzugeben.

Gruß

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

juppzupp

ich steh aufm schlauch. das [16:00-18:30] nicht wahr ist, ist klar, aber warum ist [18:30-23:00|8] dann nicht wahr ?

Damian

Zitat von: Michi240281 am 07 Januar 2015, 19:55:30
Habe immer noch Probleme! Irgendwas scheint mit dem Modul nicht zu stimmen! Habe meinen DOELSEIF Fall mal auf ein Minimum reduziert, dennoch geht der state nur auf initialized!

([Temperatur_Garage:humidity] > 60 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 3 and [Temperatur_Garage:temperature] < 9 and ([Temperatur_Garage:temperature]-[MyWeather:temperature] < 3) and [12:00-20:00] and [Abwesend:state] eq "nein" and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:25:00 set Garage_Schalten Schliessen) DOELSEIF ([Temperatur_Garage:temperature] > 15) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_3 at +00:25:00 set Garage_Schalten Schliessen)

Jmd ne Idee?
Der Zustand ist nach der Definition immer "initialized" bis eine Bedingung wahr wird und der Zustand auf cmd.. wechselt und bei dir ist das offenbar bis jetzt nicht der Fall.

Gruß

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

Damian

Zitat von: juppzupp am 07 Januar 2015, 20:08:38
ich steh aufm schlauch. das [16:00-18:30] nicht wahr ist, ist klar, aber warum ist [18:30-23:00|8] dann nicht wahr ?

ok. ich sehe gerade, dass du noch eine Bedingung um 18:30 Uhr hast. Das Problem hatten wir schon mal. Es werden z. Zt. mehrere Time gesetzt auch wenn sie die gleiche Zeit haben. Die Reihenfolge der Abarbeitung ist nicht gewährleistet. Bei dir schlägt offenbar der zweite Timer um 18:30 zuerst zu und dann erst der erste.

Zukünftig werde ich in solchen Fällen nur einen Timer definieren, bei dem die Reihenfolge der Abarbeitung von links nach recht geregelt ist. Als Abhilfe: Definiere den zweiten Timer einfach auf  [18:30:01-23:00|8], dann kommt er ziemlich sicher als zweiter dran.


Gruß

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

juppzupp

Zitat von: Damian am 07 Januar 2015, 20:16:11
Als Abhilfe: Definiere den zweiten Timer einfach auf  [18:30:01-23:00|8], dann kommt er ziemlich sicher als zweiter dran.

klappt perfekt ! danke.

The-Holgi

Hallo,
möchte mit einer FS20 Fernbedienung meine Hue Beleuchtung anschalten. Soweit funktioniert das auch, wollte jetzt nach dem einschalten mit einer kleinen Pause den effect colorloop starten. Leider funktioniert das so nicht:
([FS20_S8_B] eq "on" or [FS20_S8_B] eq "dimup") (set huebridge_HUEGroup0 on) wait 3 (set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)
Wo liegt der Fehler?

Gruß Holgi
Raspberry Pi 5

MaJu

Probiere mal
(set huebridge_HUEGroup0 on, wait 3, set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)
Erlebnisreiche Grüße aus Leipzig!

The-Holgi

Supi,
besten Dank. Das klappt so jetzt, es sind zwar scheinbar keine 3 Sekunden Pause aber die Lampe schaltet in den colorloop. Darum ging es ja.

Gruß Holgi
Raspberry Pi 5

MaJu

Sollte man besser sleep verwenden statt wait?
Erlebnisreiche Grüße aus Leipzig!

Damian

Zitat von: MaJu am 09 Januar 2015, 15:37:00
Sollte man besser sleep verwenden statt wait?

Bei sleep in Kombination mit DOIF wird das System für die Zeit stillgelegt. Wait zwischen den Kommandos ist noch nicht realisiert. Z. Zt. ist at die einzige sinnvolle Lösung.

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

Brockmann

Zitat von: MaJu am 09 Januar 2015, 15:37:00
Sollte man besser sleep verwenden statt wait?
Weder noch...
sleep in Verbindung mit DOIF ist blocking, sofern sich das mit dem letzten Update nicht behoben wurde.
Und was genau soll das "wait 3" bewirken???

Sinnvoller wäre (ungetestet):

(set huebridge_HUEGroup0 on, define tmp_blah at +00:03 set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)

The-Holgi

Zitat von: Brockmann am 09 Januar 2015, 16:17:14

Und was genau soll das "wait 3" bewirken???


[/code]

Das wait 3 Hatte ich aus dem ersten Beitrag:
define di_test DOIF (<Bedingung>)(<Kommando1>)wait <sec>(<Kommando2>)

Gruß Holgi
Raspberry Pi 5

Brockmann

Zitat von: The-Holgi am 09 Januar 2015, 16:46:22
Das wait 3 Hatte ich aus dem ersten Beitrag:
Und da steht es auf der "ToDo"-Liste, also als für die Zukunft geplantes Feature.

maxritti

Hi,

ich verstehe es momentan nicht.
Ab und zu gehen bei mir der ein und andere Rollo nicht runter, an anderen Tagen geht der dann wieder, dafür bleibt manchmal ein anderer oebn.

Diesmal war es dieser hier:

Der hätte doch mMn eben, als EG_dr_TS_Terrasse_luminosity kleiner als der Schwellwert aus dem Dummy du_Rollo_Luminosity_ru (0,7) geworden ist ein off Signal bekommen sollen.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)
   NAME       di_OG_elt_RO_Strasse
   NR         176
   NTFY_ORDER 50-di_OG_elt_RO_Strasse
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-07 16:59:54   cmd_event       EG_dr_TS_Terrasse
     2015-01-07 16:59:54   cmd_nr          1
     2015-01-09 17:00:52   e_EG_dr_TS_Terrasse_luminosity 0.43
     2015-01-09 16:58:51   e_OG_elt_RO_Strasse_STATE off
     2015-01-07 16:59:54   state           cmd_1
     2015-01-09 16:10:00   timer_1_c1      10.01.2015 16:10:00
     2015-01-08 21:30:00   timer_2_c1      09.01.2015 21:30:00
     2015-01-08 21:30:00   timer_3_c1      09.01.2015 21:30:00
     2015-01-09 06:40:00   timer_4_c2      10.01.2015 06:40:00
     2015-01-09 09:30:00   timer_5_c2      10.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('OG_elt_RO_Strasse','STATE','') ne "on" and InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           OG_elt_RO_Strasse du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru OG_elt_RO_Strasse
   Do:
     0          set OG_elt_RO_Strasse off
     1          set OG_elt_RO_Strasse on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           OG_elt_RO_Strasse:STATE du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE OG_elt_RO_Strasse:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   
Dieser hier ging einwandfrei runter.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_ki1_RO_Carport off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_ki1_RO_Carport on)
   NAME       di_OG_ki1_RO_Carport
   NR         175
   NTFY_ORDER 50-di_OG_ki1_RO_Carport
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-09 16:52:23   cmd_event       EG_dr_TS_Terrasse
     2015-01-09 16:52:23   cmd_nr          1
     2015-01-09 17:03:57   e_EG_dr_TS_Terrasse_luminosity 0.36
     2015-01-09 16:52:23   state           cmd_1
     2015-01-09 16:10:00   timer_1_c1      10.01.2015 16:10:00
     2015-01-08 21:30:00   timer_2_c1      09.01.2015 21:30:00
     2015-01-08 21:30:00   timer_3_c1      09.01.2015 21:30:00
     2015-01-09 06:40:00   timer_4_c2      10.01.2015 06:40:00
     2015-01-09 09:30:00   timer_5_c2      10.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
   Do:
     0          set OG_ki1_RO_Carport off
     1          set OG_ki1_RO_Carport on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht.
Es wäre super, wenn da mal einer einen Blick drauf werfen könnte.

Brockmann

Zitat von: maxritti am 09 Januar 2015, 17:07:58
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht.
Es wäre super, wenn da mal einer einen Blick drauf werfen könnte.
Naja, es gibt ja einen kleinen, aber feinen Unterschied zwischen den Defintionen, die Du hier aufgelistet hast. Den kannst Du ja auch selbst leicht herausfinden. Höchstwahrscheinlich macht genau dieser Unterschied den ... hm ... Unterschied aus. Tipp: Er liegt nicht im DOIF, sondern im DOELSEIF-Zweig.

Vielleicht kann der DOELSEIF-Fall dadurch nie eintreten, dann bleibt das DOIF dauerhaft im cmd_1-Status. Ein erneutes Eintreten der DOIF-Bedingungen führt dann nicht zu einer Statusänderung des DOIFs, also passiert auch nichts. Das ist aber nur eine Vermutung, die zum geschilderten Verhalten passen würde. Zumindest aber ist das erste DOIF ja schon seit zwei Tagen im Status cmd_1, seitdem ist also anscheinend der DOELSEIF-Fall nie eingetreten. Folglich konnte es heute auch nicht auf den DOIF-Fall reagieren.