HM-CC-RT-DN Reading Gruppe

Begonnen von TNT0068, 25 August 2014, 13:22:46

Vorheriges Thema - Nächstes Thema

HoTi

Hallo zusammen,

jetzt bin ich doch am verzweifeln, nachdem ich mir alles hundert mal durchgelesen habe funktioniert es jetzt grundsätzlich.

Aber irgendwie fehlen mir da ein paar Überschriften, dass habe ich leider noch nicht verstanden.

Kann mir hier jemand auf die Sprünge helfen??

@budda85
Danke dir, dein Beitrag hat mir sehr geholfen es ans laufen zu bekommen!!!

Viele Grüße aus  Oberbayern
Tim (RettungsTim)

igami

Hallo Tim,

vermutlich fehlen in deinem d_label die readings. Diese werden aber auch nicht mehr benötigt, stattdessen die Überschriften in <> setzten.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Claus

Hallo zusammen,

tolles Projekt und für mich einiges zum lernen, vielen Dank!

Ich habe da eine Frage zum Verständnis:
Bei mir wird der HM-TC-IT-WM-W-EU auch unter "model" so bezeichnet (der RT hingegen als HM-CC-RT-DN)
Wieso geht der funktioniert der u.a. Code (CUL_HM_|)HM_CC_(RT_DN_......_Clima|TC_......_Climate) dann trotzdem?
Nur damit ich es mal verstehe ...

Letzlich möchte ich mir auch die readingsGroup so zusammenstellen, dass der Wandthermostat inkl. Wochenprogramm oben erscheint und die mit diesem gepeerten RTs darunter aufgelistet werden ...
VG
Claus

Zitat von: zentis666 am 08 Dezember 2014, 21:50:54
Hallo!
...
Hier meine Group für RT/TC Mischbetrieb, vielleicht kann sie jemand gebrauchen:
<>,Heizung@d_label,<|>,Temperatur@d_label,<|>,Status@d_label,<|>,Wochenplan@d_label,<|>,Werktag@d_label,<|>,Samstag@d_label,<|>,Sonntag@d_label,<|>,<> (CUL_HM_|)HM_CC_(RT_DN_......_Clima|TC_......_Climate):<>,?alias,<|>,<Soll>,desired-temp,<Tag>,dayTemp@{rg($DEVICE."§clima")},impossible@{$DEVICE},<|>,controlMode,R-btnLock@{rg($DEVICE."§device")},<|>,Zeitraum1@d_label,<|>,workday_period_1_start@{rg($DEVICE."§clima")},workday_period_1_stop@{rg($DEVICE."§clima")},<|>,saturday_period_1_start@{rg($DEVICE."§clima")},saturday_period_1_stop@{rg($DEVICE."§clima")},<|>,sunday_period_1_start@{rg($DEVICE."§clima")},sunday_period_1_stop@{rg($DEVICE."§clima")},<|>,impossible@{$DEVICE},<%system_fhem_update>,<br>,state@{rg($DEVICE."§device")},<%getConfig>,<|>,<Ist>,measured-temp@{rg($DEVICE."§device")},<Nacht>,nightTemp@{rg($DEVICE."§clima")},<|>,<Ventil>,actuator@{rg($DEVICE."§device")},<|>,Zeitraum2@d_label,<|>,workday_period_2_start@{rg($DEVICE."§clima")},workday_period_2_stop@{rg($DEVICE."§clima")},<|>,saturday_period_2_start@{rg($DEVICE."§clima")},saturday_period_2_stop@{rg($DEVICE."§clima")},<|>,sunday_period_2_start@{rg($DEVICE."§clima")},sunday_period_2_stop@{rg($DEVICE."§clima")},<|>,impossible@{$DEVICE},impossible@{rg($DEVICE."§device")},<%burstXmit>

Ein paar kleine Hinweis bräuchte ich noch: die ersten drei Thermostate in anhängendem Bild sind RTs, die anderen TCs.

...

FHEM 5.6 auf RPI B+ / HMLAN (FW 0.961)  / HM-LC-Sw1-Pl / HM-SEC-WDS / HM-SEC-SCo / HM-SEC-RHS / HM-OU-CFM-Pl / HM-ES-PMSw1-Pl / HM-LC-Dim1L-Pl-2 / HM-LC-Sw2-FM / HM-TC-IT-WM-W-EU / HM-CC-RT-DN / HM-PB-6-WM55 / ... mehr kommt noch /

RappaSan

Ich habe mich auch mal an igami's Beschreibung versucht, Wiki durchgelesen und abgearbeitet, aber das Ergebnis für meinen Homematic-Heizungsregler ist eher bescheiden. :(

Die gezeigten Schreenshots hier sind aber zu nett anzusehen, als dass man aufgeben möchte.

Igami, kannst Du nicht eventuell mal einen kompletten funktionierenden Satz an Konfigurations-Dateien bereitstellen, der dem heutigen Entwicklungs-Stand entspricht? Es gibt mittlerweile hier so viele Codeschnipsel, da ist es schwer, alles richtig zusammenzutragen...

igami

Zitat von: RappaSan am 07 Mai 2015, 15:58:54
Igami, kannst Du nicht eventuell mal einen kompletten funktionierenden Satz an Konfigurations-Dateien bereitstellen, der dem heutigen Entwicklungs-Stand entspricht? Es gibt mittlerweile hier so viele Codeschnipsel, da ist es schwer, alles richtig zusammenzutragen...

Bin momentan dabei mein FHEM auf einen Cubietruck umzuziehen und merke dabei, dass ich selbst nicht mehr in der Lage bin die ReadingsGroup zu erstellen :D habe aber schon einige Punkte überarbeitet und bringe sobald es fertig ist das Wiki auf neuen Stand.

Da ich dies Wochenende aber keine Zeit zum basteln habe wird es wohl bis Dienstag warten müssen.

Bis dahin ein schönes Wochenende
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

#140
so, nun habe ich wieder eine funktionierende readingsGroup.

als erstes die myUtils:
Das Paket Switch muss geladen und vorher ggf. installiert werden.

use Switch;

eine kleine Helfer sub um umlaute in Raumnamen zu ersetzten

sub room2devspec($){
  my $room = shift;
    my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss");
    my $umlautkeys = join ("|", keys(%umlaute));
    $room =~ s/($umlautkeys)/$umlaute{$1}/g;
    $room =~ s/[^A-Za-z0-9\.\:\_]//g;
   
  return $room;
}

Dann die makefine sub.

sub makefine{

# climaControl definieren und initialisieren
my @devices = devspec2array(AttrVal('default_cc','devices','.*_Clima'));

foreach my $device (@devices){
   my $room = AttrVal($device, 'room', 'undef');
   if($room ne 'undef'){
     my $cc = room2devspec($room);
      $cc = 'cc_'.$cc;
                             
     if(!(defined($defs{$cc}))){
          {fhem("define $cc dummy")}
          {fhem("setreading $cc dayTemp 21.0")}
          {fhem("setreading $cc nightTemp 17.0")}
          {fhem("setreading $cc 6_period_1_stop 21:00")}
          {fhem("setreading $cc 6_period_1_start 04:15")}
          {fhem("setreading $cc 6_period_2_stop 24:00")}
          {fhem("setreading $cc 6_period_2_start 24:00")}
          {fhem("setreading $cc 0_period_1_stop 21:00")}
          {fhem("setreading $cc 0_period_1_start 04:15")}
          {fhem("setreading $cc 0_period_2_stop 24:00")}
          {fhem("setreading $cc 0_period_2_start 24:00")}
          {fhem("setreading $cc 8_period_1_stop 06:30")}
          {fhem("setreading $cc 8_period_1_start 04:15")}
          {fhem("setreading $cc 8_period_2_stop 21:00")}
          {fhem("setreading $cc 8_period_2_start 15:15")}
          {fhem("attr $cc alias $room")}
          {fhem("attr $cc room $room")}
     }
   }
}

  #Attribute aus Vorgaben übernehmen
  my @defaults = devspec2array('default_.*');

  foreach my $default (@defaults){
    my $wildcard = AttrVal($default,'wildcard','wildcard error');
    my @attributes = split(' ',AttrVal($default,'attributes','attributes error'));
    foreach my $attribute (@attributes){
      my $attrval = AttrVal($default,$attribute,'attribute error');
      fhem("attr $wildcard $attribute $attrval")
    }
  }
}

und die sub rg

sub rg($$){
  my $device = shift;
  my $function = shift;
 
  my $room = AttrVal($device, 'room', 'unsorted');
 
  switch ($function) {
    case 'cc' {
      return ('cc_'.room2devspec($room));
    }
    case 'alias' {
      return (AttrVal($device, 'alias', $device));
    }
    case 'device' {
      return (InternalVal($device, 'device', $device));
    }
    case 'controlMode' {
      my $controlMode = ReadingsVal($device, 'controlMode', '');
     
      switch ($controlMode) {
        case /manual/ {
          fhem("set $device controlMode auto");
        }
        else {
          fhem("set $device controlMode manual");
        }
      }
    }
    case 'btnLock' {
      $device = rg($device, 'device');
      my $btnLock = ReadingsVal($device, 'R-btnLock', '');
     
      switch ($btnLock) {
        case /off/ {
          fhem("set $device regSet btnLock on");
        }
        else {
          fhem("set $device regSet btnLock off");
        }
      }
      fhem ("set $device getConfig");
    }
    case 'globalBtnLock' {
      $device = rg($device, 'device');
      my $globalBtnLock = ReadingsVal($device, 'R-btnLock', '');
     
      switch ($globalBtnLock) {
        case /off/ {
          fhem("set $device regSet globalBtnLock on");
        }
        else {
          fhem("set $device regSet globalBtnLock off");
        }
      }
      fhem ("set $device getConfig");
    }
    case 'setTimeTable' {
      my $cc = rg($device, 'cc');
      my $dayTemp = ReadingsVal( $cc, "dayTemp" , 21.0 );
      my $nightTemp = ReadingsVal( $cc, "nightTemp" , 17.0 );
      my $workday_period_1_start = ReadingsVal( $cc, "8_period_1_start" , "06:30" );
      my $workday_period_1_stop = ReadingsVal( $cc, "8_period_1_stop" , "18:00" );
      my $workday_period_2_start = ReadingsVal( $cc, "8_period_2_start" , "24:00" );
      my $workday_period_2_stop = ReadingsVal( $cc, "8_period_2_stop" , "24:00" );
      my $saturday_period_1_start = ReadingsVal( $cc, "6_period_1_start" , "06:30" );
      my $saturday_period_1_stop = ReadingsVal( $cc, "6_period_1_stop" , "12:00" );
      my $saturday_period_2_start = ReadingsVal( $cc, "6_period_2_start" , "24:00" );
      my $saturday_period_2_stop = ReadingsVal( $cc, "6_period_2_stop" , "24:00" );
      my $sunday_period_1_start = ReadingsVal( $cc, "0_period_1_start" , "24:00" );
      my $sunday_period_1_stop = ReadingsVal( $cc, "0_period_1_stop" , "24:00" );
      my $sunday_period_2_start = ReadingsVal( $cc, "0_period_2_start" , "24:00" );
      my $sunday_period_2_stop = ReadingsVal( $cc, "0_period_2_stop" , "24:00" );
   
      fhem("set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp");
    }
    case 'getConfig' {
      $device = rg($device, 'device');
  fhem("set $device getConfig");
    }
    case 'burstXmit' {
      $device = rg($device, 'device');
      fhem("set $device burstXmit");
    }
  }
}

die myUtils abspeichern und als nächstes das default_cc definieren

Internals:
   NAME       default_cc
   TYPE       dummy
Attributes:
   attributes setList
   room       scrap
   setList    dayTemp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,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 nightTemp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,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 8_period_1_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 8_period_1_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 8_period_2_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 8_period_2_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 6_period_1_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 6_period_1_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 6_period_2_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 6_period_2_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 0_period_1_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 0_period_1_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 0_period_2_start:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00 0_period_2_stop:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00
   userattr   attributes device wildcard
   wildcard   cc_.*

Nun muss die makefine sub aufgerufen werden. Dabei werden für alle Devices die auf '_Clima' enden dummys angelegt in denen die Zeiten für das Wochenprogramm stehen.
Damit auch geänderte Zeiten als reading in die cc devices übernommen werden benötigen wir noch folgendes notify:

Internals:
   DEF        (cc|d)_.* {
if(($EVENT ~~ / /) and ($EVENT !~ /: /))
  {fhem("sleep 0.001; setreading $NAME $EVENT")}
}
   NAME       ntfy_setreading
   TYPE       notify

Weiterhin benötigen wir noch ein notify um auf Klicks in der rg zu reagieren

Internals:
   DEF        ntfy_rg {
rg($EVTPART0, $EVTPART1)
}
   NAME       ntfy_rg
   TYPE       notify

Als letztes dann die readingsGroup definieren.

Internals:
   DEF        <>,<Heizung>,<Temperatur>,<Status>,<Wochenprofil>,<Montag-Freitag>,<Samstag>,<Sonntag>,<>
.*_Clima:<>,!alias,<Soll>,desired-temp,<Tag>,dayTemp@{rg($DEVICE,'cc')},controlMode,R-btnLock@{rg($DEVICE,'device')},<Zeitraum&nbsp;1>,8_period_1_start@{rg($DEVICE,'cc')},8_period_1_stop@{rg($DEVICE,'cc')},6_period_1_start@{rg($DEVICE,'cc')},6_period_1_stop@{rg($DEVICE,'cc')},0_period_1_start@{rg($DEVICE,'cc')},0_period_1_stop@{rg($DEVICE,'cc')},<%system_fhem_update>,<br>,state@{rg($DEVICE,'device')},<%getConfig>,<Ist>,measured-temp,<Nacht>,nightTemp@{rg($DEVICE,'cc')},<Ventil>,ValvePosition,<Zeitraum&nbsp;2>,8_period_2_start@{rg($DEVICE,'cc')},8_period_2_stop@{rg($DEVICE,'cc')},6_period_2_start@{rg($DEVICE,'cc')},6_period_2_stop@{rg($DEVICE,'cc')},0_period_2_start@{rg($DEVICE,'cc')},0_period_2_stop@{rg($DEVICE,'cc')},<%burstXmit>
   NAME       rg_thermostate
   TYPE       readingsGroup
Attributes:
   commands   {'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE btnLock', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', '8_period_1_start' => '8_period_1_start:', '8_period_1_stop' => '8_period_1_stop:', '6_period_1_start' => '6_period_1_start:', '6_period_1_stop' => '6_period_1_stop:', '0_period_1_start' => '0_period_1_start:', '0_period_1_stop' => '0_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'trigger ntfy_rg $DEVICE getConfig', 'nightTemp' => 'nightTemp:', '8_period_2_start' => '8_period_2_start:', '8_period_2_stop' => '8_period_2_stop:', '6_period_2_start' => '6_period_2_start:', '6_period_2_stop' => '6_period_2_stop:', '0_period_2_start' => '0_period_2_start:', '0_period_2_stop' => '0_period_2_stop:', 'rg_thermostate.burstXmit' => 'trigger ntfy_rg $DEVICE burstXmit'}
   nonames    1
   room       Brücke
   valueColumns {   'Heizung' => 'colspan="2"',   'alias' => 'colspan="2"',   'Temperatur' => 'colspan="4"',   'Status' => 'colspan="2"',   'Montag-Freitag' => 'colspan="2"',   'Samstag' => 'colspan="2"',   'Sonntag' => 'colspan="2"'}
   valueFormat {'alias' => '{"<a href=/fhem?detail=$DEVICE>". rg($DEVICE,"alias") ."</a>"}' , 'measured-temp' => "%0.1f °C", 'ValvePosition' => "%0.1f %%"}
   valueIcon  {'controlMode.auto' => 'sani_heating_automatic@green', 'controlMode.set_auto' => 'sani_heating_automatic@orange', 'controlMode.manual' => 'sani_heating_manual@red', 'controlMode.set_manual' => 'sani_heating_manual@orange', 'R-btnLock.on' => 'secur_locked@green', 'R-btnLock.on ' => 'secur_locked@green', 'R-btnLock.set_on' => 'secur_locked@orange', 'R-btnLock.set_on ' => 'secur_locked@orange', 'R-btnLock.off' => 'secur_open@red', 'R-btnLock.off ' => 'secur_open@red', 'R-btnLock.set_off' => 'secur_open@orange', 'R-btnLock.set_off ' => 'secur_open@orange', 'R-globalBtnLock.on' => 'secur_locked@green', 'R-globalBtnLock.on ' => 'secur_locked@green', 'R-globalBtnLock.set_on' => 'secur_locked@orange', 'R-globalBtnLock.set_on ' => 'secur_locked@orange', 'R-globalBtnLock.off' => 'secur_open@red', 'R-globalBtnLock.off ' => 'secur_open@red', 'R-globalBtnLock.set_off' => 'secur_open@orange', 'R-globalBtnLock.set_off ' => 'secur_open@orange', }


Bitte darauf achten, dass es mit alten Komponenten des Codes wahrscheinlich nicht funktioniert.

Nun bitte testen und sagen wo noch Missverständnisse bestehen.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Hat das mittlerweile jemand ohne Probleme so nachgebaut? Dann würde ich das Wiki überarbeiten, ansonsten bitte Bescheid geben was noch unklar ist.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

RappaSan

Ein spontaner Versuch brachte nur teilweise Erfolg.
Ich bekomme hier nur einige Werte wie Soll, Ist, Ventil und CMD-Status (pending, done) angezeigt, aber kann keine Eingaben machen.
Mir fehlt momentan die Zeit, mich in die ganze Sache hineinzudenken und dem Problem nachzugehen. Vielleicht ja am kommenden langen Wochenende...

Mirko815

Hallo igami,

ich baue gerade die Heizungssteuerung nach Deinen Vorgaben aus Thread #140 nach.
Dabei ist mir aufgefallen, dass Du im makefine das device $cc mit einem d_ davor erstellst,
später aber in der Wildcard des default_cc kein d_ mehr davor hast.
Ist das gewollt und ich stehe auf dem Schlauch oder evtl. ein kleiner Tippfehler?

LG
Mirko

igami

Hallo Mirko,

das war ein Tippfehler, habe meinen Beitrag editiert.
Ich habe mich dazu entschlossen das d_ wegzulassen, da ich dies als wildcard für dummys nutze.
desweiteren hat sich das ntfy_setreading noch ein bisschen abgewandelt um nicht bei jedem Event zu triggern.

Bitte Berichte mir was sonst noch unstimmig ist.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mirko815

Hallo igami,

ich habe nun (glaube ich) Deinen kompletten Code kopiert und den Bedürfnissen nach angepasst. Leider kommt bei mir bei den Zeiträumen immer noch kein Drop-Down-Feld. Außerdem ist das Feld zum Übertragen der Werte nicht anklickbar.

Wo kann das Problem liegen? Darf ich Dir meinen kompletten Code hochladen?

LG
Mirko

igami

Hallo Mirko,

es scheint so, als wenn die dummys bei dir immer noch d_cc_ heißen, in der ReadingsGroup wird nach cc_ gesucht für die Dropdowns.
Für das anklicken steht im commands Attribut der Readingsgroup ganz am Ende

'rg_thermostate.burstXmit' => 'trigger ntfy_rg $DEVICE burstXmit'

dort muss der Name deiner Readingsgroup stehen. Ist eine potentielle Fehlerquelle, werde ich noch ändern.

Was hast du denn noch angepasst?

grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mirko815

Hallo igami,

habe den Fehler gefunden. In dem makefile war noch der Name anstatt des Buchstabens als Aufruf.
Und meine RG hieß anders. Habe den Aufruf nicht angepasst.
Soweit ich jetzt beurteilen kann, läuft Dein Code prima.

LG und vielen Dank für die Hilfe.
Mirko

gpbim

#148
Hello,
great job :)

In building I have a large number of thermostats and window sensors. If you would like to check the statuses of all batteries would require a lot of clicking so I wrote a function that returns the status of the battery in each room for all the thermostats and window sensors in the room.
It is necessary to make additional dummys ({makefine} function), their values are reading through the "state". Through state value is in the table already read from the thermostat, so I wondering if I can expect any problems?
This are my first lines in Perl so you will certainly found some bugs... :)


Because of some troubles with thermostats which have different fw versions and return no 'ok' status for battery I used analog values of voltage in function...

Battery status:

sub bat($){
  my @input    = split(/[§\s]+/,shift);
  my $device   = $input[0];
  my $function = $input[1];
  my $lowBat = 0;

    if($function eq "battery"){
    my $room =  AttrVal($device, 'room', 'undef');

    my $roomNumber = $room;
    $roomNumber =~ s/\D//g;

        my @battery_dev = devspec2array("TYPE=CUL_HM:FILTER=model=(HM-CC-RT-DN|HM-SEC-SC-2):FILTER=room=$room");
foreach my $battery_dev (@battery_dev){

            # check battery status individual devices
        my $batteryStatus = ReadingsVal("$battery_dev","battery","");
my $batteryLevel = ReadingsVal("$battery_dev","batteryLevel","");
my $R_lowBatLimitRT = ReadingsVal("$battery_dev","R-lowBatLimitRT","");

        #$batteryLevel =~ s/\D//g;
#$R_lowBatLimitRT =~ s/\D//g;

                        $batteryLevel =~ s/[^\d.]//g;
                        $R_lowBatLimitRT  =~ s/[^\d.]//g;

            if((((AttrVal("$battery_dev","model","") eq "HM-SEC-SC-2") && ($batteryStatus ne 'ok'))) || ((AttrVal("$battery_dev","model","") eq "HM-CC-RT-DN") && ($batteryLevel < $R_lowBatLimitRT)))
                {
         $lowBat = ++$lowBat;
{fhem("set d_batteryStatus_$roomNumber $lowBat")};
                }
                     
   if ($lowBat >= 1)
   {
   {fhem("set d_batteryStatus_$roomNumber low")};
   }
                   else
   {
   {fhem("set d_batteryStatus_$roomNumber ok")};
   }

        }
     return(("d_batteryStatus_".$roomNumber));
    }
}



Makefine:

sub makefine{

#d_climaControl definieren und Initialisiern
#  my @devices = devspec2array('.._(......|....)_Heizung_Clima');
  my @devices = devspec2array('CUL_HM_Soba_..._Clima');

  foreach my $device (@devices){
    my $room = AttrVal($device, 'room', 'undef');
    if($room ne 'undef'){
      my $roomNumber = $room;
      $roomNumber =~ s/\D//g;
      my $climaControl = ('d_climaControl_'.$roomNumber);

      my $batteryStatus = ('d_batteryStatus_'.$roomNumber);

      if(!(defined($defs{$climaControl}))){
           {fhem("define $climaControl dummy")}
           {fhem("setreading $climaControl dayTemp 22.0")}
           {fhem("setreading $climaControl nightTemp 18.0")}
           {fhem("setreading $climaControl saturday_period_1_stop 20:00")}
           {fhem("setreading $climaControl saturday_period_1_start 06:00")}
           {fhem("setreading $climaControl saturday_period_2_stop 06:00")}
           {fhem("setreading $climaControl saturday_period_2_start 20:00")}
           {fhem("setreading $climaControl sunday_period_1_stop 20:00")}
           {fhem("setreading $climaControl sunday_period_1_start 06:00")}
           {fhem("setreading $climaControl sunday_period_2_stop 06:00")}
           {fhem("setreading $climaControl sunday_period_2_start 20:00")}
           {fhem("setreading $climaControl workday_period_1_stop 20:00")}
           {fhem("setreading $climaControl workday_period_1_start 06:00")}
           {fhem("setreading $climaControl workday_period_2_stop 06:00")}
           {fhem("setreading $climaControl workday_period_2_start 20:00")}
           {fhem("attr $climaControl room $room")}

           {fhem("define $batteryStatus dummy")}
           {fhem("attr $batteryStatus room $room")}
      }
    }
  }

  #Attribute aus Vorgaben übernehmen
  my @defaults = devspec2array('default_.*');

  foreach my $default (@defaults){
    my $wildcard = AttrVal($default,'wildcard','wildcard error');
    my @attributes = split(' ',AttrVal($default,'attributes','attributes error'));
    foreach my $attribute (@attributes){
      my $attrval = AttrVal($default,$attribute,'attribute error');
      fhem("attr $wildcard $attribute $attrval")
    }
  }
}



fhem.cfg

define rg_thermostate readingsGroup <>,Ogrevanje@d_label,<|>,Temperatura@d_label,<|>,Status@d_label,<|>,Urnik@d_label,<|>,Delovni_dan@d_label,<|>,Sobota@d_label,<|>,Nedelja@d_label,<|>,Prenos@d_label,<> CUL_HM_Soba_..._Clima:state@{bat($DEVICE."§battery")},?alias,<|>,<Nastavitev>,desired-temp,<Dan>,dayTemp@{rg($DEVICE."§clima")},impossible@{$DEVICE},<|>,controlMode,R-globalBtnLock@{rg($DEVICE."§device")},<|>,Obdobje1@d_label,<|>,workday_period_1_start@{rg($DEVICE."§clima")},workday_period_1_stop@{rg($DEVICE."§clima")},<|>,saturday_period_1_start@{rg($DEVICE."§clima")},saturday_period_1_stop@{rg($DEVICE."§clima")},<|>,sunday_period_1_start@{rg($DEVICE."§clima")},sunday_period_1_stop@{rg($DEVICE."§clima")},<|>,impossible@{$DEVICE},<%system_fhem_update>,<br>,state@{rg($DEVICE."§device")},<%getConfig>,<|>,<Izmerjena>,measured-temp,<Noč>,nightTemp@{rg($DEVICE."§clima")},<|>,<Ventil>,ValvePosition,<|>,Obdobje2@d_label,<|>,workday_period_2_start@{rg($DEVICE."§clima")},workday_period_2_stop@{rg($DEVICE."§clima")},<|>,saturday_period_2_start@{rg($DEVICE."§clima")},saturday_period_2_stop@{rg($DEVICE."§clima")},<|>,sunday_period_2_start@{rg($DEVICE."§clima")},sunday_period_2_stop@{rg($DEVICE."§clima")},<|>,impossible@{$DEVICE},impossible@{rg($DEVICE."§device")},<%burstXmit>


Icons:

attr rg_thermostate valueIcon { 'state.ok' => 'batterie@lightgreen', 'state.low' => 'batterie@red', 'controlMode.auto' => 'sani_heating_automatic@green', 'controlMode.set_auto' => 'sani_heating_automatic@orange', 'controlMode.manual' => 'sani_heating_manual@red', 'controlMode.set_manual' => 'sani_heating_manual@orange', 'R-globalBtnLock.on' => 'secur_locked@green', 'R-globalBtnLock.on ' => 'secur_locked@green', 'R-globalBtnLock.set_on ' => 'secur_locked@orange', 'R-globalBtnLock.off' => 'secur_open@red', 'R-globalBtnLock.off ' => 'secur_open@red', 'R-globalBtnLock.set_off ' => 'secur_open@orange'}



George

MrMaxy

Hi,

ich bin schon recht weit gekommen, allerdings sieht's immer noch schrecklich aus.
Könnt ihr mir vielleicht helfen und einen Tipp geben, damit ich wieder einen kleinen Schritt nach vorne machen kann?

Mit hilfesuchenden Grüßen
Raspberry Pi
CC1101-USB-Lite 868MHz (CUL)
Tür-/Fensterkontakte, optisch; Fenster-Drehgriffkontakt; Heizkörperthermostate; Wandthermostate; Schaltaktor 1-fach, Zwischenstecker; Schaltaktor 4-fach, Hutschienenmontage
(Alle HomeMatic)