Hallo,
Ich steuere 2 Zeiten in einem DOIF über Dummys.
define Pflanzenlampe_active dummy
attr Pflanzenlampe_active room Pflanzen
attr Pflanzenlampe_active webCmd on:off
define Pflanzenlampe_time_on dummy
attr Pflanzenlampe_time_on room Pflanzen
attr Pflanzenlampe_time_on setList state:time
attr Pflanzenlampe_time_on userReadings Stunde {()},Minute {()},
attr Pflanzenlampe_time_on webCmd state
define Pflanzenlampe_time_off dummy
attr Pflanzenlampe_time_off room Pflanzen
attr Pflanzenlampe_time_off setList state:time
attr Pflanzenlampe_time_off userReadings Stunde {()},Minute {()},
attr Pflanzenlampe_time_off webCmd state
define Pflanzenlampe_doif DOIF ([[Pflanzenlampe_time_on]] and [Pflanzenlampe_active] eq "on") (set HM_WZ_Steckdose_Sw on) DOELSEIF ([[Pflanzenlampe_time_off]]) (set HM_WZ_Steckdose_Sw off)
attr Pflanzenlampe_doif do always
attr Pflanzenlampe_doif room Pflanzen
Aktuell möchte ich die Zeiten in FTUI anpassen und habe dazu eine Funktion die die Minuten und Stunden Werte im Dummy anpasst.
sub ZeitenStateStundeMinute($) {
my ($HZ1) = @_;
my $Stunde1 = ReadingsVal($HZ1,"Stunde","");
my $Minute1 = ReadingsVal($HZ1,"Minute","");
$Stunde1 = sprintf("%02d",$Stunde1);
$Minute1 = sprintf("%02d",$Minute1);
my $zeiten1 = $Stunde1.":".$Minute1;
fhem "setreading ".$HZ1." state ".$zeiten1;
}
Ändere ich die Werte in FTUI werden mir die richtigen Zeiten auch direkt im Dummy angezeigt.
Irgendwie scheinen sich aber die Werte im DOIF nicht anzukommen.
Wenn ich die Zeiten dann ein 2. mal anpasse, aktualisiert sich das DOIF allerding mit den vorhergehenden Werten.
Es gibt also immer einen Versatz.
DUMMY Time_on: 07:00
DOIF Time_on: 07:00
Anpassung der Zeit in FTUI
Dummy Time_on: 08:00
DOIF Time_on: 07:00
2. Anpassung der Zeit in FTUI
Dummy Time_on: 09:00
DOIF Time_on: 08:00
Hat jemand eine Idee woran es liegen könnte?
Zitat von: gloob am 26 Februar 2016, 09:56:55
Hallo,
Ich steuere 2 Zeiten in einem DOIF über Dummys.
define Pflanzenlampe_active dummy
attr Pflanzenlampe_active room Pflanzen
attr Pflanzenlampe_active webCmd on:off
define Pflanzenlampe_time_on dummy
attr Pflanzenlampe_time_on room Pflanzen
attr Pflanzenlampe_time_on setList state:time
attr Pflanzenlampe_time_on userReadings Stunde {()},Minute {()},
attr Pflanzenlampe_time_on webCmd state
define Pflanzenlampe_time_off dummy
attr Pflanzenlampe_time_off room Pflanzen
attr Pflanzenlampe_time_off setList state:time
attr Pflanzenlampe_time_off userReadings Stunde {()},Minute {()},
attr Pflanzenlampe_time_off webCmd state
define Pflanzenlampe_doif DOIF ([[Pflanzenlampe_time_on]] and [Pflanzenlampe_active] eq "on") (set HM_WZ_Steckdose_Sw on) DOELSEIF ([[Pflanzenlampe_time_off]]) (set HM_WZ_Steckdose_Sw off)
attr Pflanzenlampe_doif do always
attr Pflanzenlampe_doif room Pflanzen
Aktuell möchte ich die Zeiten in FTUI anpassen und habe dazu eine Funktion die die Minuten und Stunden Werte im Dummy anpasst.
sub ZeitenStateStundeMinute($) {
my ($HZ1) = @_;
my $Stunde1 = ReadingsVal($HZ1,"Stunde","");
my $Minute1 = ReadingsVal($HZ1,"Minute","");
$Stunde1 = sprintf("%02d",$Stunde1);
$Minute1 = sprintf("%02d",$Minute1);
my $zeiten1 = $Stunde1.":".$Minute1;
fhem "setreading ".$HZ1." state ".$zeiten1;
}
Ändere ich die Werte in FTUI werden mir die richtigen Zeiten auch direkt im Dummy angezeigt.
Irgendwie scheinen sich aber die Werte im DOIF nicht anzukommen.
Wenn ich die Zeiten dann ein 2. mal anpasse, aktualisiert sich das DOIF allerding mit den vorhergehenden Werten.
Es gibt also immer einen Versatz.
DUMMY Time_on: 07:00
DOIF Time_on: 07:00
Anpassung der Zeit in FTUI
Dummy Time_on: 08:00
DOIF Time_on: 07:00
2. Anpassung der Zeit in FTUI
Dummy Time_on: 09:00
DOIF Time_on: 08:00
Hat jemand eine Idee woran es liegen könnte?
Der Timer wird im DOIF-Modul sofort angepasst. Das Ändern der Timer im DOIF-Modul erzeugt allerdings kein Event, daher wird die Änderung nicht sofort am Bildschirm aktualisiert. Man muss die Anzeige im Browser aktualisieren (bei Windows F5-Taste), damit man die aktuellen Angaben auch sieht. Ebenfalls kann man mit:
list <mein DOIF-Modul> in der Kommandozeile immer die aktuellen Informationen des Moduls sich anzeigen lassen.
Gruß
Damian
Bei mir wird der Timer nicht angepasst. Auch wenn ich F5 drücke oder ein neues List mache.
Lediglich die Dummys werden richtig angezeigt. Beim DOIF bleiben die alten Werte noch bis zur nächsten Änderung stehen.
Zitat von: gloob am 26 Februar 2016, 11:18:40
Bei mir wird der Timer nicht angepasst. Auch wenn ich F5 drücke oder ein neues List mache.
Lediglich die Dummys werden richtig angezeigt. Beim DOIF bleiben die alten Werte noch bis zur nächsten Änderung stehen.
Poste mal list von deinem Modul
Hier sind die Listings der Dummys:
Internals:
NAME Pflanzenlampe_time_on
NR 420
STATE 07:00
TYPE dummy
Readings:
2016-02-26 10:19:47 Minute 0
2016-02-26 11:21:56 Stunde 7
2016-02-26 11:21:56 state 07:00
Attributes:
room Pflanzen
setList state:time
userReadings Stunde {()},Minute {()},
webCmd state
Internals:
NAME Pflanzenlampe_time_off
NR 422
STATE 18:00
TYPE dummy
Readings:
2016-02-26 10:10:11 Minute 0
2016-02-26 11:21:57 Stunde 18
2016-02-26 11:21:57 state 18:00
Attributes:
room Pflanzen
setList state:time
userReadings Stunde {()},Minute {()},
webCmd state
Und das Listing des DOIF
Internals:
DEF ([[Pflanzenlampe_time_on]] and [Pflanzenlampe_active] eq "on") (set HM_WZ_Steckdose_Sw on) DOELSEIF ([[Pflanzenlampe_time_off]]) (set HM_WZ_Steckdose_Sw off)
NAME Pflanzenlampe_doif
NR 424
NTFY_ORDER 50-Pflanzenlampe_doif
STATE cmd_1
TYPE DOIF
Readings:
2016-02-25 09:23:38 Device Pflanzenlampe_active
2016-02-26 07:00:00 cmd_event timer_1
2016-02-26 07:00:00 cmd_nr 1
2016-02-25 09:23:38 e_Pflanzenlampe_active_STATE on
2016-02-26 07:00:00 state cmd_1
2016-02-26 11:21:56 timer_1_c1 27.02.2016 06:00:00
2016-02-26 11:21:57 timer_2_c2 26.02.2016 17:00:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and InternalDoIf($hash,'Pflanzenlampe_active','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
Days:
Devices:
0 Pflanzenlampe_active
all Pflanzenlampe_active
Do:
0:
0 set HM_WZ_Steckdose_Sw on
1:
0 set HM_WZ_Steckdose_Sw off
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Internals:
0 Pflanzenlampe_active:STATE
all Pflanzenlampe_active:STATE
Itimer:
all Pflanzenlampe_time_on Pflanzenlampe_time_off
Localtime:
0 1456549200
1 1456502400
Realtime:
0 06:00:00
1 17:00:00
Regexp:
All:
State:
Time:
0 [Pflanzenlampe_time_on]
1 [Pflanzenlampe_time_off]
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Triggertime:
1456502400:
localtime 1456502400
Hash:
1456549200:
localtime 1456549200
Hash:
Attributes:
do always
room Pflanzen
Man sieht dass die Timer vom DOIF aktualisiert werden, allerdings nicht mit den aktuellen Werten aus den Dummys.
Zitat von: gloob am 26 Februar 2016, 11:24:03
Hier sind die Listings der Dummys:
Internals:
NAME Pflanzenlampe_time_on
NR 420
STATE 07:00
TYPE dummy
Readings:
2016-02-26 10:19:47 Minute 0
2016-02-26 11:21:56 Stunde 7
2016-02-26 11:21:56 state 07:00
Attributes:
room Pflanzen
setList state:time
userReadings Stunde {()},Minute {()},
webCmd state
Internals:
NAME Pflanzenlampe_time_off
NR 422
STATE 18:00
TYPE dummy
Readings:
2016-02-26 10:10:11 Minute 0
2016-02-26 11:21:57 Stunde 18
2016-02-26 11:21:57 state 18:00
Attributes:
room Pflanzen
setList state:time
userReadings Stunde {()},Minute {()},
webCmd state
Und das Listing des DOIF
Internals:
DEF ([[Pflanzenlampe_time_on]] and [Pflanzenlampe_active] eq "on") (set HM_WZ_Steckdose_Sw on) DOELSEIF ([[Pflanzenlampe_time_off]]) (set HM_WZ_Steckdose_Sw off)
NAME Pflanzenlampe_doif
NR 424
NTFY_ORDER 50-Pflanzenlampe_doif
STATE cmd_1
TYPE DOIF
Readings:
2016-02-25 09:23:38 Device Pflanzenlampe_active
2016-02-26 07:00:00 cmd_event timer_1
2016-02-26 07:00:00 cmd_nr 1
2016-02-25 09:23:38 e_Pflanzenlampe_active_STATE on
2016-02-26 07:00:00 state cmd_1
2016-02-26 11:21:56 timer_1_c1 27.02.2016 06:00:00
2016-02-26 11:21:57 timer_2_c2 26.02.2016 17:00:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and InternalDoIf($hash,'Pflanzenlampe_active','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
Days:
Devices:
0 Pflanzenlampe_active
all Pflanzenlampe_active
Do:
0:
0 set HM_WZ_Steckdose_Sw on
1:
0 set HM_WZ_Steckdose_Sw off
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Internals:
0 Pflanzenlampe_active:STATE
all Pflanzenlampe_active:STATE
Itimer:
all Pflanzenlampe_time_on Pflanzenlampe_time_off
Localtime:
0 1456549200
1 1456502400
Realtime:
0 06:00:00
1 17:00:00
Regexp:
All:
State:
Time:
0 [Pflanzenlampe_time_on]
1 [Pflanzenlampe_time_off]
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Triggertime:
1456502400:
localtime 1456502400
Hash:
1456549200:
localtime 1456549200
Hash:
Attributes:
do always
room Pflanzen
Man sieht dass die Timer vom DOIF aktualisiert werden, allerdings nicht mit den aktuellen Werten aus den Dummys.
Was passiert, wenn du die entsprechenden set-Befehle per Kommandozeile absetzt?
Wenn ich den SET Befehl über die Kommandozeile eingebe, dann wird das DOIF direkt aktiviert.
Gibt es einen unterschied zwischen dem Aufruf eines Kommands über die Kommandozeile und über einen FHEM Befehl aus der myUtils?
Zitat von: gloob am 26 Februar 2016, 14:07:00
Wenn ich den SET Befehl über die Kommandozeile eingebe, dann wird das DOIF direkt aktiviert.
Gibt es einen unterschied zwischen dem Aufruf eines Kommands über die Kommandozeile und über einen FHEM Befehl aus der myUtils?
Offensichtlich!?
Für solche einfache Funktionalität brauchst du eigentlich keine Extra-Routinen.
Bei DOIF wäre das z. B
setreading device reading [Stunde]:[Minute]
oder wenn es formatiert werden muss:
setreading device reading {(sprintf(%02d:%02d),[Stunde],[Minute])}
Gruß
Damian