Hauptmenü

DOIF mit indirekten Zeitangaben

Begonnen von Damian, 25 Februar 2015, 19:19:38

Vorheriges Thema - Nächstes Thema

moonsorrox

#45
Zitat von: Damian am 01 März 2015, 13:57:30
Ich denke, dass wir über die neue Modul reden und nicht über das alte. Dass beim alten auf einmal etwas nicht funktioniert, dürfte recht unwahrscheinlich sein.
schon klar, ich hatte nur etwas Muffe, da ja alles auf meinem Produktivsystem nicht funktionierte, deshalb also wieder das "alte" DOIF rein.

Werde es jetzt nochmals mit dem Modul aus dem Post hier machen.

Zitat von: Damian am 01 März 2015, 13:57:30
Was mir bei deinen list-Ausgaben auffiel war, dass keine Realtime-Einträge vorhanden waren. Zu jedem Time-Eintrag muss es einen Realtime-Eintrag existieren, wie hier:

Realtime:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   State:
   Time:
     0          06:25:00
     1          08:00:00
     2          15:00:00
     3          22:00:00
     4          06:25:00
     5          08:30:00
     6          08:30:00
     7          23:30:00
   Timecond:

OK, werde ich jetzt mal testen...!

Zitat von: Damian am 01 März 2015, 13:57:30
Du kannst folgendes noch mal testen:

save config, shutdown, das letzte Modul aus Post 6 runterladen, ins FHEM-Verzeichnis kopieren, System hochfahren, beim test-DOIF Modul mit list schauen, ob Realtime gesetzt wurde, dann sollte alles funktionieren, wie bisher.
Ok, werde berichten
...dann sollten die Realtime Einträge in meinen andere DOIFs aber auch vorhanden sein..? Gerade mal geschaut und alle drin..! :D
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#46
@Damian

also der Befehl meines di_testDOIF wurde ausgeführt  und es erscheinen auch die Realtime Einträge.
Hier das List:
Internals:
   CFGFN
   DEF        ([14:15]) (set LichtOG on)
   NAME       di_testDOIF
   NR         2776
   NTFY_ORDER 50-di_testDOIF
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-03-01 14:15:00   cmd_event       timer_1
     2015-03-01 14:15:00   cmd_nr          1
     2015-03-01 14:15:00   state           cmd_1
     2015-03-01 14:15:00   timer_1_c1      02.03.2015 14:15:00
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0          set LichtOG on
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          14:15:00
   State:
   Time:
     0          14:15:00
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:
   room       AutomationTest


ich lasse das "neue" Modul jetzt mal drin und werde sehen ob alles geht heute.
Die anderen DOIFs haben ich die Realtime Einträge drin, somit sollte alles funktionieren
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#47
@Damian
es könnte ein Fehler sein...!

EDITH:/ kleiner Zusatz von mir, ein Neustart bringt wieder die Realtime Einträge

was mir wichtiges aufgefallen ist, ein erneutes einlesen von Fhem überlebt das Modul nicht...!
Ich hänge mal ein list meiner Wegbeleuchtung dran.... da fehlen dies Realtime-Einträge total obwohl sie eben noch da waren
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         293
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-03-01 01:15:00   cmd_event       timer_5
     2015-03-01 01:15:00   cmd_nr          3
     2015-03-01 01:15:00   state           cmd_3
     2015-03-01 14:13:32   timer_1_c1      01.03.2015 18:53:17|12345
     2015-03-01 14:13:32   timer_2_c1      01.03.2015 18:46:37|06
     2015-03-01 14:13:32   timer_3_c2      01.03.2015 21:03:17|0123456
     2015-03-01 14:13:32   timer_4_c3      02.03.2015 00:15:00|12345
     2015-03-01 14:13:32   timer_5_c3      02.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 01 März 2015, 14:27:54
@Damian
es könnte ein Fehler sein...!

was mir wichtiges aufgefallen ist, ein erneutes einlesen von Fhem überlebt das Modul nicht...!
Ich hänge mal ein list meiner Wegbeleuchtung dran.... da fehlen dies Realtime-Einträge total obwohl sie eben noch da waren
Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [ZeitsteuerungWeg] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([ZeitsteuerungWeg] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([ZeitsteuerungWeg] =~ "Aus|Dämmerung")(attr ZufallsTimerWeglicht disable 1)
DOELSEIF([ZeitsteuerungWeg] eq "Zufall")(attr ZufallsTimerWeglicht disable 0)




   NAME       di_WegBeleuchtung
   NR         293
   NTFY_ORDER 50-di_WegBeleuchtung
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-03-01 01:15:00   cmd_event       timer_5
     2015-03-01 01:15:00   cmd_nr          3
     2015-03-01 01:15:00   state           cmd_3
     2015-03-01 14:13:32   timer_1_c1      01.03.2015 18:53:17|12345
     2015-03-01 14:13:32   timer_2_c1      01.03.2015 18:46:37|06
     2015-03-01 14:13:32   timer_3_c2      01.03.2015 21:03:17|0123456
     2015-03-01 14:13:32   timer_4_c3      02.03.2015 00:15:00|12345
     2015-03-01 14:13:32   timer_5_c3      02.03.2015 01:15:00|06
   Condition:
     0           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"12345") or DOIF_time_once($hash->{timer}{4},$wday,"06"))
     3          InternalDoIf('ZeitsteuerungWeg','STATE','') =~ "Aus|Dämmerung"
     4          InternalDoIf('ZeitsteuerungWeg','STATE','') eq "Zufall"
   Days:
     0          12345
     1          06
     2          0123456
     3          12345
     4          06
   Devices:
     0           ZeitsteuerungWeg
     1           ZeitsteuerungWeg
     2           ZeitsteuerungWeg
     3           ZeitsteuerungWeg
     4           ZeitsteuerungWeg
     all         ZeitsteuerungWeg
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
     3          attr ZufallsTimerWeglicht disable 1
     4          attr ZufallsTimerWeglicht disable 0
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           ZeitsteuerungWeg:STATE
     1           ZeitsteuerungWeg:STATE
     2           ZeitsteuerungWeg:STATE
     3           ZeitsteuerungWeg:STATE
     4           ZeitsteuerungWeg:STATE
     all         ZeitsteuerungWeg:STATE
   Itimer:
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:


Was verstehst du unter erneutes einlesen von Fhem? Änderung über DEF oder Neustart des Systems?

Gruß

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

moonsorrox

#49
ein "rereadcfg" ist bei mir einlesen
ein "shutdown restart" ist bei mir Neustart ich habe dafür Button auf der Weboberfläche erstellt

jetzt nach einem Neustart sind die Realtime Einträge wieder da, lese ich wiederum ein sind sie wieder weg...! verstanden..? ;)
Auch ein save davor bringt nichts...


schau mal den screenshot
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 01 März 2015, 14:41:44
ein "rereadcfg" ist bei mir einlesen
ein "shutdown restart" ist bei mir Neustart ich habe dafür Button auf der Weboberfläche erstellt

jetzt nach einem Neustart sind die Realtime Einträge wieder da, lese ich wiederum ein sind sie wieder weg...! verstanden..? ;)
Auch ein save davor bringt nichts...


schau mal den screenshot

gut, dass wir darüber gesprochen haben, ein rereadcfg habe ich bei mir noch nicht benutzt. Ich kann das Verhalten bei mir reproduzieren. Ich melde mich, wenn ich das Problem behoben habe. Solange musst du das alte Modul benutzen, oder kein rereadcfg ausführen :)

Gruß

Damian

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

moonsorrox

@Damian...

Super.. ;) schön das ich auch mal helfen konnte  :D

ja klar soweit ich das weiß tue ich dieses natürlich nicht... ich lass das "neue" Modul drin und habe es oben dick anmarkiert, damit es jeder weiß...
Danke
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 01 März 2015, 15:07:10
@Damian...

Super.. ;) schön das ich auch mal helfen konnte  :D

ja klar soweit ich das weiß tue ich dieses natürlich nicht... ich lass das "neue" Modul drin und habe es oben dick anmarkiert, damit es jeder weiß...
Danke

habe es gefixt. Jetzt funktioniert auch rereadcfg - neue Version im ersten Post.

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

moonsorrox

#53
Zitat von: Damian am 01 März 2015, 15:24:13
habe es gefixt. Jetzt funktioniert auch rereadcfg - neue Version im ersten Post.

bist du ein schneller "Hund"  ;) :P
Danke... und immer wieder "tolles Modul"  :D

So... jetzt erst mal nen Kaffee  :D

EDITH://
mal ein kleiner Zwischeneinwurf:
ich arbeite immer noch an meiner Version mit dem Türkontakt hier in diesem Thread, aber irgendwie habe ich da einen Knoten im Kopf und schaffe es nicht, kann mir jemand einen Denkanstoß geben.. :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Spartacus

Zitat von: flurin am 27 Februar 2015, 21:55:25
Eine kleine Bemerkung: bei Deinem Einzeiler muss der Dummy immer noch definiert werden:


define end_time dummy

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)


Edit: so geht's auch  ;)


define end_time dummy

define di_time_var DOIF ([06:30]-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)


Gruss
flurin

Hallo,
nachdem ich nun fast 2 Tage ohne Internetzugriff war, habe ich mir die Sache mit dem trigger auf die endtime angesehen. Aber so richtig habe ich das immer noch nicht gerafft.

Der Code von flurin funktioniert nicht. Irgendwo fehlt eine Klammer, aber ich habe keinen Plan wo!
vermutet habe ich diese Stelle:
DOIF ([06:30]-[end_time]])
aber weder
DOIF ([06:30]-[end_time])
noch
DOIF ([06:30]-[[end_time]])
führen hier zum Erfolg!
Das Dummy end_time hat nicht die Zeit, sondern wird auf " {OffTimeLicht()}" gesetzt.
Ich bin irgendwie noch nicht ganz bei Euch angekommen!
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

flurin

Hallo Spartacus

Eine Klammer ist zu viel! Ich werde es berichtigen.

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)

Gruss
flurin

Damian

Zitat von: flurin am 02 März 2015, 17:28:35
Hallo Spartacus

Eine Klammer ist zu viel! Ich werde es berichtigen.

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {OffTimeLicht()}) DOELSE (set flex_lamp off)

Gruss
flurin

und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

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

flurin

Zitat von: Damian am 02 März 2015, 17:33:04
und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

Damian

OK, gut zu wissen!, Danke

Gruss
flurin

flurin

#58
Zitat von: Damian am 02 März 2015, 17:33:04
und wenn du

define di_time_var DOIF ([06:30-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

nimmst, so wie ich ursprünglich vorgeschlagen habe, wird im Dummy  die Zeit gesetzt und nicht die Funktion. Beide Lösungen sollten allerdings funktionieren.

Gruß

Damian

Ich habe es gleich ausprobiert, jedoch auch mit Klammern erhalte ich nur die Funktion.

([17:48-[end_time]]) (set flex_lamp on, set end_time { (OffTimeLicht()) } ) DOELSE (set flex_lamp off)

Internals:
   NAME       end_time
   NR         310
   STATE      { (OffTimeLicht()) }
   TYPE       dummy
   Readings:
     2015-03-02 17:48:00   state           { (OffTimeLicht()) }
Attributes:
   group      Dummy


Edit: so ist es OK:

([17:48-[end_time]]) (set flex_lamp on, set end_time {(OffTimeLicht())}) DOELSE (set flex_lamp off)

ohne Space nach { und vor }

Damian

Zitat von: flurin am 02 März 2015, 17:50:44
ohne Space nach { und vor }

ja, denn in der Commandref steht:

ZitatEs können beim Attribut state ebenfalls Berechnungen in geschweiften Klammern durchgeführt werden. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen.

und da ist Leerzeichen nicht erlaubt um möglichst kompatibel zum restlichen FHEM zu sein.

Gruß

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