@@ -1131,6 +1131,7 @@ void Thermostat::process_RC300Floordry(std::shared_ptr<const Telegram> telegram)
1131
1131
}
1132
1132
1133
1133
// type 0x41 - data from the RC30 thermostat(0x10) - 14 bytes long
1134
+ // RC30Monitor(0x41), data: 80 20 00 AC 00 00 00 02 00 05 09 00 AC 00
1134
1135
void Thermostat::process_RC30Monitor (std::shared_ptr<const Telegram> telegram) {
1135
1136
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit (telegram);
1136
1137
if (hc == nullptr ) {
@@ -1144,6 +1145,8 @@ void Thermostat::process_RC30Monitor(std::shared_ptr<const Telegram> telegram) {
1144
1145
}
1145
1146
1146
1147
// type 0xA7 - for reading the mode from the RC30 thermostat (0x10) and all the installation settings
1148
+ // RC30Set(0xA7), data: 01 00 FF F6 01 06 00 01 0D 00 00 FF FF 01 02 02 02 00 00 05 1F 05 1F 01 0E 00 FF
1149
+ // RC30Set(0xA7), data: 00 00 20 02 (offset 27)
1147
1150
void Thermostat::process_RC30Set (std::shared_ptr<const Telegram> telegram) {
1148
1151
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit (telegram);
1149
1152
if (hc == nullptr ) {
@@ -1158,12 +1161,15 @@ void Thermostat::process_RC30Set(std::shared_ptr<const Telegram> telegram) {
1158
1161
has_update (telegram, mixingvalves_, 17 ); // Number of Mixing Valves: (0x00=0, 0x01=1, 0x02=2)
1159
1162
has_update (telegram, brightness_, 18 ); // Screen brightness 0F=dark F1=light
1160
1163
has_update (telegram, hc->mode , 23 );
1161
- has_update (telegram, offtemp_, 24 ); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
1162
- has_update (telegram, heatingpid_, 25 ); // PID setting 00=1 01=2 02=3
1163
- has_update (telegram, preheating_, 26 ); // Preheating in the clock program: (0x00 = off, 0xFF = on)
1164
+ has_update (telegram, offtemp_, 24 ); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
1165
+ has_update (telegram, heatingpid_, 25 ); // PID setting 00=1 01=2 02=3
1166
+ has_update (telegram, preheating_, 26 ); // Preheating in the clock program: (0x00 = off, 0xFF = on)
1167
+ has_update (telegram, hc->tempautotemp , 28 ); // is * 2
1168
+ has_update (telegram, hc->manualtemp , 29 ); // manualtemp is * 2
1164
1169
}
1165
1170
1166
1171
// type 0x40 (HC1) - for reading the operating mode from the RC30 thermostat (0x10)
1172
+ // RC30Temp(0x40), data: 01 01 02 20 24 28 2A 1E 0E 00 01 5A 32 05 4B 2D 00 28 00 3C FF 11 00 05 00
1167
1173
void Thermostat::process_RC30Temp (std::shared_ptr<const Telegram> telegram) {
1168
1174
// check to see we have a valid type. heating: 1 radiator, 2 convectors, 3 floors
1169
1175
if (telegram->offset == 0 && telegram->message_data [0 ] == 0x00 ) {
@@ -2949,6 +2955,12 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co
2949
2955
2950
2956
} else if (model == EMS_DEVICE_FLAG_RC30) {
2951
2957
switch (mode) {
2958
+ case HeatingCircuit::Mode::MANUAL: // change the manual temp
2959
+ offset = EMS_OFFSET_RC30Set_temp_manual;
2960
+ break ;
2961
+ case HeatingCircuit::Mode::TEMPAUTO: // change the tempautotemp
2962
+ offset = EMS_OFFSET_RC30Set_temp;
2963
+ break ;
2952
2964
case HeatingCircuit::Mode::NIGHT: // change the night temp
2953
2965
set_typeid = curve_typeids[hc->hc ()];
2954
2966
offset = EMS_OFFSET_RC30Temp_temp_night;
@@ -2970,7 +2982,11 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co
2970
2982
offset = EMS_OFFSET_RC30Temp_temp_holiday;
2971
2983
break ;
2972
2984
default :
2973
- offset = EMS_OFFSET_RC30Set_temp;
2985
+ if (hc->manualtemp == 0 ) {
2986
+ offset = EMS_OFFSET_RC30Set_temp;
2987
+ } else {
2988
+ offset = EMS_OFFSET_RC30Set_temp_manual;
2989
+ }
2974
2990
break ;
2975
2991
}
2976
2992
@@ -4264,6 +4280,15 @@ void Thermostat::register_device_values_hc(std::shared_ptr<Thermostat::HeatingCi
4264
4280
tag, &hc->daymidtemp , DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_ (daymidtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB (set_daymidtemp));
4265
4281
register_device_value (
4266
4282
tag, &hc->daytemp , DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_ (dayhightemp), DeviceValueUOM::DEGREES, MAKE_CF_CB (set_daytemp));
4283
+ register_device_value (
4284
+ tag, &hc->manualtemp , DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_ (manualtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB (set_manualtemp));
4285
+ register_device_value (tag,
4286
+ &hc->tempautotemp ,
4287
+ DeviceValueType::UINT,
4288
+ DeviceValueNumOp::DV_NUMOP_DIV2,
4289
+ FL_ (tempautotemp),
4290
+ DeviceValueUOM::DEGREES,
4291
+ MAKE_CF_CB (set_tempautotemp));
4267
4292
break ;
4268
4293
case EMS_DEVICE_FLAG_RC30_N:
4269
4294
case EMS_DEVICE_FLAG_RC35:
0 commit comments