mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
Moduline 400 manual temp, #932
This commit is contained in:
@@ -1131,6 +1131,7 @@ void Thermostat::process_RC300Floordry(std::shared_ptr<const Telegram> telegram)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// type 0x41 - data from the RC30 thermostat(0x10) - 14 bytes long
|
// type 0x41 - data from the RC30 thermostat(0x10) - 14 bytes long
|
||||||
|
// RC30Monitor(0x41), data: 80 20 00 AC 00 00 00 02 00 05 09 00 AC 00
|
||||||
void Thermostat::process_RC30Monitor(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RC30Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||||
if (hc == nullptr) {
|
if (hc == nullptr) {
|
||||||
@@ -1144,6 +1145,8 @@ void Thermostat::process_RC30Monitor(std::shared_ptr<const Telegram> telegram) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// type 0xA7 - for reading the mode from the RC30 thermostat (0x10) and all the installation settings
|
// type 0xA7 - for reading the mode from the RC30 thermostat (0x10) and all the installation settings
|
||||||
|
// 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
|
||||||
|
// RC30Set(0xA7), data: 00 00 20 02 (offset 27)
|
||||||
void Thermostat::process_RC30Set(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RC30Set(std::shared_ptr<const Telegram> telegram) {
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||||
if (hc == nullptr) {
|
if (hc == nullptr) {
|
||||||
@@ -1161,9 +1164,12 @@ void Thermostat::process_RC30Set(std::shared_ptr<const Telegram> telegram) {
|
|||||||
has_update(telegram, offtemp_, 24); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
|
has_update(telegram, offtemp_, 24); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
|
||||||
has_update(telegram, heatingpid_, 25); // PID setting 00=1 01=2 02=3
|
has_update(telegram, heatingpid_, 25); // PID setting 00=1 01=2 02=3
|
||||||
has_update(telegram, preheating_, 26); // Preheating in the clock program: (0x00 = off, 0xFF = on)
|
has_update(telegram, preheating_, 26); // Preheating in the clock program: (0x00 = off, 0xFF = on)
|
||||||
|
has_update(telegram, hc->tempautotemp, 28); // is * 2
|
||||||
|
has_update(telegram, hc->manualtemp, 29); // manualtemp is * 2
|
||||||
}
|
}
|
||||||
|
|
||||||
// type 0x40 (HC1) - for reading the operating mode from the RC30 thermostat (0x10)
|
// type 0x40 (HC1) - for reading the operating mode from the RC30 thermostat (0x10)
|
||||||
|
// 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
|
||||||
void Thermostat::process_RC30Temp(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RC30Temp(std::shared_ptr<const Telegram> telegram) {
|
||||||
// check to see we have a valid type. heating: 1 radiator, 2 convectors, 3 floors
|
// check to see we have a valid type. heating: 1 radiator, 2 convectors, 3 floors
|
||||||
if (telegram->offset == 0 && telegram->message_data[0] == 0x00) {
|
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
|
|||||||
|
|
||||||
} else if (model == EMS_DEVICE_FLAG_RC30) {
|
} else if (model == EMS_DEVICE_FLAG_RC30) {
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
case HeatingCircuit::Mode::MANUAL: // change the manual temp
|
||||||
|
offset = EMS_OFFSET_RC30Set_temp_manual;
|
||||||
|
break;
|
||||||
|
case HeatingCircuit::Mode::TEMPAUTO: // change the tempautotemp
|
||||||
|
offset = EMS_OFFSET_RC30Set_temp;
|
||||||
|
break;
|
||||||
case HeatingCircuit::Mode::NIGHT: // change the night temp
|
case HeatingCircuit::Mode::NIGHT: // change the night temp
|
||||||
set_typeid = curve_typeids[hc->hc()];
|
set_typeid = curve_typeids[hc->hc()];
|
||||||
offset = EMS_OFFSET_RC30Temp_temp_night;
|
offset = EMS_OFFSET_RC30Temp_temp_night;
|
||||||
@@ -2970,7 +2982,11 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co
|
|||||||
offset = EMS_OFFSET_RC30Temp_temp_holiday;
|
offset = EMS_OFFSET_RC30Temp_temp_holiday;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if (hc->manualtemp == 0) {
|
||||||
offset = EMS_OFFSET_RC30Set_temp;
|
offset = EMS_OFFSET_RC30Set_temp;
|
||||||
|
} else {
|
||||||
|
offset = EMS_OFFSET_RC30Set_temp_manual;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4264,6 +4280,15 @@ void Thermostat::register_device_values_hc(std::shared_ptr<Thermostat::HeatingCi
|
|||||||
tag, &hc->daymidtemp, DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(daymidtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_daymidtemp));
|
tag, &hc->daymidtemp, DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(daymidtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_daymidtemp));
|
||||||
register_device_value(
|
register_device_value(
|
||||||
tag, &hc->daytemp, DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(dayhightemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_daytemp));
|
tag, &hc->daytemp, DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(dayhightemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_daytemp));
|
||||||
|
register_device_value(
|
||||||
|
tag, &hc->manualtemp, DeviceValueType::UINT, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(manualtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_manualtemp));
|
||||||
|
register_device_value(tag,
|
||||||
|
&hc->tempautotemp,
|
||||||
|
DeviceValueType::UINT,
|
||||||
|
DeviceValueNumOp::DV_NUMOP_DIV2,
|
||||||
|
FL_(tempautotemp),
|
||||||
|
DeviceValueUOM::DEGREES,
|
||||||
|
MAKE_CF_CB(set_tempautotemp));
|
||||||
break;
|
break;
|
||||||
case EMS_DEVICE_FLAG_RC30_N:
|
case EMS_DEVICE_FLAG_RC30_N:
|
||||||
case EMS_DEVICE_FLAG_RC35:
|
case EMS_DEVICE_FLAG_RC35:
|
||||||
|
|||||||
@@ -266,6 +266,7 @@ class Thermostat : public EMSdevice {
|
|||||||
static constexpr uint8_t EMS_OFFSET_RC30StatusMessage_curr = 2; // current temp
|
static constexpr uint8_t EMS_OFFSET_RC30StatusMessage_curr = 2; // current temp
|
||||||
static constexpr uint8_t EMS_OFFSET_RC30Set_mode = 23; // position of thermostat mode
|
static constexpr uint8_t EMS_OFFSET_RC30Set_mode = 23; // position of thermostat mode
|
||||||
static constexpr uint8_t EMS_OFFSET_RC30Set_temp = 28; // position of thermostat setpoint temperature
|
static constexpr uint8_t EMS_OFFSET_RC30Set_temp = 28; // position of thermostat setpoint temperature
|
||||||
|
static constexpr uint8_t EMS_OFFSET_RC30Set_temp_manual = 29; // position of thermostat setpoint temperature for manual mode
|
||||||
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_night = 3; // position of thermostat setpoint temperature for night time (T1)
|
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_night = 3; // position of thermostat setpoint temperature for night time (T1)
|
||||||
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_daylow = 4; // position of thermostat setpoint temperature for daylow time (T2)
|
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_daylow = 4; // position of thermostat setpoint temperature for daylow time (T2)
|
||||||
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_daymid = 5; // position of thermostat setpoint temperature for daymid time (T3)
|
static constexpr uint8_t EMS_OFFSET_RC30Temp_temp_daymid = 5; // position of thermostat setpoint temperature for daymid time (T3)
|
||||||
|
|||||||
Reference in New Issue
Block a user