Da ich für meine Steuerung, insbesondere die Heizung eine Urlaubsschaltung haben wollte, in der ich das Datum und die Zeit der Rückkehr eingeben kann, habe ich mir folgendes Zusammengestellt.
Basis ist der datepicker von hier http://forum.fhem.de/index.php/topic,35736.0.html (http://forum.fhem.de/index.php/topic,35736.0.html) Danke an dieser stelle.
Die Heizung wird bis zum gewählten Datum auf eco geschaltet, danach wieder auf in den Automodus gesetzt.
Später soll darüber dann auch noch eine Anwesenheitssimulation gesteuert werden.
Das ganze wird über einen dummy Schalter "Urlaub" ein und aus geschaltet, sowie über den "Urlaub_ende" dummy, welcher den datetime picker enthält.
define Urlaub_ende dummy
attr Urlaub_ende room Urlaub
attr Urlaub_ende setList state:datetime,inline:true
attr Urlaub_ende webCmd state
define Urlaub dummy
attr Urlaub room Urlaub
attr Urlaub setList state:Nein,Ja
attr Urlaub webCmd state
Zwei notify's werten den Status aus
define not_urlaubszeit notify Urlaub_ende {Urlaubszeit ((Value("Urlaub")), (Value("Urlaub_ende")))}
define not_urlaubsstate notify Urlaub {Urlaubszeit ((Value("Urlaub")), (Value("Urlaub_ende")))}
und triggern eine Urlaubsroutine in 99_MyUtils :
Damit diese auch mit dem datetime richtig umgehen kann, muss am Anfang der 99_MyUtils folgendes eingefügt werden :
use DateTime;
use DateTime::Format::Strptime;
sub
Urlaubszeit($$)
{
my ($urlaub,$udatum ) = @_;
my $dt = DateTime->now();
my $format = DateTime::Format::Strptime->new(
pattern => '%d.%m.%Y %H:%M',
time_zone => 'local',
on_error => 'croak',
);
my $udt = $format->parse_datetime("$udatum");
my $ldt = $udt->clone->add(minutes => 15);
if (("$urlaub" eq "Ja") && ($udt>$dt)) {
fhem("set str_Haus desiredTemperature eco");
fhem ("delete at_urlaub");
fhem ("define at_urlaub at $udt set str_Haus desiredTemperature auto");
fhem ("define del_urlaub at $ldt delete at_urlaub");
}
else{
fhem("set str_Haus desiredTemperature auto");
}
}
Vielleicht kann es jemand gebrauchen.
Stefan