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 (https://wiki.fhem.de/wiki/ReadingsGroup#Heizungswerte.2C_Status.2C_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 (https://wiki.fhem.de/wiki/Makefine#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 (https://forum.fhem.de/index.php/topic,45553.0.html) als Download angeboten, angelegt wurde.
Was fehlt da noch oder ist noch anzupassen, damit meine Readingsgroup die Thermostate auflistet?
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
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.
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
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 (https://wiki.fhem.de/wiki/ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil) im ersten Post mitgeteilt.
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 (https://wiki.fhem.de/wiki/ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil) 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
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...
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
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 (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).