at zu einer Variablen Zeit

Begonnen von spacy, 15 Mai 2015, 14:18:45

Vorheriges Thema - Nächstes Thema

Wuppi68

verbose auf 5 setzen und ins Log schauen?
FHEM unter Proxmox als VM

spacy

schon passiert nichts zu sehen

maxritti

Zitat von: gloob am 18 Mai 2015, 13:19:56
Hallo,

Zum automatischen Update per DOIF habe ich auch nochmal eine Frage. Ich habe  versucht das ganze jetzt so umzusetzen, jedoch wird die Aktion bei mir nicht ausgeführt. Hab ich irgendwo noch einen Fehler?


# Water morning
define time dummy
set time 13:18:00
define water3 DOIF ([[time]]) (define waterMorning at +*{6}00:00:10 set Steckdose.K5 on-for-timer 5)

Genauso?

Bei Damian sehe ich zumindest noch ein Attribut was zu setzen ist:

attr Wasser_Seite_Ein_Auto do always

maxritti

War ja quatsch mit dem do always.
Zumindest das erste mal geht das ganz wunderbar.

Einfach mal Deine 3 Zeilen (mit angepasster Zeit) per Copy & Paste in Fhem eingegeben

define time dummy
set time 17:25:00
define water3 DOIF ([[time]]) (define waterMorning at +*{6}00:00:10 set Steckdose.K5 on-for-timer 5)


und das DOIF triggerte um 17:25:00


Damian

Zitat von: maxritti am 18 Mai 2015, 17:27:49
War ja quatsch mit dem do always.
Zumindest das erste mal geht das ganz wunderbar.

Einfach mal Deine 3 Zeilen (mit angepasster Zeit) per Copy & Paste in Fhem eingegeben

define time dummy
set time 17:25:00
define water3 DOIF ([[time]]) (define waterMorning at +*{6}00:00:10 set Steckdose.K5 on-for-timer 5)


und das DOIF triggerte um 17:25:00

na ja, wenn möchte, dass das Modul nochmal den Befehl ausführt (auch mit neuer Zeitangabe), dann muss man schon do always setzen, denn es gibt ja nur den einen Zustand. Genaueres zu do always kann man in der Commanderf zu DOIF nachlesen.

Gruß

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

spacy

Hallo Damian,

danke für Deine Hilfe. Leider passiert nichts wenn ich das so eintrage wie Du es mir aufgetragen hast.

Wenn ich aber anstatt der Variable eine Feste Zeit eintrage dann funktionier es nicht. Hast du noch nen Tip für mich wo mein Fehler liegen könnte bzw wo bei mir in der Birne der Fehler legt.
Ich danke dir sehr für deine fachliche Hilfe

Gruß
Klaus


Damian

Zitat von: spacy am 18 Mai 2015, 18:48:58
Hallo Damian,

danke für Deine Hilfe. Leider passiert nichts wenn ich das so eintrage wie Du es mir aufgetragen hast.

Wenn ich aber anstatt der Variable eine Feste Zeit eintrage dann funktionier es nicht. Hast du noch nen Tip für mich wo mein Fehler liegen könnte bzw wo bei mir in der Birne der Fehler legt.
Ich danke dir sehr für deine fachliche Hilfe

Gruß
Klaus

Hallo Klaus,

damit wir hier nicht wieder raten müssen, was das Problem ist, brauchst du nur die Ausgabe von list <dein_doif_modul> hier zu posten, dann kann ich dir direkt sagen, wo das Problem liegt.


Gruß

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

flurin

#37
Zitat von: gloob am 18 Mai 2015, 13:19:56
Hallo,

Zum automatischen Update per DOIF habe ich auch nochmal eine Frage. Ich habe  versucht das ganze jetzt so umzusetzen, jedoch wird die Aktion bei mir nicht ausgeführt. Hab ich irgendwo noch einen Fehler?


# Water morning
define time dummy
set time 13:18:00
define water3 DOIF ([[time]]) (define waterMorning at +*{6}00:00:10 set Steckdose.K5 on-for-timer 5)


Für solche Fälle habe ich die Repeat-Funktion geschrieben.


define du_time dummy
set du_time 13:18

define du_interval dummy
set du_interval 10

define du_repeat dummy
set du_repeat 6



define di_repeat_cmd DOIF ([[du_time]] or [[du_repeat:time]])
(set Steckdose.K5 on-for-timer 5,
{set_repeat_time("du_repeat","du_interval")})
attr di_repeat_cmd do always


Repeat-Funktion siehe:

http://forum.fhem.de/index.php/topic,36814.0.html


Gruss
flurin

spacy

Internals:
   CFGFN      ./config/relay.cfg
   DEF        ( [+[Ventil2Start]] and [Ventil2] eq "auto") (set relais Port5 on-for-timer [Ventil2Dauer])
   NAME       Wasser_Tropfschlauch_Ein_Auto
   NR         109
   NTFY_ORDER 50-Wasser_Tropfschlauch_Ein_Auto
   STATE      ???
   TYPE       DOIF
   Readings:
     2015-05-18 20:31:15   timer_1_c1      19.05.2015 14:56:15
   Condition:
     0           DOIF_time_once($hash->{timer}{0},$wday,"") and InternalDoIf('Ventil2','STATE','') eq "auto"
   Days:
   Devices:
     0           Ventil2
     all         Ventil2
   Do:
     0          set relais Port5 on-for-timer [Ventil2Dauer]
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
     0           Ventil2:STATE
     all         Ventil2:STATE
   Itimer:
     all         Ventil2Start
   Realtime:
     0          14:56:15
   State:
   Time:
     0          +[Ventil2Start]
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:


so sieht es aus, also genauso wie auch beim at befehl den ich genutzt hatte im state sind drei ?
Wieso no.
Wenn ich nen list auf das Ventil2Start mache sieht das so aus
Internals:
   CFGFN      ./config/relay.cfg
   NAME       Ventil2Start
   NR         104
   STATE      18:25
   TYPE       dummy
   Readings:
     2015-05-18 18:23:49   state           18:25
Attributes:
   alias      Beregnung Start Tropfschlauch
   group      Tropfschlauch
   room       Bewässerung
   setList    state:time
   webCmd     state


Genau die Uhrzeit die ich per Regler  im Web einstelle. Und das verstehe ich nicht.

spacy

Und so sieht es aus wenn die Ventil2 Auto = True ist

Internals:
   CFGFN      ./config/relay.cfg
   DEF        ( [+[Ventil2Start:state]] and [Ventil2] eq "auto") (set relais Port5 on-for-timer [Ventil2Dauer])
   NAME       Wasser_Tropfschlauch_Ein_Auto
   NR         109
   NTFY_ORDER 50-Wasser_Tropfschlauch_Ein_Auto
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-05-18 20:41:45   cmd_event       Ventil2
     2015-05-18 20:41:45   cmd_nr          2
     2015-05-18 20:41:45   e_Ventil2_STATE Auto
     2015-05-18 20:41:45   state           cmd_2
     2015-05-18 20:37:41   timer_1_c1      19.05.2015 15:02:41
   Condition:
     0           DOIF_time_once($hash->{timer}{0},$wday,"") and InternalDoIf('Ventil2','STATE','') eq "auto"
   Days:
   Devices:
     0           Ventil2
     all         Ventil2
   Do:
     0          set relais Port5 on-for-timer [Ventil2Dauer]
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
     0           Ventil2:STATE
     all         Ventil2:STATE
   Itimer:
     all         Ventil2Start
   Readings:
   Realtime:
     0          15:02:41
   State:
   Time:
     0          +[Ventil2Start:state]
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
   Trigger:
Attributes:

Damian

Zitat von: spacy am 18 Mai 2015, 20:34:07
Internals:
   CFGFN      ./config/relay.cfg
   DEF        ( [+[Ventil2Start]] and [Ventil2] eq "auto") (set relais Port5 on-for-timer [Ventil2Dauer])
   NAME       Wasser_Tropfschlauch_Ein_Auto
   NR         109
   NTFY_ORDER 50-Wasser_Tropfschlauch_Ein_Auto
   STATE      ???
   TYPE       DOIF
   Readings:
     2015-05-18 20:31:15   timer_1_c1      19.05.2015 14:56:15
   Condition:
     0           DOIF_time_once($hash->{timer}{0},$wday,"") and InternalDoIf('Ventil2','STATE','') eq "auto"
   Days:
   Devices:
     0           Ventil2
     all         Ventil2
   Do:
     0          set relais Port5 on-for-timer [Ventil2Dauer]
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
     0           Ventil2:STATE
     all         Ventil2:STATE
   Itimer:
     all         Ventil2Start
   Realtime:
     0          14:56:15
   State:
   Time:
     0          +[Ventil2Start]
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:


so sieht es aus, also genauso wie auch beim at befehl den ich genutzt hatte im state sind drei ?
Wieso no.
Wenn ich nen list auf das Ventil2Start mache sieht das so aus
Internals:
   CFGFN      ./config/relay.cfg
   NAME       Ventil2Start
   NR         104
   STATE      18:25
   TYPE       dummy
   Readings:
     2015-05-18 18:23:49   state           18:25
Attributes:
   alias      Beregnung Start Tropfschlauch
   group      Tropfschlauch
   room       Bewässerung
   setList    state:time
   webCmd     state


Genau die Uhrzeit die ich per Regler  im Web einstelle. Und das verstehe ich nicht.

Ist ganz einfach. Mit dem Pluszeichen setzt du den Timer um 18 Stunden und 35 Minuten weiter (wie du es auch bei at definiert hast). Die Schaltzeit ist dann 14:56:15 (siehe Realtime). Wenn du die Zeit absolut haben willst also 18:25 Uhr, dann musst du das Pluszeichen weglassen. Ausführliche Informationen zu Zeitangaben (das sind einige mehr als bei at) solltest du genau in der Commandref zu DOIF durchlesen, wenn du das Modul nutzen willst.

also: ... ([[Ventil2Start]] and [Ventil2] eq "auto")...

Gruß

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

spacy

#41
Vielen Danke für deine Hilfe Damin.

Haut jetzt so weit hin ;)

habe mir dann noch mal das Command.ref angesehen und wollte dann eine Abschaltzeit mit OffTime erzeugen.
Die "list" Ausgabe sieht so aus

Internals:
   CFGFN      ./config/relay.cfg
   DEF        ([[Ventil2Start]-[Ventil2Dauer]] and [Ventil2] eq "Auto") (set relais PortA6 on, set end {(OffTime("[Ventil2Start]"))}) DOELSE (set relais PortA6 off)
   NAME       Wasser_Tropfschlauch_Ein_Auto
   NR         111
   NTFY_ORDER 50-Wasser_Tropfschlauch_Ein_Auto
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-05-19 10:30:00   cmd_event       timer_1
     2015-05-19 10:30:00   cmd_nr          1
     2015-05-19 10:26:43   e_Ventil2_STATE Auto
     2015-05-19 10:30:00   error           Undefined subroutine &main::OffTime called at (eval 547) line 1.

     2015-05-19 10:30:00   state           cmd_1
     2015-05-19 10:30:00   timer_1_c1      20.05.2015 10:30:00
     2015-05-19 10:26:40   timer_2_c1      20.05.2015 00:10:00
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('Ventil2','STATE','') eq "Auto"
   Days:
   Devices:
     0           Ventil2
     all         Ventil2
   Do:
     0          set relais PortA6 on, set end {(OffTime("[Ventil2Start]"))}
     1          set relais PortA6 off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           Ventil2:STATE
     all         Ventil2:STATE
   Itimer:
     all         Ventil2Start Ventil2Dauer
   Readings:
   Realtime:
     0          10:30:00
     1          00:10:00
   State:
   Time:
     0          [Ventil2Start]
     1          [Ventil2Dauer]
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
   Trigger:
Attributes:

Es gibt einen Error in der Subroutine mit OffTime.
Liegt das etwa an der Version von Fhem die ich nutze?

Fhem info:
  Release  : 5.6
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.14.2
  uniqueID : 6e33f79a0106deabf76c07c646d1ac6b
  upTime   : 00:25:38

Defined modules:
  CALVIEW         : 1
  CUL             : 1
  CUL_FHTTK       : 4
  CUL_HM          : 19
  CUL_WS          : 2
  Calendar        : 2
  DOIF            : 1
  Dashboard       : 3
  FHEMWEB         : 3
  FHT             : 4
  FS20            : 5
  FileLog         : 43
  HMLAN           : 1
  Heating_Control : 4
  I2C_MCP23008    : 1
  PRESENCE        : 7
  RPII2C          : 1
  RPI_GPIO        : 5
  SVG             : 13
  Text2Speech     : 1
  Weather         : 1
  at              : 33
  dummy           : 58
  notify          : 55
  readingsGroup   : 1
  telnet          : 1
  watchdog        : 7
  weblink         : 9

Defined models per module:
  CUL             : CUL
  CUL_HM          : ActionDetector,HM-LC-BL1-FM,HM-LC-SW4-DR,HM-SEC-SC,HM-SEC-SD,HM-SEC-SDTeam,HM-Sen-MDIR-O
  CUL_WS          : S300TH
  FS20            : fs20bs,fs20rcu


danke

Damian

#42
Zitat von: spacy am 19 Mai 2015, 10:48:14
Vielen Danke für deine Hilfe Damin.

Haut jetzt so weit hin ;)

habe mir dann noch mal das Command.ref angesehen und wollte dann eine Abschaltzeit mit OffTime erzeugen.

Offtime musst du schon selbst in Perl programmieren. Wenn deine Ausschaltzeit einfach über den Dummy angegeben wird, dann brauchst du auch nichts dynamsich über ausgelagerte Perl-Funktionen zu berechnen.

Es reicht dann:
([[Ventil2Start]-[Ventil2Dauer]] and [Ventil2] eq "Auto") (set relais PortA6 on) DOELSE (set relais PortA6 off)Gruß

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