check fetch length for custom entities, dev17

This commit is contained in:
MichaelDvP
2026-04-21 19:51:48 +02:00
parent 06ff219385
commit 35550553be
7 changed files with 188 additions and 187 deletions

View File

@@ -387,10 +387,10 @@ void EMSdevice::toggle_fetch(uint16_t telegram_id, bool toggle) {
}
// get status of automatic fetch for a telegramID
bool EMSdevice::is_fetch(uint16_t telegram_id) const {
bool EMSdevice::is_fetch(uint16_t telegram_id, uint8_t len) const {
for (const auto & tf : telegram_functions_) {
if (tf.telegram_type_id_ == telegram_id) {
return tf.fetch_;
return tf.fetch_ && tf.length_ >= len;
}
}
return false;

View File

@@ -362,7 +362,7 @@ class EMSdevice {
const char * telegram_type_name(std::shared_ptr<const Telegram> telegram);
void fetch_values();
void toggle_fetch(uint16_t telegram_id, bool toggle);
bool is_fetch(uint16_t telegram_id) const;
bool is_fetch(uint16_t telegram_id, uint8_t len = 0) const;
bool is_received(uint16_t telegram_id) const;
bool has_telegram_id(uint16_t id) const;
void ha_config_clear();

View File

@@ -1 +1 @@
#define EMSESP_APP_VERSION "3.8.2-dev.16"
#define EMSESP_APP_VERSION "3.8.2-dev.17"

View File

@@ -686,7 +686,7 @@ void WebCustomEntityService::fetch() {
uint8_t stop = (entity.offset + len[entity.value_type]) % fetchblock;
bool is_fetched = start < fetchblock && stop < fetchblock; // make sure the complete value is a a fetched block
for (const auto & emsdevice : EMSESP::emsdevices) {
if (emsdevice->is_device_id(entity.device_id) && emsdevice->is_fetch(entity.type_id)
if (emsdevice->is_device_id(entity.device_id) && emsdevice->is_fetch(entity.type_id, entity.offset + len[entity.value_type])
&& (is_fetched || entity.value_type == DeviceValueType::STRING)) {
needFetch = false;
break;