mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
fix easy/tc100 - #474
This commit is contained in:
@@ -106,7 +106,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i
|
|||||||
} else if (model == EMSdevice::EMS_DEVICE_FLAG_EASY) {
|
} else if (model == EMSdevice::EMS_DEVICE_FLAG_EASY) {
|
||||||
monitor_typeids = {0x0A};
|
monitor_typeids = {0x0A};
|
||||||
set_typeids = {};
|
set_typeids = {};
|
||||||
register_telegram_type(monitor_typeids[0], F("EasyMonitor"), false, [&](std::shared_ptr<const Telegram> t) { process_EasyMonitor(t); });
|
register_telegram_type(monitor_typeids[0], F("EasyMonitor"), true, [&](std::shared_ptr<const Telegram> t) { process_EasyMonitor(t); });
|
||||||
|
|
||||||
// RC300/RC100
|
// RC300/RC100
|
||||||
} else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
} else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model == EMSdevice::EMS_DEVICE_FLAG_RC100)) {
|
||||||
@@ -524,7 +524,7 @@ std::shared_ptr<Thermostat::HeatingCircuit> Thermostat::heating_circuit(std::sha
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create a new heating circuit object
|
// create a new heating circuit object
|
||||||
auto new_hc = std::make_shared<Thermostat::HeatingCircuit>(hc_num, monitor_typeids[hc_num - 1], set_typeids[hc_num - 1]);
|
auto new_hc = std::make_shared<Thermostat::HeatingCircuit>(hc_num);
|
||||||
heating_circuits_.push_back(new_hc);
|
heating_circuits_.push_back(new_hc);
|
||||||
|
|
||||||
std::sort(heating_circuits_.begin(), heating_circuits_.end()); // sort based on hc number
|
std::sort(heating_circuits_.begin(), heating_circuits_.end()); // sort based on hc number
|
||||||
@@ -536,7 +536,10 @@ std::shared_ptr<Thermostat::HeatingCircuit> Thermostat::heating_circuit(std::sha
|
|||||||
|
|
||||||
// set the flag saying we want its data during the next auto fetch
|
// set the flag saying we want its data during the next auto fetch
|
||||||
toggle_fetch(monitor_typeids[hc_num - 1], toggle_);
|
toggle_fetch(monitor_typeids[hc_num - 1], toggle_);
|
||||||
toggle_fetch(set_typeids[hc_num - 1], toggle_);
|
|
||||||
|
if (set_typeids.size()) {
|
||||||
|
toggle_fetch(set_typeids[hc_num - 1], toggle_);
|
||||||
|
}
|
||||||
|
|
||||||
return heating_circuits_.back(); // even after sorting, this should still point back to the newly created HC
|
return heating_circuits_.back(); // even after sorting, this should still point back to the newly created HC
|
||||||
}
|
}
|
||||||
@@ -1568,7 +1571,6 @@ void Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) {
|
|||||||
|
|
||||||
// add the write command to the Tx queue
|
// add the write command to the Tx queue
|
||||||
// post validate is the corresponding monitor or set type IDs as they can differ per model
|
// post validate is the corresponding monitor or set type IDs as they can differ per model
|
||||||
// write_command(set_typeids[hc->hc_num() - 1], offset, set_mode_value, validate_typeid);
|
|
||||||
write_command(set_typeids[hc->hc_num() - 1], offset, set_mode_value, validate_typeid);
|
write_command(set_typeids[hc->hc_num() - 1], offset, set_mode_value, validate_typeid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,8 @@ class Thermostat : public EMSdevice {
|
|||||||
Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_id, const std::string & version, const std::string & name, uint8_t flags, uint8_t brand);
|
Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_id, const std::string & version, const std::string & name, uint8_t flags, uint8_t brand);
|
||||||
class HeatingCircuit {
|
class HeatingCircuit {
|
||||||
public:
|
public:
|
||||||
HeatingCircuit(const uint8_t hc_num, const uint16_t monitor_typeid, const uint16_t set_typeid)
|
HeatingCircuit(const uint8_t hc_num)
|
||||||
: hc_num_(hc_num)
|
: hc_num_(hc_num) {
|
||||||
, monitor_typeid_(monitor_typeid)
|
|
||||||
, set_typeid_(set_typeid) {
|
|
||||||
}
|
}
|
||||||
~HeatingCircuit() = default;
|
~HeatingCircuit() = default;
|
||||||
|
|
||||||
@@ -60,35 +58,25 @@ class Thermostat : public EMSdevice {
|
|||||||
uint8_t targetflowtemp = EMS_VALUE_UINT_NOTSET;
|
uint8_t targetflowtemp = EMS_VALUE_UINT_NOTSET;
|
||||||
uint8_t summertemp = EMS_VALUE_UINT_NOTSET;
|
uint8_t summertemp = EMS_VALUE_UINT_NOTSET;
|
||||||
uint8_t nofrosttemp = EMS_VALUE_UINT_NOTSET;
|
uint8_t nofrosttemp = EMS_VALUE_UINT_NOTSET;
|
||||||
uint8_t designtemp = EMS_VALUE_UINT_NOTSET; // heatingcurve design temp at MinExtTemp
|
uint8_t designtemp = EMS_VALUE_UINT_NOTSET; // heating curve design temp at MinExtTemp
|
||||||
int8_t offsettemp = EMS_VALUE_INT_NOTSET; // heatingcurve offest temp at roomtemp signed!
|
int8_t offsettemp = EMS_VALUE_INT_NOTSET; // heating curve offest temp at roomtemp signed!
|
||||||
|
|
||||||
uint8_t hc_num() const {
|
uint8_t hc_num() const {
|
||||||
return hc_num_; // 1..10
|
return hc_num_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t get_mode(uint8_t flags) const;
|
uint8_t get_mode(uint8_t flags) const;
|
||||||
uint8_t get_mode_type(uint8_t flags) const;
|
uint8_t get_mode_type(uint8_t flags) const;
|
||||||
|
|
||||||
uint16_t monitor_typeid() const {
|
|
||||||
return monitor_typeid_;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t set_typeid() const {
|
|
||||||
return set_typeid_;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Mode : uint8_t { UNKNOWN, OFF, MANUAL, AUTO, DAY, NIGHT, HEAT, NOFROST, ECO, HOLIDAY, COMFORT, OFFSET, DESIGN, SUMMER };
|
enum Mode : uint8_t { UNKNOWN, OFF, MANUAL, AUTO, DAY, NIGHT, HEAT, NOFROST, ECO, HOLIDAY, COMFORT, OFFSET, DESIGN, SUMMER };
|
||||||
|
|
||||||
// for sorting
|
// for sorting based on hc number
|
||||||
friend inline bool operator<(const std::shared_ptr<HeatingCircuit> & lhs, const std::shared_ptr<HeatingCircuit> & rhs) {
|
friend inline bool operator<(const std::shared_ptr<HeatingCircuit> & lhs, const std::shared_ptr<HeatingCircuit> & rhs) {
|
||||||
return (lhs->hc_num_ < rhs->hc_num_);
|
return (lhs->hc_num_ < rhs->hc_num_);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t hc_num_; // 1..10
|
uint8_t hc_num_; // 1..10
|
||||||
uint16_t monitor_typeid_;
|
|
||||||
uint16_t set_typeid_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string mode_tostring(uint8_t mode);
|
static std::string mode_tostring(uint8_t mode);
|
||||||
|
|||||||
@@ -123,10 +123,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
uint8bitb = EMS_VALUE_UINT_NOTSET;
|
uint8bitb = EMS_VALUE_UINT_NOTSET;
|
||||||
telegram->read_bitvalue(uint8bitb, 0, 0); // value is 0x01 = 0000 0001
|
telegram->read_bitvalue(uint8bitb, 0, 0); // value is 0x01 = 0000 0001
|
||||||
shell.printfln("uint8 bit read: expecting 1, got:%d", uint8bitb);
|
shell.printfln("uint8 bit read: expecting 1, got:%d", uint8bitb);
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "devices") {
|
if (command == "devices") {
|
||||||
@@ -159,7 +155,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
// note there is no brand (byte 9)
|
// note there is no brand (byte 9)
|
||||||
rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x59, 0x09, 0x0a});
|
rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x59, 0x09, 0x0a});
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
EMSESP::show_device_values(shell);
|
EMSESP::show_device_values(shell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,8 +205,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
shell.invoke_command("show");
|
shell.invoke_command("show");
|
||||||
// shell.invoke_command("system");
|
// shell.invoke_command("system");
|
||||||
// shell.invoke_command("show mqtt");
|
// shell.invoke_command("show mqtt");
|
||||||
|
|
||||||
// shell.loop_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "thermostat") {
|
if (command == "thermostat") {
|
||||||
@@ -235,20 +228,11 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
// RCPLUSStatusMessage_HC1(0x01A5)
|
// RCPLUSStatusMessage_HC1(0x01A5)
|
||||||
uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24,
|
uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24,
|
||||||
0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03});
|
0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03});
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "tc100") {
|
if (command == "tc100") {
|
||||||
shell.printfln(F("Testing adding a TC100 thermostat to the EMS bus..."));
|
shell.printfln(F("Testing adding a TC100 thermostat to the EMS bus..."));
|
||||||
|
|
||||||
// add_device(0x10, 165, version, EMSdevice::Brand::BUDERUS);
|
|
||||||
// add_device(0x17, 125, version, EMSdevice::Brand::BUDERUS); // test unknown class test
|
|
||||||
// add_device(0x17, 93, version, EMSdevice::Brand::BUDERUS);
|
|
||||||
// add_device(0x17, 254, version, EMSdevice::Brand::BUDERUS); // test unknown product_id
|
|
||||||
|
|
||||||
// EMSESP::add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355
|
|
||||||
|
|
||||||
std::string version("02.21");
|
std::string version("02.21");
|
||||||
|
|
||||||
// add a boiler
|
// add a boiler
|
||||||
@@ -257,11 +241,9 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
// add a thermostat
|
// add a thermostat
|
||||||
EMSESP::add_device(0x18, 202, version, EMSdevice::Brand::BOSCH); // Bosch TC100 - https://github.com/proddy/EMS-ESP/issues/474
|
EMSESP::add_device(0x18, 202, version, EMSdevice::Brand::BOSCH); // Bosch TC100 - https://github.com/proddy/EMS-ESP/issues/474
|
||||||
|
|
||||||
// RCPLUSStatusMessage_HC1(0x01A5)
|
// 0x0A
|
||||||
// uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24,
|
uart_telegram({0x98, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
// 0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03});
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "solar") {
|
if (command == "solar") {
|
||||||
@@ -582,8 +564,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
shell.invoke_command("help");
|
shell.invoke_command("help");
|
||||||
shell.invoke_command("pin");
|
shell.invoke_command("pin");
|
||||||
shell.invoke_command("pin 1 true");
|
shell.invoke_command("pin 1 true");
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "mqtt") {
|
if (command == "mqtt") {
|
||||||
@@ -654,8 +634,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
|
|||||||
|
|
||||||
Mqtt::resubscribe();
|
Mqtt::resubscribe();
|
||||||
Mqtt::show_mqtt(shell); // show queue
|
Mqtt::show_mqtt(shell); // show queue
|
||||||
|
|
||||||
shell.loop_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command == "poll2") {
|
if (command == "poll2") {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "2.0.1b1"
|
#define EMSESP_APP_VERSION "2.0.1b2"
|
||||||
|
|||||||
Reference in New Issue
Block a user