Readingsgroup Heizungssteuerung aus Wiki

Begonnen von der_da, 17 November 2021, 11:38:45

Vorheriges Thema - Nächstes Thema

der_da

Hallo liebe Forumsler,
ich habe ein paar Heizungsthermostate vom Typ HM_CC_RT_DN im Einsatz, die auch brav tun was sie sollen.
Im FHEM-Wiki ist unter Heizungswerte, Status, Steuerung und Wochenprofil beschrieben, wie man eine komfortable Steuerung für die ganze Woche realisiert. Ich habe versucht, das nachzubauen, bekomme es aber nicht hin. Ich muss zugeben, es ist mir zu komplex, um es komplett nachvollziehen zu können. Die Readingsgroup ist da, zeigt aber nur die Überschriften.
Auf welchem Weg kommen denn die Thermostate in die Gruppe? Im beteiligten d_climaControl ist erwähnt, dass man @devices anpassen müsste, wenn man nicht nur Homematic-Thermostate im Einsatz hat. Da ich nur solche einsetze, ist da auch nichts zu ändern?
rg_thermostate und d_label wurden per copy&paste definiert wie im Wiki beschrieben. Es existiert eine 99_myUtils.pm mit folgendem Code für sub makefine:
sub makefine{
#https://wiki.fhem.de/wiki/Makefine#d_climaControl
#d_climaControl definieren und Initialisieren
  my @devices = devspec2array('CUL_HM_HM_CC_RT_DN_......_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);
      if(!(defined($defs{$climaControl}))){
           {fhem("define $climaControl dummy")}
           {fhem("setreading $climaControl dayTemp 21.0")}
           {fhem("setreading $climaControl nightTemp 17.0")}
           {fhem("setreading $climaControl saturday_period_1_stop 21:00")}
           {fhem("setreading $climaControl saturday_period_1_start 04:15")}
           {fhem("setreading $climaControl saturday_period_2_stop 24:00")}
           {fhem("setreading $climaControl saturday_period_2_start 24:00")}
           {fhem("setreading $climaControl sunday_period_1_stop 21:00")}
           {fhem("setreading $climaControl sunday_period_1_start 04:15")}
           {fhem("setreading $climaControl sunday_period_2_stop 24:00")}
           {fhem("setreading $climaControl sunday_period_2_start 24:00")}
           {fhem("setreading $climaControl workday_period_1_stop 06:30")}
           {fhem("setreading $climaControl workday_period_1_start 04:15")}
           {fhem("setreading $climaControl workday_period_2_stop 21:00")}
           {fhem("setreading $climaControl workday_period_2_start 15:15")}
           {fhem("attr $climaControl 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 dem Code der sub rg:

#https://wiki.fhem.de/wiki/ReadingsGroup#sub_rg
sub rg($){
  my @input    = split(/[§\s]+/,shift);
  my $device   = $input[0];
  my $function = $input[1];

if($function eq "clima"){
  my $room =  AttrVal($device, 'room', 'undef');
  $room =~ s/\D//g;
 
  return(("d_climaControl_".$room));
}
elsif($function eq "device"){
  return InternalVal($device,"device","device error");
}
elsif($function eq "controlMode"){
  my $controlMode = ReadingsVal($device,"controlMode","controlMode error");

  if($controlMode ~~ /manual/)
    {fhem("set $device controlMode auto")}
  elsif($controlMode ~~ /auto/)
    {fhem("set $device controlMode manual")};
}
elsif($function eq "globalBtnLock"){
  my $globalBtnLock = ReadingsVal($device,"R-globalBtnLock","globalBtnLock error");

  if($globalBtnLock ~~ /off/){
    {fhem("set $device regSet globalBtnLock on")}
    {fhem ("set $device getConfig")}
  }
  elsif($globalBtnLock ~~ /on/){
    {fhem("set $device regSet globalBtnLock off")}
    {fhem ("set $device getConfig")}
  };
}
elsif($function eq "state"){
  my $state = Value($device);

  if($state ~~ /off/){
    {fhem("set $device on")}
  }
  elsif($state ~~ /on/){
    {fhem("set $device off")}
  };
}
elsif($function eq "setTimeTable"){
  my $room         =  AttrVal($device, 'room', 'undef');
  $room         =~ s/\D//g;
  my $climaControl = ("d_climaControl_".$room);
  my $dayTemp           = ReadingsVal( $climaControl, "dayTemp"          , 21.0    );
  my $nightTemp         = ReadingsVal( $climaControl, "nightTemp"        , 17.0    );
  my $workday_period_1_start  = ReadingsVal( $climaControl, "workday_period_1_start"  , "06:30" );
  my $workday_period_1_stop   = ReadingsVal( $climaControl, "workday_period_1_stop"   , "18:00" );
  my $workday_period_2_start  = ReadingsVal( $climaControl, "workday_period_2_start"  , "24:00" );
  my $workday_period_2_stop   = ReadingsVal( $climaControl, "workday_period_2_stop"   , "24:00" );
  my $saturday_period_1_start = ReadingsVal( $climaControl, "saturday_period_1_start" , "06:30" );
  my $saturday_period_1_stop  = ReadingsVal( $climaControl, "saturday_period_1_stop"  , "12:00" );
  my $saturday_period_2_start = ReadingsVal( $climaControl, "saturday_period_2_start" , "24:00" );
  my $saturday_period_2_stop  = ReadingsVal( $climaControl, "saturday_period_2_stop"  , "24:00" );
  my $sunday_period_1_start   = ReadingsVal( $climaControl, "sunday_period_1_start"   , "24:00" );
  my $sunday_period_1_stop    = ReadingsVal( $climaControl, "sunday_period_1_stop"    , "24:00" );
  my $sunday_period_2_start   = ReadingsVal( $climaControl, "sunday_period_2_start"   , "24:00" );
  my $sunday_period_2_stop    = ReadingsVal( $climaControl, "sunday_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")};
}
}

Außerdem gibt es die 99_cleanUtils, die auch wie im Forum hier als Download angeboten, angelegt wurde.
Was fehlt da noch oder ist noch anzupassen, damit meine Readingsgroup die Thermostate auflistet?

MadMax-FHEM

Ich hab ja das nicht alles im Detail nachvollzogen und auch das Wiki jetzt nicht durch gearbeitet aber:

poste doch auch mal ein list der readingsGroup und zwar DEINER!

Dann noch ein list (mind.) eines der HM_CC_RT_DN...

Und was ich denke:

Zitat
my @devices = devspec2array('CUL_HM_HM_CC_RT_DN_......_Clima');

Funktioniert nat. nur, wenn deine Devices da auch dazu "passen", also was liefert:


list CUL_HM_HM_CC_RT_DN_......_Clima


Das wirst du verm. (mindestens) anpassen müssen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

der_da

Hallo Joachim,
hier wie gewünscht das list eines der Thermostate:
Internals:
   CFGFN     
   DEF        08154704
   FUUID      61901554-f33f-d4a9-db50-2a6efe0c2150bca4
   NAME       HM_081547_Clima
   NR         32819
   NTFY_ORDER 50-HM_081547_Clima
   STATE      T: 18.7 desired: 17.0 valve: 0
   TYPE       CUL_HM
   chanNo     04
   device     HM_081547
   disableNotifyFn 1
   READINGS:
     2021-11-17 07:38:40   CommandAccepted yes
     2021-11-13 21:12:24   R-boostPeriod   5 min
     2021-11-13 21:12:24   R-boostPos      80 %
     2021-11-13 21:12:24   R-btnNoBckLight off
     2021-11-13 21:12:24   R-dayTemp       21 C
     2021-11-13 21:12:24   R-daylightSaveTime on
     2021-11-13 21:12:24   R-decalcTime    11:00
     2021-11-13 21:12:24   R-decalcWeekday Sat
     2021-11-13 21:12:24   R-modePrioManu  all
     2021-11-13 21:12:24   R-modePrioParty all
     2021-11-13 21:12:24   R-nightTemp     17 C
     2021-11-13 21:12:24   R-noMinMax4Manu off
     2021-11-13 21:12:24   R-regAdaptive   on
     2021-11-13 21:12:24   R-reguExtI      15
     2021-11-13 21:12:24   R-reguExtP      30
     2021-11-13 21:12:24   R-reguExtPstart 30
     2021-11-16 07:08:59   R-reguIntI      18
     2021-11-16 07:08:59   R-reguIntP      33
     2021-11-16 18:07:00   R-reguIntPstart 45
     2021-11-13 21:12:24   R-showInfo      time
     2021-11-13 21:12:24   R-showWeekday   off
     2021-11-13 21:12:20   R-sign          off
     2021-11-13 21:12:24   R-tempMax       30.5 C
     2021-11-13 21:12:24   R-tempMin       4.5 C
     2021-11-13 21:12:24   R-tempOffset    0.0K
     2021-11-13 21:12:24   R-valveErrPos   15 %
     2021-11-13 21:12:24   R-valveMaxPos   100 %
     2021-11-13 21:12:24   R-valveOffsetRt 0 %
     2021-11-13 21:12:24   R-winOpnBoost   off
     2021-11-13 21:12:24   R-winOpnDetFall 1.4 K
     2021-11-13 21:12:24   R-winOpnMode    on
     2021-11-13 21:12:24   R-winOpnPeriod  15 min
     2021-11-13 21:12:24   R-winOpnTempI   12 C
     2021-11-16 18:07:00   R_0_tempListSat  06:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_1_tempListSun  06:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_2_tempListMon  06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_3_tempListTue  06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_4_tempListWed  06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_5_tempListThu  06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_6_tempListFri  06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2021-11-16 18:07:00   R_tempList_State verified
     2021-11-14 14:21:04   RegL_01.         00:00 08:00
     2021-11-16 18:07:00   RegL_07.         00:00 01:2A 02:22 03:09 04:3D 05:18 06:03 07:00 08:16 09:07 0A:30 0B:00 0C:64 0D:0F 0E:05 0F:00 10:00 11:00 12:09 13:8E 14:44 15:48 16:55 17:08 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:44 2F:48 30:55 31:08 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:44 49:48 4A:54 4B:6C 4C:44 4D:CC 4E:55 4F:08 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:44 63:48 64:54 65:6C 66:44 67:CC 68:55 69:08 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:44 7D:48 7E:54 7F:6C 80:44 81:CC 82:55 83:08 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:44 97:48 98:54 99:6C 9A:44 9B:CC 9C:55 9D:08 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:44 B1:48 B2:54 B3:6C B4:44 B5:CC B6:55 B7:08 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:12 CB:21 CC:2D CD:0F CE:1E CF:1E
     2021-11-17 13:10:52   ValvePosition   0
     2021-11-17 13:10:52   boostTime       -
     2021-11-16 18:08:00   cfgState        TempChk
     2021-11-17 10:33:55   commState       CMDs_done
     2021-11-17 13:10:52   controlMode     auto
     2021-11-17 13:10:52   desired-temp    17.0
     2021-11-17 13:10:52   measured-temp   18.7
     2021-11-17 13:10:52   partyEnd        -
     2021-11-17 13:10:52   partyStart      -
     2021-11-17 13:10:52   partyTemp       -
     2021-11-17 07:38:40   recentStateType ack
     2021-11-17 13:10:52   state           T: 18.7 desired: 17.0 valve: 0
     2021-11-15 22:30:53   trigLast        fhem:80
   helper:
     peerFriend peerRTteam2
     peerIDsRaw ,00000000
     peerIDsState complete
     peerOpt    p:thermostat
     regLst     1,7
     cfgChk:
       idTp00     file: ./tempList.cfg error:Can't open ./tempList.cfg: No such file or directory
     cmds:
       TmplKey    :no:1636834330.58871
       TmplTs     1636834330.58871
       cmdKey     1:0:0::HM_081547:0095:04:
       cmdLst:
         burstXmit  noArg
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         controlManu (on|off|5.0..30.0;0.5)
         controlMode (auto|manual|boost|day|night)
         controlParty -temp- -startDate- -startTime- -endDate- -endTime-
         desired-temp (on|off|5.0..30.0;0.5)
         getConfig  noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
         inhibit    [(on|{off})]
         peerBulk   -peer1,peer2,...- [({set}|unset)]
         regBulk    -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         sysTime    noArg
         tempListFri [(prep|{exec})] -HH:MM- -temp- [...]
         tempListMon [(prep|{exec})] -HH:MM- -temp- [...]
         tempListSat [(prep|{exec})] -HH:MM- -temp- [...]
         tempListSun [(prep|{exec})] -HH:MM- -temp- [...]
         tempListThu [(prep|{exec})] -HH:MM- -temp- [...]
         tempListTmpl [({verify}|restore)] [[-file-:]-templateName-]
         tempListTue [(prep|{exec})] -HH:MM- -temp- [...]
         tempListWed [(prep|{exec})] -HH:MM- -temp- [...]
         tempTmplSet -tempTmpl-
         tplDel     -tplDel-
         tplSet_0   -tplChan-
       lst:
         condition  slider,0,1,255
         peer       
         peerOpt   
         tplChan   
         tplDel     
         tplPeer   
       rtrvLst:
         cmdList    [({short}|long)]
         deviceInfo [({short}|long)]
         list       [({normal}|full)]
         param      -param-
         reg        -addr- -list- [-peerChn-]
         regList    noArg
         regTable   noArg
         regVal     -addr- -list- [-peerChn-]
         saveConfig [-filename-]
         tplInfo    noArg
     expert:
       def        1
       det        1
       raw        1
       tpl        1
     peerIDsH:
       00000000   broadcast
     prt:
       brstWu     1
     regCollect:
     role:
       chn        1
     shRegR:
       07         00
     shadowReg:
     tmpl:
Attributes:
   alias      mein Aliasname
   fp_Floorplan    199,271,7,HM_081547_Clima
   icon       hc_wht_regler
   model      HM-CC-RT-DN
   peerIDs    00000000
   room       Unsorted


und hier ein list meiner readingsgroup rg_thermostate:
Internals:
   CFGFN     
   DEF        <>,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:<>,?alias,<|>,<Soll>,desired-temp,<Tag>,dayTemp@{rg($DEVICE."§clima")},impossible@{$DEVICE},<|>,controlMode,R-globalBtnLock@{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,<Nacht>,nightTemp@{rg($DEVICE."§clima")},<|>,<Ventil>,ValvePosition,<|>,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>
   FUUID      6191107e-f33f-d4a9-7fe8-d8ff0c54b13af536
   NAME       rg_thermostate
   NR         44978
   NTFY_ORDER 50-rg_thermostate
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
   CONTENT2:
   DEVICES:
     ARRAY(0x5a6f748)
   fhem:
     lastDefChange 595
     last_update 1637136278.75271
   helper:
     DEF       
     commands   { 'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', 'workday_period_1_start' => 'workday_period_1_start:', 'workday_period_1_stop' => 'workday_period_1_stop:', 'saturday_period_1_start' => 'saturday_period_1_start:', 'saturday_period_1_stop' => 'saturday_period_1_stop:', 'sunday_period_1_start' => 'sunday_period_1_start:', 'sunday_period_1_stop' => 'sunday_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'set $DEVICE getConfig', 'nightTemp' => 'nightTemp:', 'workday_period_2_start' => 'workday_period_2_start:', 'workday_period_2_stop' => 'workday_period_2_stop:', 'saturday_period_2_start' => 'saturday_period_2_start:', 'saturday_period_2_stop' => 'saturday_period_2_stop:', 'sunday_period_2_start' => 'sunday_period_2_start:', 'sunday_period_2_stop' => 'sunday_period_2_stop:', 'rg_thermostate.burstXmit' => 'set $DEVICE burstXmit'}
     valueStyle {($READING eq "Heizung" ||$READING eq "Temperatur" ||$READING eq "Status" ||$READING eq "Wochenplan" ||$READING eq "Werktag" ||$READING eq "Samstag" ||$READING eq "Sonntag" )?'style="font-size:20px;;color:RoyalBlue;;text-align:center"' :($READING eq "alias" )?'style="font-size:11px;;font-weight:bold;;text-align:left"' :($READING eq "ValvePosition" &&$VALUE > 40 )?'style="font-weight:bold;;color:Orange;;text-align:left"' :($READING eq "desired-temp" ||$READING eq "measured-temp" )?'style="text-align:center"' :($READING eq "state" ||$READING eq "ValvePosition" )?'style="text-align:left"' :'style="text-align:right"'}
     mapping:
       desired-temp dayTemp
       nightTemp  workday_period_2_start
       saturday_period_1_start saturday_period_1_stop
       saturday_period_2_stop sunday_period_2_start
       sunday_period_1_start sunday_period_1_stop
       sunday_period_2_stop
       workday_period_1_start workday_period_1_stop
       workday_period_2_stop saturday_period_2_start
     positions:
       d_label.Heizung 1:2
       d_label.Samstag 1:12
       d_label.Sonntag 1:14
       d_label.Status 1:6
       d_label.Temperatur 1:4
       d_label.Werktag 1:10
       d_label.Wochenplan 1:8
     valueColumns:
       Heizung    colspan="2"
       Samstag    colspan="2"
       Sonntag    colspan="2"
       Status     colspan="2"
       Temperatur colspan="4"
       Werktag    colspan="2"
       alias      colspan="2"
     valueFormat:
       ValvePosition %0.1f %%
       measured-temp %0.1f °C
     valueIcon:
       R-globalBtnLock.off secur_open@red
       R-globalBtnLock.off  secur_open@red
       R-globalBtnLock.on secur_locked@green
       R-globalBtnLock.on  secur_locked@green
       R-globalBtnLock.set_off  secur_open@orange
       R-globalBtnLock.set_on  secur_locked@orange
       controlMode.auto sani_heating_automatic@green
       controlMode.manual sani_heating_manual@red
       controlMode.set_auto sani_heating_automatic@orange
       controlMode.set_manual sani_heating_manual@orange
     values:
       formated:
         undef
         undef
         ARRAY(0x4d53520)
         undef
         ARRAY(0x5a852a0)
         undef
         ARRAY(0x5201f20)
         undef
         ARRAY(0x4d718d0)
         undef
         ARRAY(0x51db660)
         undef
         ARRAY(0x4c67640)
         undef
         ARRAY(0x5a43938)
       orig:
         undef
         undef
         ARRAY(0x51bc8e8)
         undef
         ARRAY(0x5c974c0)
         undef
         ARRAY(0x520b190)
         undef
         ARRAY(0x5ca31f8)
         undef
         ARRAY(0x48f9200)
         undef
         ARRAY(0x5a80588)
         undef
         ARRAY(0x52170f8)
       prefixsuffix:
         undef
         undef
         ARRAY(0x48a41f0)
         undef
         ARRAY(0x5c9aed0)
         undef
         ARRAY(0x4cc9818)
         undef
         ARRAY(0x50fd618)
         undef
         ARRAY(0x5a80990)
         undef
         ARRAY(0x5b33258)
         undef
         ARRAY(0x3cccb38)
Attributes:
   commands   { 'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', 'workday_period_1_start' => 'workday_period_1_start:', 'workday_period_1_stop' => 'workday_period_1_stop:', 'saturday_period_1_start' => 'saturday_period_1_start:', 'saturday_period_1_stop' => 'saturday_period_1_stop:', 'sunday_period_1_start' => 'sunday_period_1_start:', 'sunday_period_1_stop' => 'sunday_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'set $DEVICE getConfig', 'nightTemp' => 'nightTemp:', 'workday_period_2_start' => 'workday_period_2_start:', 'workday_period_2_stop' => 'workday_period_2_stop:', 'saturday_period_2_start' => 'saturday_period_2_start:', 'saturday_period_2_stop' => 'saturday_period_2_stop:', 'sunday_period_2_start' => 'sunday_period_2_start:', 'sunday_period_2_stop' => 'sunday_period_2_stop:', 'rg_thermostate.burstXmit' => 'set $DEVICE burstXmit'}
   mapping    { 'desired-temp' => , 'dayTemp' => , 'workday_period_1_start' => , 'workday_period_1_stop' => , 'saturday_period_1_start' => , 'saturday_period_1_stop' => , 'sunday_period_1_start' => , 'sunday_period_1_stop' => , 'nightTemp' => , 'workday_period_2_start' => , 'workday_period_2_stop' => , 'saturday_period_2_start' => , 'saturday_period_2_stop' => , 'sunday_period_2_start' => , 'sunday_period_2_stop' => }
   room       Test
   valueColumns { 'Heizung' => 'colspan="2"', 'Temperatur' => 'colspan="4"', 'Status' => 'colspan="2"', 'Werktag' => 'colspan="2"', 'Samstag' => 'colspan="2"', 'Sonntag' => 'colspan="2"', 'alias' => 'colspan="2"'}
   valueFormat { '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-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'}
   valueStyle {($READING eq "Heizung" ||$READING eq "Temperatur" ||$READING eq "Status" ||$READING eq "Wochenplan" ||$READING eq "Werktag" ||$READING eq "Samstag" ||$READING eq "Sonntag" )?'style="font-size:20px;;color:RoyalBlue;;text-align:center"' :($READING eq "alias" )?'style="font-size:11px;;font-weight:bold;;text-align:left"' :($READING eq "ValvePosition" &&$VALUE > 40 )?'style="font-weight:bold;;color:Orange;;text-align:left"' :($READING eq "desired-temp" ||$READING eq "measured-temp" )?'style="text-align:center"' :($READING eq "state" ||$READING eq "ValvePosition" )?'style="text-align:left"' :'style="text-align:right"'}


Ein list von CUL_HM_HM_CC_RT_DN_......_Clima bringt einen Fehler, da dieses Device nicht definiert ist. Daher ist das vermutlich genau der Punkt. Mir ist nur nicht klar, was da stattdessen definiert werden muss. Meine Thermostate haben alle, wie oben im Beispiel erkennbar, das Schema HM_<6stelligeID>_Clima.

MadMax-FHEM

#3
Zitat von: der_da am 17 November 2021, 13:22:10
Ein list von CUL_HM_HM_CC_RT_DN_......_Clima bringt einen Fehler, da dieses Device nicht definiert ist. Daher ist das vermutlich genau der Punkt. Mir ist nur nicht klar, was da stattdessen definiert werden muss. Meine Thermostate haben alle, wie oben im Beispiel erkennbar, das Schema HM_<6stelligeID>_Clima.

lists schaue ich (evtl./bei Bedarf, siehe weiter unten) später noch mal drüber...

Aber wenn da (wie gedacht/erwartet) ein Fehler bei dem list kommt, dann kann die Sub ja auch nicht tun ;)

Wenn "Schema HM_<6stelligeID>_Clima", dann eben:

HM_......_Clima ;)

Ist zwar nicht genau HEX-Werte sondern "irgendwelche Zeichen" aber das sollte zumindest greifen...
...also mal die Sub ändern und sehen, was passiert.

Evtl. war es das schon...
...ansonsten halt (neue) Probleme etc. schildern und weiter...

Heißt Regex und sollte man lernen, wenn man mit fhem umgeht...
(bin auch kein Spezialist aber dass das wichtig ist habe auch ich begreifen müssen 8)  )

Zitat von: commandref
Geräte-Spezifikation (devspec)
[EN DE]

    Die Befehle attr, set, get, usw. attr, deleteattr, displayattr, delete, get, list, set, setreading, setstate, trigger können eine komplexere Gerätespezifikation als Argumente enthalten, die auch eine Anzahl von Geräten betreffen kann. Eine Gerätespezifikation kann folgendes sein:
        ein einzelner Gerätename. Dies ist der Normalfall
        eine durch Komma(,) getrennte Liste von Gerätenamen
        ein regulärer Ausdruck
        ein NAME=WERT Ausdruck, wo NAME ein "Internal" Wert wie TYPE ist, ein Reading-Name oder ein Attribut. WERT ist ein regulärer Ausdruck. Um die Bedingung zu negieren, muss NAME!=WERT verwendet werden. Um die Suche einzugrenzen, kann man als Praefix i: für internal Werte, r: für Reading-Namen und a: für Attribute verwenden, siehe das Beispiel unten. Groß-/Kleinschreibung wird durch die Verwendung von ~ oder !~ ignoriert.
        Falls die Spezifikation von :FILTER=NAME=WERT gefolgt wird, dann wird die zuvor gefundene Liste durch diesen neuen Ausdruck gefiltert.
    Beispiele:
        set lamp1 on
        set lamp1,lamp2,lamp3 on
        set lamp.* on
        set room=kitchen off
        set room=kitchen:FILTER=STATE=on off
        set room=kitchen:FILTER=STATE!=off off
        list disabled=
        list room~office
        list TYPE=FS20 STATE
        list i:TYPE=FS20 STATE
    Bemerkungen:
        die Spezifikation kann keine Leerzeichen enthalten.
        falls ein Gerätename exakt dem Spezifikation entspricht, dann werden keine reguläre Ausdrücke oder Filter ausgewertet.
        zuerst wird die durch Komma getrennte Spezifikation abgearbeitet, dann folgen die regulären Ausdrücke und die Filter
        die Befehlszeile kann die selbe Gerätebezeichnung mehrfach enthalten z.B.: "set lamp3,lamp3 on". Lamp3 wird hier zwei Mal eingeschalten.
        um Strukturen mit komplexeren Anforderungen zu realisieren lesen Sie bitte den Abschnitt zu structure.

Ob die Namenswahl (also keine eigene zu haben) eine gute/praktische ist sei dahingestellt.
Eine eigene "sinnvolle" Namensvergabe ermöglicht halt (deutlich) generischere "Programmierung"...

EDIT: wobei ich ja nicht weiß, ob ich auch die Steuerung über eine readingsGroup einstellen wollte. Aber das musst du wissen ;) Bei mir laufen die Wochenprogramme im Thermostat (bei mir auch Wandthermostat) und ich stelle per readingsGroup nur mal marginal nach, also hoch/runter (bis zum nächsten Schaltpunkt, dann gilt/schaltet ja wieder das Wochenprogramm)... Zusätzlich habe ich eine Übersicht über Temperaturen/Luftfeuchte (gut geht ja mit den HKTs nicht) etc. Gebe aber zu: ich hab noch nicht (genau) geschaut welche der vielen ReadingsGroups die da für Heizung drin sind du letztendlich tatsächlich genommen hast ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

der_da

#4
OK,
nachdem ich in der sub makefine die Definition von @devices geändert habe auf
my @devices = devspec2array('HM_......_Clima');
liefert ein list HM_......_Clima auch genau die fraglichen Thermostat-Devices. Wieder was gelernt.
So weit so gut. Nur am Aussehen meiner readingsgroup ändert das noch nichts.  :(

Zitat von: MadMax-FHEM am 17 November 2021, 13:55:25
EDIT: wobei ich ja nicht weiß, ob ich auch die Steuerung über eine readingsGroup einstellen wollte. Aber das musst du wissen ;) Bei mir laufen die Wochenprogramme im Thermostat (bei mir auch Wandthermostat) und ich stelle per readingsGroup nur mal marginal nach, also hoch/runter (bis zum nächsten Schaltpunkt, dann gilt/schaltet ja wieder das Wochenprogramm)... Zusätzlich habe ich eine Übersicht über Temperaturen/Luftfeuchte (gut geht ja mit den HKTs nicht) etc.
Ja, ich würde vermutlich auch das interne Wochenprogramm nutzen. Aber es geht gar nicht um *meine* Thermostate und *mein* FHEM und es läuft den meisten Teil der Zeit allein vor sich hin, da es in einem Wochenendhaus installiert ist.
Zitat von: MadMax-FHEM am 17 November 2021, 13:55:25
...ich hab noch nicht (genau) geschaut welche der vielen ReadingsGroups die da für Heizung drin sind du letztendlich tatsächlich genommen hast ;)
Welche ReadingsGroup ich nutze habe ich mit dem Link samt Anker im ersten Post mitgeteilt.

MadMax-FHEM

Zitat von: der_da am 17 November 2021, 14:16:14
OK,
nachdem ich in der sub makefine die Definition von @devices geändert habe auf
my @devices = devspec2array('HM_......_Clima');
liefert ein list HM_......_Clima auch genau die fraglichen Thermostat-Devices. Wieder was gelernt.
So weit so gut. Nur am Aussehen meiner readingsgroup ändert das noch nichts.  :(

Zeig doch mal einen Screenshot...


Zitat von: der_da am 17 November 2021, 14:16:14
Ja, ich würde vermutlich auch das interne Wochenprogramm nutzen. Aber es geht gar nicht um *meine* Thermostate und *mein* FHEM und es läuft den meisten Teil der Zeit allein vor sich hin, da es in einem Wochenendhaus installiert ist.

Naja, warum dann diese komplizierte ReadingsGroup?
Es sind doch einige bzgl. Heizungsübersicht etc. im Wiki...

Und: gerade dann sollte es was sein, was du auch verstehst... Und was "wartungsfrei" läuft...

Genutzt nur durch dich oder gar nicht durch dich?


Zitat von: der_da am 17 November 2021, 14:16:14
Welche ReadingsGroup ich nutze habe ich mit dem Link samt Anker im ersten Post mitgeteilt.

Ich habe ja auch nicht geschrieben, dass du es nicht genannt hast...
...sondern, dass ich noch nicht geschaut hab/hatte ;)

Also mir wäre die Readingsgroup ja (deutlich) zu unübersichtlich...
Brauchst du die ganzen Einstellmöglichkeiten etc.?

Wird daher etwas dauern, bis ich Zeit finde da genauer reinzuschauen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

der_da

#6
Zitat von: MadMax-FHEM am 17 November 2021, 14:34:41
Zeig doch mal einen Screenshot...
habe ich angehangen.

Zitat
... gerade dann sollte es was sein, was du auch verstehst... Und was "wartungsfrei" läuft...
Ich versuche ja zu verstehen, wie es funktioniert und es dann an meine (oder die anderer in diesem Fall) Bedürfnisse anzupassen.
Zitat
Genutzt nur durch dich oder gar nicht durch dich?
Die Bedienung wird dann eher nicht durch mich erfolgen.
Zitat
Wird daher etwas dauern, bis ich Zeit finde da genauer reinzuschauen...
Danke für deine Hilfe. Ich warte gerne und versuche auch selbst dahinter zu steigen.

Edit: Ja, schon was gefunden. In der Definition der Readingsgroup war auch noch das nicht passende Namensschema. Nach der Anpassung tauchen die Thermostate auf. Mal sehen, ob das jetzt alles war...

MadMax-FHEM

Ah, ok.

Also du musst nat. auch die anzuzeigenden Devices in der readingsGroup "korrigieren" ;)

Also:

Zitat von: readingsGroup
CUL_HM_HM_CC_RT_DN_......_Clima:

Ebenfalls durch

HM_......_Clima:
ersetzen.
Und halt schauen wo noch "sowas in der Art" drin ist und anpassen...

Ich denke dann sieht es schon mal anders aus...
...was dann noch fehlt müssen wir halt dann (stückchenweise) "gerade rücken"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Beta-User

#8
Zitat von: der_da am 17 November 2021, 14:49:27
Die Bedienung wird dann eher nicht durch mich erfolgen.
Dann stellt sich m.E. die Frage, welche Bedienelemente ggf. zur Verfügung stehen sollen.
Falls das "alle Thermostate" sein sollen (?), wäre ggf. eine Raumansicht mit Direktbedienung der Clima-Kanäle die einfachere Wahl, siehe den oberen Abschnitt des screenshots aus https://forum.fhem.de/index.php/topic,96660.msg897375.html#msg897375. (EDIT: aktualisierter Code dazu ist in https://forum.fhem.de/index.php/topic,97430.msg906576.html#msg906576 zu finden).

Da von Ferienhaus die Rede war, sollte es möglichst einfach sein, und da würde ich eher dazu tendieren, eher sehr wenige Bedienelemente anzubieten, also eher Kurzformeln wie "Soll-Temperatur Wohnbereich tagsüber", "Soll-Temperatur Wohnbereich nachts" (dto für Schlafräume), und dann noch "abwesend" und "ungenutzt"-Schaltung. Fertig die Laube, die Automatisierung läuft dann im Hintergrund (z.B. über weekprofile-Topics für die letzten beiden Fälle und "manual xy => alle relevanten Thermostate" für die übrigen Fälle).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors