FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Reinhart am 02 Dezember 2016, 17:32:45

Titel: komfortabler Weekplan für HM Thermostat
Beitrag von: Reinhart am 02 Dezember 2016, 17:32:45
Hallo,

nachdem ich hier viel im Forum gesucht habe und nichts "komfortables" zum Setzen der Temperaturen in die HM Thermostaten gefunden habe, habe ich mir ein kleines Tool geschrieben. Es basiert unter Ausnutzung von martinp876 seine HMInfo und den verschiedenen Temperaturlisten. Die 99_myUtils benutzt die gleichen Files zum Lesen und Schreiben der Wochenpläne wie HMInfo.

Was sind die Eckdaten für das Tool:
- beliebig viele HM Thermostate sollen eingestellt werden können
- jedes Thermostat soll individuell eingestellt werden können
- alles aus einem einzigen Wochenplan in der Oberfläche
- lesen der Thermostat Wochenpläne
- schreiben der Wochenpläne ins Thermostat
- kopieren eines Tages auf die ganze Woche zur Erleichterung der Eingabe
- lesen eines Raumes und schreiben in einem anderen Raum (Kopie eines Thermostat Zeitprogramms)
- die 1% Funk Regel sollte nicht sonderlich belastet werden, erst schreiben wenn alles fertig ist.

All diese Wünsche konnte ich umsetzen, allerdings bin ich ohne Erweiterungen in der 99_myUtils.pm nicht aus gekommen, was aber kein Nachteil sein sollte.

Zu beachten ist:
- Die Installation von HMInfo ist unbedingt notwendig!
- Es sollten alle 4 Timer programmiert werden, bzw. sind derzeit max. 4 Timer notwendig (ginge auch mehr, aber das Fenster wird zu klein).
- Es müssen in der ersten setList ( attr HMselect setList Room:Th_Wohnzimmer_Clima,Th_Schlafzimmer_Clima,Th_Kinderzimmer_Clima ) alle Thermostate eingetragen werden, in welche man Wochenpläne programmieren will. Immer den 4.Kanal Namen eintragen = .._Clima)

Installation:
HMInfo installieren.
define hm HMinfo
attr hm configDir setup
attr hm configTempFile myWeekplan.cfg
attr hm room System

Achtung: überprüfen der Filerechte auf ./setup/myWeekplan.cfg, (Raspi  = /opt/fhem/setup/myWeekplan.cfg )gegebenenfalls auf 666 setzen, Schreibrechte sind unbedingt erforderlich. Siehe dazu den Wiki Eintrag!

99_myUtils.pm erweitern
#############################
# HM Zeitprogramm schreiben #
#############################
sub writeHM()
{
  my ($Room) = ReadingsVal("HMselect","Room",0);
  my $RoomHeader =  "entities:$Room";
  my $Mo = "R_2_tempListMon> " . ReadingsVal("TimeHMMo","HHMM1",0) . " " . ReadingsVal("TimeHMMo","TEMP1",0) . " " . ReadingsVal("TimeHMMo","HHMM2",0) . " " . ReadingsVal("TimeHMMo","TEMP2",0) . " " . ReadingsVal("TimeHMMo","HHMM3",0) . " " . ReadingsVal("TimeHMMo","TEMP3",0) . " " . ReadingsVal("TimeHMMo","HHMM4",0)  . " " . ReadingsVal("TimeHMMo","TEMP4",0);
  my $Di = "R_3_tempListTue> " . ReadingsVal("TimeHMDi","HHMM1",0) . " " . ReadingsVal("TimeHMDi","TEMP1",0) . " " . ReadingsVal("TimeHMDi","HHMM2",0) . " " . ReadingsVal("TimeHMDi","TEMP2",0) . " " . ReadingsVal("TimeHMDi","HHMM3",0) . " " . ReadingsVal("TimeHMDi","TEMP3",0) . " " . ReadingsVal("TimeHMDi","HHMM4",0)  . " " . ReadingsVal("TimeHMDi","TEMP4",0);
  my $Mi = "R_4_tempListWed> " . ReadingsVal("TimeHMMi","HHMM1",0) . " " . ReadingsVal("TimeHMMi","TEMP1",0) . " " . ReadingsVal("TimeHMMi","HHMM2",0) . " " . ReadingsVal("TimeHMMi","TEMP2",0) . " " . ReadingsVal("TimeHMMi","HHMM3",0) . " " . ReadingsVal("TimeHMMi","TEMP3",0) . " " . ReadingsVal("TimeHMMi","HHMM4",0)  . " " . ReadingsVal("TimeHMMi","TEMP4",0);
  my $Do = "R_5_tempListThu> " . ReadingsVal("TimeHMDo","HHMM1",0) . " " . ReadingsVal("TimeHMDo","TEMP1",0) . " " . ReadingsVal("TimeHMDo","HHMM2",0) . " " . ReadingsVal("TimeHMDo","TEMP2",0) . " " . ReadingsVal("TimeHMDo","HHMM3",0) . " " . ReadingsVal("TimeHMDo","TEMP3",0) . " " . ReadingsVal("TimeHMDo","HHMM4",0)  . " " . ReadingsVal("TimeHMDi","TEMP4",0);
  my $Fr = "R_6_tempListFri> " . ReadingsVal("TimeHMFr","HHMM1",0) . " " . ReadingsVal("TimeHMFr","TEMP1",0) . " " . ReadingsVal("TimeHMFr","HHMM2",0) . " " . ReadingsVal("TimeHMFr","TEMP2",0) . " " . ReadingsVal("TimeHMFr","HHMM3",0) . " " . ReadingsVal("TimeHMFr","TEMP3",0) . " " . ReadingsVal("TimeHMFr","HHMM4",0)  . " " . ReadingsVal("TimeHMFr","TEMP4",0);
  my $Sa = "R_0_tempListSat> " . ReadingsVal("TimeHMSa","HHMM1",0) . " " . ReadingsVal("TimeHMSa","TEMP1",0) . " " . ReadingsVal("TimeHMSa","HHMM2",0) . " " . ReadingsVal("TimeHMSa","TEMP2",0) . " " . ReadingsVal("TimeHMSa","HHMM3",0) . " " . ReadingsVal("TimeHMSa","TEMP3",0) . " " . ReadingsVal("TimeHMSa","HHMM4",0)  . " " . ReadingsVal("TimeHMSa","TEMP4",0);
  my $So = "R_1_tempListSun> " . ReadingsVal("TimeHMSo","HHMM1",0) . " " . ReadingsVal("TimeHMSo","TEMP1",0) . " " . ReadingsVal("TimeHMSo","HHMM2",0) . " " . ReadingsVal("TimeHMSo","TEMP2",0) . " " . ReadingsVal("TimeHMSo","HHMM3",0) . " " . ReadingsVal("TimeHMSo","TEMP3",0) . " " . ReadingsVal("TimeHMSo","HHMM4",0)  . " " . ReadingsVal("TimeHMSo","TEMP4",0);
  open (WeekProfile, ">/opt/fhem/setup/myWeekplan.cfg") or die $!;
  print WeekProfile "$RoomHeader\n$Sa\n$So\n$Mo\n$Di\n$Mi\n$Do\n$Fr\n";
  close (WeekProfile);
  return
}

############################
# HM Zeitprogramm auslesen #
############################
sub readHM()
{
  my $Room = ReadingsVal("HMselect","Room",0);
  my $RoomHeader =  "entities:$Room";
  my (@values,@lines,$day,$last);
  open (WeekProfile,"<","/opt/fhem/setup/myWeekplan.cfg") or die $!;
    while(my $line = <WeekProfile>){
      # nur übernehmen wenn es keine Leerzeile ist
      push(@lines,$line) if($line !~ /^\s*$/);
    }
    #my @lines = <WeekProfile>;
  close WeekProfile;
  # Zeilenweise einlesen
  for (my $i = 0; $i <= 7; $i++){
    # Leerzeichen suchen 0=Tag,1=HHMM1,2=TEMP1,3=HHMM2,4=TEMP2,5=HHMM3,6=TEMP3,7=HHMM4,8=TEMP4
    @values = split(/ |>|[\n]/,$lines[$i]);
    foreach (@values){
      print "$_\n";
    }           
    if($i == 1){
       $day = "TimeHMSa";
    }
    if($i == 2){
       $day = "TimeHMSo";
    }
    if($i == 3){
       $day = "TimeHMMo";
    }
    if($i == 4){
       $day = "TimeHMDi";
    }
    if($i == 5){
       $day = "TimeHMMi";
    }
    if($i == 6){
       $day = "TimeHMDo";
    }
    if($i == 7){
       $day = "TimeHMFr";
    }
    if($i >= 1){
      fhem("set $day HHMM1 $values[1]");   
      fhem("set $day TEMP1 $values[2]");
      fhem("set $day HHMM2 $values[3]");
      fhem("set $day TEMP2 $values[4]");
      fhem("set $day HHMM3 $values[5]");
      fhem("set $day TEMP3 $values[6]");   
      fhem("set $day HHMM4 $values[7]"); 
      fhem("set $day TEMP4 $values[8]"); 
    }
  }
  return
}

Erweiterung um die Subroutine readHM und writeHM.

Konfiguration für FHEM
#################################
#       Zeitprogramme  HM       #
#################################

define HMselect dummy
attr HMselect alias Thermostat auswählen
attr HMselect group Heizkörper
attr HMselect icon hm_keymatic
attr HMselect readingList Room
attr HMselect room WeekProgram
attr HMselect setList Room:Th_Wohnzimmer_Clima,Th_Schlafzimmer_Clima,Th_Kinderzimmer_Clima
attr HMselect stateFormat {sprintf("%s", ReadingsVal($name,"Room",0))}
attr HMselect webCmd Room


define TimeHMMo dummy
attr TimeHMMo alias 1 Montag
attr TimeHMMo group Zeiteingabe
attr TimeHMMo readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMMo room WeekProgram
attr TimeHMMo setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMMo stateFormat bis
attr TimeHMMo webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define TimeHMDi dummy
attr TimeHMDi alias 2 Dienstag
attr TimeHMDi group Zeiteingabe
attr TimeHMDi readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMDi room WeekProgram
attr TimeHMDi setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMDi stateFormat bis
attr TimeHMDi webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define TimeHMMi dummy
attr TimeHMMi alias 3 Mittwoch
attr TimeHMMi group Zeiteingabe
attr TimeHMMi readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMMi room WeekProgram
attr TimeHMMi setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMMi stateFormat bis
attr TimeHMMi webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define TimeHMDo dummy
attr TimeHMDo alias 4 Donnerstag
attr TimeHMDo group Zeiteingabe
attr TimeHMDo readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMDo room WeekProgram
attr TimeHMDo setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMDo stateFormat bis
attr TimeHMDo webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define TimeHMFr dummy
attr TimeHMFr alias 5 Freitag
attr TimeHMFr group Zeiteingabe
attr TimeHMFr readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMFr room WeekProgram
attr TimeHMFr setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMFr stateFormat bis
attr TimeHMFr webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define TimeHMSa dummy
attr TimeHMSa alias 6 Samstag
attr TimeHMSa group Zeiteingabe
attr TimeHMSa readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMSa room WeekProgram
attr TimeHMSa setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMSa stateFormat bis
attr TimeHMSa webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4:

define TimeHMSo dummy
attr TimeHMSo alias 7 Sonntag
attr TimeHMSo group Zeiteingabe
attr TimeHMSo readingList HHMM1 TEMP1 HHMM2 TEMP2 HHMM3 TEMP3 HHMM4 TEMP4
attr TimeHMSo room WeekProgram
attr TimeHMSo setList HHMM1:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP1:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM2:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP2:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0 HHMM3:00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05:30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30,12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18:00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30,24:00 TEMP3:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0  HHMM4:24:00 TEMP4:4.0,5.0,6.0,7.0,8.0,9.0,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr TimeHMSo stateFormat bis
attr TimeHMSo webCmd HHMM1:TEMP1: bis :HHMM2:TEMP2: bis :HHMM3:TEMP3: bis :HHMM4:TEMP4

define MakeList dummy
attr MakeList alias Zeitprogramm ins Ventil schreiben
attr MakeList devStateIcon write:hm_keymatic:write
attr MakeList eventMap on:write off:write
attr MakeList group Zeiteingabe
attr MakeList room WeekProgram

define MakeList_n notify MakeList {\
  Log(3,"schreibe WeekProfile in $EVENT");;\
  fhem "{writeHM}";;\
  fhem "set hm tempList verify";;\
  fhem "set hm tempList restore";;\
}

define MakeRead dummy
attr MakeRead alias Zeitprogramm vom Ventil auslesen
attr MakeRead devStateIcon read:audio_playlist:read
attr MakeRead eventMap on:read off:read
attr MakeRead group Zeiteingabe
attr MakeRead room WeekProgram

define MakeRead_n notify MakeRead {\
  Log(3,"lese WeekProfile aus $EVENT");;\
  fhem "set hm tempList save";;\
  fhem "{readHM}";;\
}

#Mo auf alle Tage kopieren
define copyHMAll dummy
attr copyHMAll alias kopiere Mo auf alle Tage
attr copyHMAll devStateIcon ok:edit_expand:ok
attr copyHMAll eventMap on:ok off:ok
attr copyHMAll group Zeiteingabe
attr copyHMAll room WeekProgram
#attr copyHMAll icon edit_expand

define DateCopyHMAll notify copyHMAll {\
  fhem "attr MakeListHM disable 1";;\
  fhem "set TimeHMDi " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMDi HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMDi HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMDi HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMDi HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMDi TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMDi TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMDi TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMDi TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "set TimeHMMi " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMMi HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMMi HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMMi HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMMi HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMMi TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMMi TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMMi TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMMi TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "set TimeHMDo " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMDo HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMDo HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMDo HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMDo HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMDo TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMDo TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMDo TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMDo TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "set TimeHMFr " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMFr HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMFr HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMFr HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMFr HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMFr TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMFr TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMFr TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMFr TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "set TimeHMSa " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMSa HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMSa HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMSa HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMSa HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMSa TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMSa TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMSa TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMSa TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "set TimeHMSo " . ReadingsVal("TimeHMMo","state",0);;\
  fhem "setreading TimeHMSo HHMM1 " . ReadingsVal("TimeHMMo","HHMM1",0);;\
  fhem "setreading TimeHMSo HHMM2 " . ReadingsVal("TimeHMMo","HHMM2",0);;\
  fhem "setreading TimeHMSo HHMM3 " . ReadingsVal("TimeHMMo","HHMM3",0);;\
  fhem "setreading TimeHMSo HHMM4 " . ReadingsVal("TimeHMMo","HHMM4",0);;\
  fhem "setreading TimeHMSo TEMP1 " . ReadingsVal("TimeHMMo","TEMP1",0);;\
  fhem "setreading TimeHMSo TEMP2 " . ReadingsVal("TimeHMMo","TEMP2",0);;\
  fhem "setreading TimeHMSo TEMP3 " . ReadingsVal("TimeHMMo","TEMP3",0);;\
  fhem "setreading TimeHMSo TEMP4 " . ReadingsVal("TimeHMMo","TEMP4",0);;\
  fhem "attr MakeListHM disable 0";;\
}
attr DateCopyHMAll room WeekProgram

hat leider schon 173 Zeilen, aber durch die Vielzahl der Anforderungen habe ich es leider nicht kürzer geschafft.

Wer will, kann sich noch eine kleine Erweiterung schreiben (ein weiterer Dummy) und in den Header der myWeekplan.cfg alle Device Namen (mit Beistrich getrennt) eintragen, dann kann man auch den aktuellen Weekplan auf alle Thermostate gleichzeitig schreiben. Das war aber nicht das eigentliche Ziel, weil die individuelle Einstellung für manche Zwecke besser ist.

LG
Reinhart




Titel: Antw:komfortabler Weekplan für HM Thermostat
Beitrag von: igami am 02 Dezember 2016, 18:05:00
Was spricht gegen Weekprofile (http://www.fhemwiki.de/wiki/Weekprofile)?
Titel: Antw:komfortabler Weekplan für HM Thermostat
Beitrag von: Reinhart am 02 Dezember 2016, 19:01:19
da spricht gar nichts gegen Weekprofile, schade das ich das mit der (falschen) Suche nicht gefunden habe. Eine einzige Zeile hätte genügt um alle Wünsche zu erfüllen. Die variable Timeranzahl ist sehr gut gelöst, das kann meine Konfig nicht, dafür ist sie etwas übersichtlicher bei der Eingabe.

Die meisten Beiträge was man dazu findet sind fertige Timerfiles zu speichern und zu kopieren, was allerdings in manchen Einsatzzwecken (Pendler oder Wochenendhaus) seine Vorteile haben kann. Ich wollte es allerdings selektiv haben, was das Weekprofile voll erfüllt hätte, schade schade ..... Aber ich sehe es als Übung, so musste ich mich auch einmal mit Perl befassen.

Danke für deinen Hinweis!

LG