diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 025954be5..a5e60640f 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -3,7 +3,7 @@ ### Added - function keys in editor: cursor, del, home, end. F1=help, F2=show, and other shortcuts - SM100 pump working time and energy units -- heating curve parameters for RC300 +- heating curve parameters for RC300 (fixed) - `wwonetime` for RC300 thermostat ### Fixed diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index fd19f6acb..17c1c1ab9 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -773,6 +773,16 @@ std::shared_ptr Thermostat::heating_circuit(std::sha } } + // not found, search heating_curve message types + if (hc_num == 0) { + for (uint8_t i = 0; i < curve_typeids.size(); i++) { + if (curve_typeids[i] == telegram->type_id) { + hc_num = i + 1; + break; + } + } + } + // not found, search timer message types if (hc_num == 0) { for (uint8_t i = 0; i < timer_typeids.size(); i++) { diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 896139bf4..88015b0f3 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -471,7 +471,7 @@ std::string EMSESP::pretty_telegram(std::shared_ptr telegram) { type_name = read_flash_string(F("?")); } - if (telegram->dest & 0x80) { + if (telegram->operation == Telegram::Operation::RX_READ) { direction = read_flash_string(F("<-")); } else { direction = read_flash_string(F("->")); diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 9419ede2d..9196b95e3 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -727,7 +727,7 @@ void Mqtt::register_mqtt_ha_binary_sensor(const __FlashStringHelper * name, cons snprintf_P(topic, sizeof(topic), PSTR("homeassistant/binary_sensor/ems-esp/%s/config"), entity); // queue MQTT publish - publish(topic, doc.as()); + publish_retain(topic, doc.as(), true); } // HA config for a normal 'sensor' type diff --git a/src/mqtt.h b/src/mqtt.h index 1f49b5e69..41e2899f6 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -38,7 +38,7 @@ using uuid::console::Shell; -#define EMSESP_MAX_JSON_SIZE_HA_CONFIG 256 // for small HA config payloads +#define EMSESP_MAX_JSON_SIZE_HA_CONFIG 384 // for small HA config payloads #define EMSESP_MAX_JSON_SIZE_SMALL 384 // for smaller json docs when using StaticJsonDocument #define EMSESP_MAX_JSON_SIZE_MEDIUM 768 // for medium json docs from ems devices, when using StaticJsonDocument #define EMSESP_MAX_JSON_SIZE_LARGE 1024 // for large json docs from ems devices, like boiler or thermostat data. Using StaticJsonDocument diff --git a/src/telegram.cpp b/src/telegram.cpp index 4fb9e78af..350621e08 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -159,9 +159,10 @@ void RxService::add(uint8_t * data, uint8_t length) { } // src, dest and offset are always in fixed positions - uint8_t src = data[0] & 0x7F; // strip MSB (HT3 adds it) - uint8_t dest = data[1] & 0x7F; // strip MSB, don't care if its read or write for processing - uint8_t offset = data[3]; // offset is always 4th byte + uint8_t src = data[0] & 0x7F; // strip MSB (HT3 adds it) + uint8_t dest = data[1] & 0x7F; // strip MSB, don't care if its read or write for processing + uint8_t offset = data[3]; // offset is always 4th byte + uint8_t operation = (data[1] & 0x80) ? Telegram::Operation::RX_READ : Telegram::Operation::RX; uint16_t type_id; uint8_t * message_data; // where the message block starts @@ -212,7 +213,7 @@ void RxService::add(uint8_t * data, uint8_t length) { src = EMSESP::check_master_device(src, type_id, true); // create the telegram - auto telegram = std::make_shared(Telegram::Operation::RX, src, dest, type_id, offset, message_data, message_length); + auto telegram = std::make_shared(operation, src, dest, type_id, offset, message_data, message_length); // check if queue is full, if so remove top item to make space if (rx_telegrams_.size() >= MAX_RX_TELEGRAMS) { diff --git a/src/telegram.h b/src/telegram.h index 52a71bd9d..e438d784a 100644 --- a/src/telegram.h +++ b/src/telegram.h @@ -74,6 +74,7 @@ class Telegram { enum Operation : uint8_t { NONE = 0, RX, + RX_READ, TX_RAW, TX_READ, TX_WRITE,