FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: JoeALLb am 13 April 2017, 12:09:28

Titel: weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: JoeALLb am 13 April 2017, 12:09:28
Für Homematic-Heizungsaktoren gibt es über HMinfo die Möglichkeit, einfach Templates zu nutzen.
Leider müssen diese als etxtdateien definiert werden.

weekprofile wurde hauptsächlich für MAX-Geräte entwickelt, es bietet jedoch auch für Homematic-Geräte eine "send-to" funktion.

Wer jedoch lieber die Templates nutzt, um auch Funktraffik zu sparen, konnte weekprofile  bisher nicht nutzen.

Anbei nun ein Codeschnipsel, mit welchem man über ein Userreading eine Templatedatei schreiben kann.

Edit: Habe den Code entfernt, da weiter unten eine verbesserte Variante gepostet wurde.

Ebentuell möchte man dies noch um ein

set hm tempListG restore
ergänzen, um jede Änderung direkt automatischh an die Thermostate zu schicken.
Wenn jemand den Perl-Code effizienter hin bekommt, freue ich mich über Rückmeldungen!

Viel Spaß!
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: HeikoE am 07 Oktober 2017, 12:55:03
Hallo JoeALLb,

Danke für das Skript. Mit zwei for-Schleifen sieht es so aus:

HM_Info {
  my $confFile = "./FHEM/wochenplan-tempList.cfg";
  my $entit = fhem("get $name profile_names");
  my $ret="\#               bis   Soll bis   Soll bis   Soll bis   Soll\n";
  my @lines = split /,/, $entit;
  my @D = ("Sat","Sun","Mon","Tue","Wed","Thu","Fri");
  my ($text,$tmp)="";
  foreach my $Raum (@lines)  {
      $tmp = fhem("get $name profile_data $Raum");
      $text = decode_json($tmp);
      $ret.="entities:".$Raum."\n";
      for my $i (0..6) {
          $ret.="R_".$i."_tempList".$D[$i].">";
          for my $j (0..7) {
              $ret.=$text->{$D[$i]}{'time'}[$j]." ".$text->{$D[$i]}{'temp'}[$j]." ";
              }
      $ret.="\n";
      }
  }
  open IMGFILE, '>'.$confFile;
  print IMGFILE $ret;
  close IMGFILE;
  return "HMinfo configTempFile written to $confFile"   
}


Meine templist.cfg sieht so aus:

entities:Bad_Unten
R_0_tempListSat>07:30 17.0 22:00 21.0 24:00 17.0
R_1_tempListSun>07:30 17.0 22:00 21.0 24:00 17.0
R_2_tempListMon>06:30 17.0 08:30 21.0 12:00 18.0 22:00 21.0 24:00 17.0
R_3_tempListTue>06:30 17.0 08:30 21.0 12:00 18.0 22:00 21.0 24:00 17.0
R_4_tempListWed>06:30 17.0 08:30 21.0 12:00 18.0 22:00 21.0 24:00 17.0
R_5_tempListThu>06:30 17.0 08:30 21.0 12:00 18.0 22:00 21.0 24:00 17.0
R_6_tempListFri>06:30 17.0 08:30 21.0 11:30 18.0 22:00 21.0 24:00 17.0


Ich habe also die Reihenfolge der Tage geändert und das "R_[0..6]_" am Anfang hinzugefügt.
Das entspricht den Namen der Readings im <..>_Clima. Ob das nötig ist, weiss ich nicht.

Eine Frage noch zu Deinem Code:
Die Entity-Liste holst Du mit
fhem("get HeizungWochenplan profile_names")
aus dem Device "HeizungWochenplan". Das UserReading gehört zun Device "weekplan", aus dem Du über $name die Profildaten holst.
Das scheint mir nicht ganz zu passen. Ich habe beide Male $name verwendet.

Gruß Heiko

PS. Ich habe den Code aus dem Web-Interface kopiert, dann entallen die ganzen Maskierungen
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: HeikoE am 07 Oktober 2017, 13:06:38
Leider steht im Log jedes Mal

2017.10.07 13:02:53 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 71090) line 15.

Es gibt also noch Optimierungspotential...  ;)
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: JoeALLb am 07 Oktober 2017, 17:00:56
Hallo Heiko,

danke :D

Hm, ein if defined um die Variable sollte helfen,

mit

M_Info {
  my $confFile = "./FHEM/wochenplan-tempList.cfg";
  my $entit = fhem("get $name profile_names");
  my $ret="\#               bis   Soll bis   Soll bis   Soll bis   Soll\n";
  my @lines = split /,/, $entit;
  my @D = ("Sat","Sun","Mon","Tue","Wed","Thu","Fri");
  my ($text,$tmp)="";
  foreach my $Raum (@lines)  {
      $tmp = fhem("get $name profile_data $Raum");
      $text = decode_json($tmp);
      $ret.="entities:".$Raum."\n";
      for my $i (0..6) {
          $ret.="R_".$i."_tempList".$D[$i].">";
          for my $j (0..7) {
              if (defined $text->{$D[$i]}{'time'}[$j]) {
              $ret.=$text->{$D[$i]}{'time'}[$j]." ".$text->{$D[$i]}{'temp'}[$j]." ";
              } }
      $ret.="\n";
      }
  }
  open IMGFILE, '>'.$confFile;
  print IMGFILE $ret;
  close IMGFILE;
  return "HMinfo configTempFile written to $confFile"   
}


konnte ich jetzt mal kein Warning mehr produzieren.
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: HeikoE am 07 Oktober 2017, 17:09:35
Bingo!
wieder was gelernt.
Schöne Grüße
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: HeikoE am 08 Oktober 2017, 10:44:25
Hallo,

ich habe noch etwas gebastelt, um  Profile vorhandener Thermostate in den Profileditor zu übernehmen:
Der Profileditor ist angelegt mittels
define KG.HZ.Profile weekprofile
Zusätzlich habe ich eine Instanz mit Mastergerät angelegt:
define test1 weekprofile OG.SZ.Heizung_Clima

Um die Profildaten in den Profileditor zu kopieren, dient folgendes Script in der "99_myUtils.pm".
Der Name der Entity wird aus dem Reading "tempListTmpl" des zu kopierenden Thermostaten geholt. Dieser wird indirekt über das Internal DEF der Masterinstanz ermittelt:

#############################
###  Thermostat kopieren  ###
#############################

sub kopieren () {
    #Templatenamen aus dem Thermostat holen
    my $Name = AttrVal(InternalVal("test1","DEF",0),"tempListTmpl",1);
    #Profil aus dem Thermostat
    my $daten = fhem("get test1 profile_data master");
   
    #Profil zum Editor hinzufügen
    fhem("set KG.HZ.Profile profile_data ".$Name." ".$daten);
}


Dann einfach
{kopieren()}
ausführen. Die Masterinstanz dann nacheinander mit allen vorhandenen Thermostaten verlinken (Klick auf DEF und Gerätenamen anpassen) und jeweils kopieren.

Gruß Heiko
Titel: Antw:weekprofile für Homematic- Templates (über HMinfo-Heizungstemplates) nutzen
Beitrag von: Beta-User am 13 November 2020, 11:18:24
Hallo zusammen,

sorry, wenn ich diese Leiche hier wiederbelebe...

Habe den Code hier gefunden, weil ich auch auf weekprofile umstellen wollte.
Danke erst mal für die klasse Vorarbeit!

Habe dann das ganze noch etwas erweitert, Details sind hier zu finden: https://forum.fhem.de/index.php/topic,97430.msg1100788.html#msg1100788

Ergänzend evtl. der Hinweis: weekprofile bietet für CUL_HM-Thermostate auch die Möglichkeit, direkt das gerade laufende Wochenprofil zu importieren (aber eben nur das laufende, jedenfalls, wenn ich das richtig verstanden habe); anschließend kann man das beliebig kopieren oder umbenennen.

Grüße, Beta-User