mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 08:19:52 +03:00
map RC100H values to device and tag hc
This commit is contained in:
@@ -33,8 +33,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i
|
|||||||
register_telegram_type(0x042B, F("RemoteTemp"), false, MAKE_PF_CB(process_RemoteTemp));
|
register_telegram_type(0x042B, F("RemoteTemp"), false, MAKE_PF_CB(process_RemoteTemp));
|
||||||
register_telegram_type(0x047B, F("RemoteHumidity"), false, MAKE_PF_CB(process_RemoteHumidity));
|
register_telegram_type(0x047B, F("RemoteHumidity"), false, MAKE_PF_CB(process_RemoteHumidity));
|
||||||
register_telegram_type(0x0273, F("RemoteCorrection"), true, MAKE_PF_CB(process_RemoteCorrection));
|
register_telegram_type(0x0273, F("RemoteCorrection"), true, MAKE_PF_CB(process_RemoteCorrection));
|
||||||
monitor_typeids = {};
|
register_device_values(); // register device values for common values (not heating circuit)
|
||||||
set_typeids = {};
|
|
||||||
return; // no values to add
|
return; // no values to add
|
||||||
}
|
}
|
||||||
// common telegram handlers
|
// common telegram handlers
|
||||||
@@ -302,12 +301,6 @@ std::shared_ptr<Thermostat::HeatingCircuit> Thermostat::heating_circuit(std::sha
|
|||||||
toggle_ = true;
|
toggle_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// not found, search device-id types for remote thermostats
|
|
||||||
if (hc_num == 0 && telegram->src >= 0x38 && telegram->src <= 0x3F) {
|
|
||||||
hc_num = telegram->src - 0x37;
|
|
||||||
toggle_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// not found, search device-id types for remote thermostats
|
// not found, search device-id types for remote thermostats
|
||||||
if (hc_num == 0 && telegram->dest >= 0x20 && telegram->dest <= 0x27) {
|
if (hc_num == 0 && telegram->dest >= 0x20 && telegram->dest <= 0x27) {
|
||||||
hc_num = telegram->dest - 0x20;
|
hc_num = telegram->dest - 0x20;
|
||||||
@@ -701,27 +694,18 @@ void Thermostat::process_RC20Remote(std::shared_ptr<const Telegram> telegram) {
|
|||||||
// 0x42B - for reading the roomtemperature from the RC100H remote thermostat (0x38, 0x39, ..)
|
// 0x42B - for reading the roomtemperature from the RC100H remote thermostat (0x38, 0x39, ..)
|
||||||
// e.g. "38 10 FF 00 03 2B 00 D1 08 2A 01"
|
// e.g. "38 10 FF 00 03 2B 00 D1 08 2A 01"
|
||||||
void Thermostat::process_RemoteTemp(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RemoteTemp(std::shared_ptr<const Telegram> telegram) {
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
has_update(telegram, tempsensor1_, 0);
|
||||||
if (hc == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
has_update(telegram, hc->remotetemp, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47B - for reading humidity from the RC100H remote thermostat (0x38, 0x39, ..)
|
// 0x47B - for reading humidity from the RC100H remote thermostat (0x38, 0x39, ..)
|
||||||
// e.g. "38 10 FF 00 03 7B 08 24 00 4B"
|
// e.g. "38 10 FF 00 03 7B 08 24 00 4B"
|
||||||
void Thermostat::process_RemoteHumidity(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RemoteHumidity(std::shared_ptr<const Telegram> telegram) {
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
has_update(telegram, dewtemperature_, 0);
|
||||||
if (hc == nullptr) {
|
has_update(telegram, humidity_, 1);
|
||||||
return;
|
|
||||||
}
|
|
||||||
has_update(telegram, hc->dewtemperature, 0);
|
|
||||||
has_update(telegram, hc->humidity, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x273 - for reading temperaturcorrection from the RC100H remote thermostat (0x38, 0x39, ..)
|
// 0x273 - for reading temperaturcorrection from the RC100H remote thermostat (0x38, 0x39, ..)
|
||||||
void Thermostat::process_RemoteCorrection(std::shared_ptr<const Telegram> telegram) {
|
void Thermostat::process_RemoteCorrection(std::shared_ptr<const Telegram> telegram) {
|
||||||
heating_circuit(telegram); // create hc if it does not exist yet
|
|
||||||
has_update(telegram, ibaCalIntTemperature_, 0);
|
has_update(telegram, ibaCalIntTemperature_, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3390,6 +3374,18 @@ bool Thermostat::set_remoteseltemp(const char * value, const int8_t id) {
|
|||||||
// register main device values, top level for all thermostats (excluding heating circuits)
|
// register main device values, top level for all thermostats (excluding heating circuits)
|
||||||
// as these are done in void Thermostat::register_device_values_hc()
|
// as these are done in void Thermostat::register_device_values_hc()
|
||||||
void Thermostat::register_device_values() {
|
void Thermostat::register_device_values() {
|
||||||
|
// RC100H remote with humidity, this is also EMS_DEVICE_FLAG_RC100 for set_calinttemp
|
||||||
|
if (device_id() >= 0x38 && device_id() <= 0x3F) {
|
||||||
|
// each device controls only one hc, so we tag the values
|
||||||
|
uint8_t tag = DeviceValueTAG::TAG_HC1 + device_id() - 0x38;
|
||||||
|
register_device_value(tag, &tempsensor1_, DeviceValueType::SHORT, FL_(div10), FL_(remotetemp), DeviceValueUOM::DEGREES);
|
||||||
|
register_device_value(tag, &dewtemperature_, DeviceValueType::INT, nullptr, FL_(dewTemperature), DeviceValueUOM::DEGREES);
|
||||||
|
register_device_value(tag, &humidity_, DeviceValueType::INT, nullptr, FL_(airHumidity), DeviceValueUOM::PERCENT);
|
||||||
|
register_device_value(
|
||||||
|
tag, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_calinttemp));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Common for all thermostats
|
// Common for all thermostats
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &errorCode_, DeviceValueType::STRING, nullptr, FL_(errorCode), DeviceValueUOM::NONE);
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &errorCode_, DeviceValueType::STRING, nullptr, FL_(errorCode), DeviceValueUOM::NONE);
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE);
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &lastCode_, DeviceValueType::STRING, nullptr, FL_(lastCode), DeviceValueUOM::NONE);
|
||||||
@@ -3785,8 +3781,8 @@ void Thermostat::register_device_values() {
|
|||||||
FL_(ibaMinExtTemperature),
|
FL_(ibaMinExtTemperature),
|
||||||
DeviceValueUOM::DEGREES,
|
DeviceValueUOM::DEGREES,
|
||||||
MAKE_CF_CB(set_minexttemp));
|
MAKE_CF_CB(set_minexttemp));
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor1_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor1), DeviceValueUOM::DEGREES);
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor1_, DeviceValueType::SHORT, FL_(div10), FL_(tempsensor1), DeviceValueUOM::DEGREES);
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor2_, DeviceValueType::USHORT, FL_(div10), FL_(tempsensor2), DeviceValueUOM::DEGREES);
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &tempsensor2_, DeviceValueType::SHORT, FL_(div10), FL_(tempsensor2), DeviceValueUOM::DEGREES);
|
||||||
register_device_value(
|
register_device_value(
|
||||||
DeviceValueTAG::TAG_DEVICE_DATA, &ibaDamping_, DeviceValueType::BOOL, nullptr, FL_(damping), DeviceValueUOM::NONE, MAKE_CF_CB(set_damping));
|
DeviceValueTAG::TAG_DEVICE_DATA, &ibaDamping_, DeviceValueType::BOOL, nullptr, FL_(damping), DeviceValueUOM::NONE, MAKE_CF_CB(set_damping));
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES);
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp_, DeviceValueType::INT, nullptr, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES);
|
||||||
@@ -3979,16 +3975,6 @@ void Thermostat::register_device_values_hc(std::shared_ptr<Thermostat::HeatingCi
|
|||||||
// heating circuit
|
// heating circuit
|
||||||
uint8_t tag = DeviceValueTAG::TAG_HC1 + hc->hc();
|
uint8_t tag = DeviceValueTAG::TAG_HC1 + hc->hc();
|
||||||
|
|
||||||
// RC300 remote with humidity, this is also EMS_DEVICE_FLAG_RC100 for set_calinttemp
|
|
||||||
if (device_id() >= 0x38 && device_id() <= 0x3F) {
|
|
||||||
register_device_value(tag, &hc->remotetemp, DeviceValueType::SHORT, FL_(div10), FL_(remotetemp), DeviceValueUOM::DEGREES);
|
|
||||||
register_device_value(tag, &hc->dewtemperature, DeviceValueType::UINT, nullptr, FL_(dewTemperature), DeviceValueUOM::DEGREES);
|
|
||||||
register_device_value(tag, &hc->humidity, DeviceValueType::UINT, nullptr, FL_(airHumidity), DeviceValueUOM::PERCENT);
|
|
||||||
register_device_value(
|
|
||||||
tag, &ibaCalIntTemperature_, DeviceValueType::INT, FL_(div10), FL_(ibaCalIntTemperature), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_calinttemp));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// different logic on how temperature values are stored, depending on model
|
// different logic on how temperature values are stored, depending on model
|
||||||
const __FlashStringHelper * const * seltemp_divider;
|
const __FlashStringHelper * const * seltemp_divider;
|
||||||
const __FlashStringHelper * const * roomtemp_divider;
|
const __FlashStringHelper * const * roomtemp_divider;
|
||||||
|
|||||||
@@ -84,8 +84,6 @@ class Thermostat : public EMSdevice {
|
|||||||
uint8_t climate;
|
uint8_t climate;
|
||||||
uint8_t switchonoptimization;
|
uint8_t switchonoptimization;
|
||||||
uint8_t statusbyte; // from RC300monitor
|
uint8_t statusbyte; // from RC300monitor
|
||||||
uint8_t humidity;
|
|
||||||
uint8_t dewtemperature;
|
|
||||||
|
|
||||||
// RC 10
|
// RC 10
|
||||||
uint8_t reducehours; // night reduce duration
|
uint8_t reducehours; // night reduce duration
|
||||||
@@ -197,12 +195,14 @@ class Thermostat : public EMSdevice {
|
|||||||
uint8_t offtemp_; // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
|
uint8_t offtemp_; // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius)
|
||||||
uint8_t mixingvalves_; // Number of Mixing Valves: (0x00=0, 0x01=1, 0x02=2)
|
uint8_t mixingvalves_; // Number of Mixing Valves: (0x00=0, 0x01=1, 0x02=2)
|
||||||
|
|
||||||
int8_t dampedoutdoortemp_;
|
int8_t dampedoutdoortemp_;
|
||||||
uint16_t tempsensor1_;
|
int16_t tempsensor1_;
|
||||||
uint16_t tempsensor2_;
|
int16_t tempsensor2_;
|
||||||
int16_t dampedoutdoortemp2_;
|
int16_t dampedoutdoortemp2_;
|
||||||
uint8_t floordrystatus_;
|
uint8_t floordrystatus_;
|
||||||
uint8_t floordrytemp_;
|
uint8_t floordrytemp_;
|
||||||
|
uint8_t dewtemperature_;
|
||||||
|
uint8_t humidity_;
|
||||||
|
|
||||||
uint8_t wwExtra1_; // wwExtra active for wwSystem 1
|
uint8_t wwExtra1_; // wwExtra active for wwSystem 1
|
||||||
uint8_t wwExtra2_;
|
uint8_t wwExtra2_;
|
||||||
|
|||||||
Reference in New Issue
Block a user