diff --git a/interface/src/app/main/CustomEntitiesDialog.tsx b/interface/src/app/main/CustomEntitiesDialog.tsx index 4a62c84ac..79455de57 100644 --- a/interface/src/app/main/CustomEntitiesDialog.tsx +++ b/interface/src/app/main/CustomEntitiesDialog.tsx @@ -291,7 +291,7 @@ const CustomEntitiesDialog = ({ fullWidth margin="normal" type="number" - inputProps={{ min: '1', max: '27', step: '1' }} + inputProps={{ min: '1', max: String(256 - editItem.offset), step: '1' }} /> )} diff --git a/interface/src/app/settings/Settings.tsx b/interface/src/app/settings/Settings.tsx index a510cb0d5..88e3872f6 100644 --- a/interface/src/app/settings/Settings.tsx +++ b/interface/src/app/settings/Settings.tsx @@ -127,7 +127,7 @@ const Settings: FC = () => { icon={ViewModuleIcon} bgcolor="#efc34b" label="Modules" - text="Activate or deactivate external modules" + text={LL.MODULES_1()} to="modules" /> diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index f0405f0a3..e194d2260 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -71,7 +71,7 @@ const de: Translation = { TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus', DISCONNECTED: 'Getrennt', EMS_SCAN: 'Möchten Sie wirklich eine vollständige Gerätesuche des EMS-Busses starten?', - DATA_TRAFFIC: 'Data Traffic', // TODO Translate + DATA_TRAFFIC: 'Datenverkehr', EMS_DEVICE: 'EMS Gerät', SUCCESS: 'ERFOLG', FAIL: 'FEHLER', @@ -91,7 +91,7 @@ const de: Translation = { NUM_SECONDS: '{num} Sekunde{{n}}', NUM_HOURS: '{num} Stunde{{n}}', NUM_MINUTES: '{num} Minute{{n}}', - APPLICATION: 'Anwendungseinstellungen', + APPLICATION: 'Anwendung', CUSTOMIZATIONS: 'Anpassungen', APPLICATION_RESTARTING: 'EMS-ESP startet neu', INTERFACE_BOARD_PROFILE: 'Interface Platinenprofil', @@ -132,7 +132,7 @@ const de: Translation = { LOGGING: 'Protokollierung', LOG_HEX: 'EMS-Telegramme hexadezimal protokollieren', ENABLE_SYSLOG: 'Syslog aktivieren', - LOG_LEVEL: 'Log Level', + LOG_LEVEL: 'Protokollebene', MARK_INTERVAL: 'Intervallmarke', SECONDS: 'Sekunden', MINUTES: 'Minuten', @@ -145,13 +145,13 @@ const de: Translation = { CUSTOMIZATIONS_FULL: 'Ausgewählte Entitäten haben das Limit überschritten. Bitte stapelweise speichern', CUSTOMIZATIONS_SAVED: 'Anpassungen gespeichert', CUSTOMIZATIONS_HELP_1: 'Wählen Sie ein Gerät aus und passen Sie die Entitäten mithilfe der Optionen an', - CUSTOMIZATIONS_HELP_2: 'als Favorit markieren', + CUSTOMIZATIONS_HELP_2: 'Als Favorit markieren', CUSTOMIZATIONS_HELP_3: 'Schreibaktion deaktivieren', CUSTOMIZATIONS_HELP_4: 'von MQTT und API ausschließen', CUSTOMIZATIONS_HELP_5: 'Aus dem Kontrollzentrum ausblenden', CUSTOMIZATIONS_HELP_6: 'Aus dem Speicher löschen', SELECT_DEVICE: 'Wählen Sie ein Gerät aus', - SET_ALL: 'setzen Sie alle', + SET_ALL: 'Setzen Sie alle', OPTIONS: 'Optionen', NAME: 'Name', CUSTOMIZATIONS_RESET: 'Möchten Sie wirklich alle Anpassungen entfernen, einschließlich der benutzerdefinierten Einstellungen der Temperatur- und Analogsensoren?', @@ -167,7 +167,7 @@ const de: Translation = { FAILED: 'gescheitert', SUCCESSFUL: 'erfolgreich', SYSTEM: 'System', - LOG_OF: '{0} Log', + LOG_OF: '{0}protokoll', STATUS_OF: '{0} Status', UPLOAD_DOWNLOAD: 'Hoch-/Herunterladen', VERSION_ON: 'Sie verwenden derzeit', @@ -199,7 +199,7 @@ const de: Translation = { ERROR: 'Unerwarteter Fehler, bitter versuchen Sie es erneut', TIME_SET: 'Zeit gesetzt', MANAGE_USERS: 'Nutzerverwaltung', - IS_ADMIN: 'ist Admin', + IS_ADMIN: 'Ist Admin', USER_WARNING: 'Sie müssen mindestens einen Admin-Nutzer konfigurieren', ADD: 'Hinzufügen', ACCESS_TOKEN_FOR: 'Zugangs-Token für', @@ -317,19 +317,20 @@ const de: Translation = { ACTIVELOW: 'Aktiv Negativ', UNCHANGED: 'Unverändert', ALWAYS: 'Immer', - ACTIVITY: 'Activity', // TODO translate - CONFIGURE: 'Configure {0}', // TODO translate - SYSTEM_MEMORY: 'System Memory', // TODO translate - APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate - SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate - MODULES: 'Module', // TODO translate - MODULES_UPDATED: 'Modules updated', // TODO translate - MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename', // TODO translate + ACTIVITY: 'Aktivität', + CONFIGURE: 'Konfiguriere {0}', + SYSTEM_MEMORY: 'Systemspeicher', + APPLICATION_SETTINGS_1: 'Ändern Sie die EMS-ESP-Anwendungseinstellungen', + SECURITY_1: 'Benutzer hinzufügen oder entfernen', + UPLOAD_DOWNLOAD_1: 'Einstellungen und Firmware hochladen/herunterladen', + MODULES: 'Module', + MODULES_1: 'Externe Module aktivieren oder deaktivieren', + MODULES_UPDATED: 'Module aktualisiert', + MODULES_DESCRIPTION: 'Klicken Sie auf das Modul, um EMS-ESP-Bibliotheksmodule zu aktivieren oder zu deaktivieren', + MODULES_NONE: 'Keine externen Module erkannt', + RENAME: 'Umbenennen', ENABLE_MODBUS: 'Modbus aktivieren', - VIEW_LOG: 'View log to diagnose issues' // TODO translate + VIEW_LOG: 'Sehen Sie sich das Protokoll an, um Probleme zu diagnostizieren' }; export default de; diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index 78086b8ff..5ff94cac4 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -324,6 +324,7 @@ const en: Translation = { SECURITY_1: 'Add or remove users', UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', MODULES: 'Modules', + MODULES_1: 'Activate or deactivate external modules', MODULES_UPDATED: 'Modules updated', MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', MODULES_NONE: 'No external modules detected', diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts index 7a6d8c7fa..357448867 100644 --- a/interface/src/i18n/fr/index.ts +++ b/interface/src/i18n/fr/index.ts @@ -324,6 +324,7 @@ const fr: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Activer ou désactiver les modules externes', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts index ac0b40a65..3a13ec109 100644 --- a/interface/src/i18n/it/index.ts +++ b/interface/src/i18n/it/index.ts @@ -324,6 +324,7 @@ const it: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Attiva o disattiva i moduli esterni', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 68f7a7f0e..d2e559738 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -324,6 +324,7 @@ const nl: Translation = { SECURITY_1: 'Gebruikers toevoegen of verwijderen', UPLOAD_DOWNLOAD_1: 'Upload-/downloadinstellingen en firmware', MODULES: 'Module', + MODULES_1: 'Externe modules activeren of deactiveren', // TODO translate MODULES_UPDATED: 'Modules geüpdatet', MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren', MODULES_NONE: 'Geen externe modules gedetecteerd', diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 64b213371..4a0ac7d3d 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -324,6 +324,7 @@ const no: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Aktiver eller deaktiver eksterne moduler', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index 1801513ab..03f74c2ec 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -324,6 +324,7 @@ const pl: BaseTranslation = { SECURITY_1: 'Dodawanie i usuwanie użytkowników', UPLOAD_DOWNLOAD_1: 'Wysyłanie/pobieranie ustawień i firmware', MODULES: 'Module', // TODO translate + MODULES_1: 'Aktywuj lub dezaktywuj moduły zewnętrzne', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index 62c991461..d1c9857d2 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -324,6 +324,7 @@ const sk: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Aktivujte alebo deaktivujte externé moduly', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts index 6026de769..760b648d9 100644 --- a/interface/src/i18n/sv/index.ts +++ b/interface/src/i18n/sv/index.ts @@ -324,6 +324,7 @@ const sv: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Aktivera eller avaktivera externa moduler', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts index 07c7b1f84..fdb9f8e1b 100644 --- a/interface/src/i18n/tr/index.ts +++ b/interface/src/i18n/tr/index.ts @@ -324,6 +324,7 @@ const tr: Translation = { SECURITY_1: 'Add or remove users', // TODO translate UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate + MODULES_1: 'Harici modülleri etkinleştirin veya devre dışı bırakın', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 3400b4c16..551b6dbb3 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1106,8 +1106,8 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { has_enumupdate(telegram, hc->reducemode, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode has_update(telegram, hc->reducetemp, 9); has_update(telegram, hc->noreducetemp, 12); - has_enumupdate(telegram, hc->switchProgMode, 13, 1); // 1-level, 2-absolute has_update(telegram, hc->remoteseltemp, 17); // see https://github.com/emsesp/EMS-ESP32/issues/590 + has_enumupdate(telegram, hc->switchProgMode, 19, 1); // 1-level, 2-absolute has_update(telegram, hc->boost, 23); has_update(telegram, hc->boosttime, 24); has_update(telegram, hc->cooling, 28); @@ -2290,7 +2290,7 @@ bool Thermostat::set_switchProgMode(const char * value, const int8_t id) { if (!Helpers::value2enum(value, set, FL_(enum_switchProgMode))) { return false; } - write_command(set_typeids[hc->hc()], 13, set + 1, set_typeids[hc->hc()]); + write_command(set_typeids[hc->hc()], 19, set + 1, set_typeids[hc->hc()]); return true; } @@ -4526,7 +4526,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrcoolondelay, DeviceValueType::UINT8, FL_(coolondelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_coolondelay), 1, 48); register_device_value(tag, &hc->cooloffdelay, DeviceValueType::UINT8, FL_(cooloffdelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_cooloffdelay), 1, 48); register_device_value( - tag, &hc->switchProgMode, DeviceValueType::ENUM, FL_(enum_switchProgMode), FL_(control), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchProgMode)); + tag, &hc->switchProgMode, DeviceValueType::ENUM, FL_(enum_switchProgMode), FL_(switchProgMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchProgMode)); break; case EMSdevice::EMS_DEVICE_FLAG_CRF: diff --git a/src/locale_translations.h b/src/locale_translations.h index 2f4fb023f..fbd7e455d 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -360,7 +360,7 @@ MAKE_TRANSLATION(maintenanceTime, "maintenancetime", "time to next maintenance", MAKE_TRANSLATION(emergencyOps, "emergencyops", "emergency operation", "Notoperation", "Noodoperatie", "Nöddrift", "praca w trybie awaryjnym", "nøddrift", "opération d'urgence", "acil durum çalışması", "operazione di emergenza", "núdzová prevádzka") MAKE_TRANSLATION(emergencyTemp, "emergencytemp", "emergency temperature", "Nottemperatur", "Noodtemperatuur", "Nöddrift temperatur", "temperatura w trybie awaryjnym", "nødtemperatur", "température d'urgence", "acil durum sıcaklığı", "temperatura di emergenza", "núdzová teplota") MAKE_TRANSLATION(pumpMode, "pumpmode", "boiler pump mode", "Kesselpumpen Modus", "Ketelpomp modus", "", "tryb pracy pompy kotła", "pumpemodus", "", "pompa modu", "modalità pompa caldaia", "režim kotlového čerpadla") // TODO translate -MAKE_TRANSLATION(pumpCharacter, "pumpcharacter", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic", "boiler pump characteristic") // TODO translate +MAKE_TRANSLATION(pumpCharacter, "pumpcharacter", "boiler pump characteristic", "Charakteristik der Kesselpumpe", "karakteristiek ketelpomp", "pannpumpsegenskaper", "charakterystyka pompy kotłowej", "kjelepumpekarakteristikk", "caractéristique de la pompe de la chaudière", "gazan nasosy", "caratteristica della pompa della caldaia", "charakteristika kotlového čerpadla") // TODO translate MAKE_TRANSLATION(headertemp, "headertemp", "low loss header", "Hydr. Weiche", "open verdeler", "", "sprzęgło hydrauliczne", "", "bouteille de déc. hydr.", "isı bloğu gidiş suyu sıc.", "comp. idr.", "nízkostratová hlavica") // TODO translate MAKE_TRANSLATION(heatblock, "heatblock", "heating block", "Wärmezelle", "Aanvoertemp. warmtecel", "", "blok grzewczy", "", "départ corps de chauffe", "Hid.denge kabı sıcaklığı", "mandata scamb. pr.", "vykurovací blok") // TODO translate @@ -738,6 +738,7 @@ MAKE_TRANSLATION(hpcooling, "cooling", "cooling", "Kühlen", "Koelen", "Kyler", MAKE_TRANSLATION(coolstart, "coolstart", "cooling starttemp", "Kühlbetrieb ab") // TODO translate MAKE_TRANSLATION(coolondelay, "coolondelay", "cooling on delay", "Einschaltverzögerung Kühlen") // TODO translate MAKE_TRANSLATION(cooloffdelay, "cooloffdelay", "cooling off delay", "Ausschaltverzögerung Kühlen") // TODO translate +MAKE_TRANSLATION(switchProgMode, "switchprogmode", "switch program mode", "Schaltprogram Modus") // TODO translate // heatpump and RC100H MAKE_TRANSLATION(airHumidity, "airhumidity", "relative air humidity", "relative Luftfeuchte", "Relatieve luchtvochtigheid", "Relativ Luftfuktighet", "wilgotność względna w pomieszczeniu", "luftfuktighet", "humidité relative air", "havadaki bağıl nem", "umidità relativa aria", "relatívna vlhkosť vzduchu") diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 4ddacf70a..f9340eb63 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -68,6 +68,11 @@ void WebCustomEntity::read(WebCustomEntity & webEntity, JsonObject root) { StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & webCustomEntity) { // reset everything to start fresh Command::erase_device_commands(EMSdevice::DeviceType::CUSTOM); + for (CustomEntityItem & entityItem : webCustomEntity.customEntityItems) { + if (entityItem.raw) { + delete[] entityItem.raw; + } + } webCustomEntity.customEntityItems.clear(); EMSESP::webCustomEntityService.ha_reset(); @@ -92,8 +97,10 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web entityItem.value_type = DeviceValueType::STRING; entityItem.writeable = true; } - - if (entityItem.value_type == DeviceValueType::BOOL) { + entityItem.raw = nullptr; + if (entityItem.value_type == DeviceValueType::STRING) { + entityItem.raw = new uint8_t[(int)entityItem.factor + 1]; + } else if (entityItem.value_type == DeviceValueType::BOOL) { entityItem.value = EMS_VALUE_DEFAULT_BOOL; } else if (entityItem.value_type == DeviceValueType::INT8) { entityItem.value = EMS_VALUE_DEFAULT_INT8; @@ -136,19 +143,26 @@ bool WebCustomEntityService::command_setvalue(const char * value, const int8_t i if (entityItem.ram == 1) { entityItem.data = value; } else if (entityItem.value_type == DeviceValueType::STRING) { - char telegram[84]; - strlcpy(telegram, value, sizeof(telegram)); - uint8_t data[EMS_MAX_TELEGRAM_LENGTH]; - uint8_t count = 0; - char * p = strtok(telegram, " ,"); // delimiter + auto telegram = strdup(value); + uint8_t * data = new uint8_t[(strlen(telegram)) / 3 + 1]; + uint8_t count = 0; + char * p = strtok(telegram, " ,"); // delimiter while (p != nullptr) { data[count++] = (uint8_t)strtol(p, 0, 16); p = strtok(nullptr, " ,"); } - if (count == 0) { - return false; + free(telegram); + uint8_t offset = entityItem.offset; + uint8_t * dat = data; + while (count > 0) { + uint8_t len = std::min((int)count, 25); + EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, offset, dat, len, 0); + offset += len; + count -= len; + dat += len; } - EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, data, count, 0); + delete[] data; + return true; } else if (entityItem.value_type == DeviceValueType::BOOL) { bool v; if (!Helpers::value2bool(value, v)) { @@ -558,18 +572,23 @@ bool WebCustomEntityService::get_value(std::shared_ptr telegram) const uint8_t len[] = {1, 1, 1, 2, 2, 3, 3, 4}; for (auto & entity : *customEntityItems_) { if (entity.value_type == DeviceValueType::STRING && telegram->type_id == entity.type_id && telegram->src == entity.device_id - && telegram->offset <= entity.offset && (telegram->offset + telegram->message_length) >= (entity.offset + (uint8_t)entity.factor)) { - auto data = Helpers::data_to_hex(telegram->message_data, (uint8_t)entity.factor); - if (entity.data != data) { - entity.data = data; - if (Mqtt::publish_single()) { - publish_single(entity); - } else if (EMSESP::mqtt_.get_publish_onchange(0)) { - has_change = true; + && telegram->offset >= entity.offset) { + auto length = std::min((int)telegram->offset - entity.offset + telegram->message_length, (int)entity.factor); + auto rest = std::min((int)entity.factor - telegram->offset + entity.offset, (int)telegram->message_length); + if (rest > 0) { + memcpy(&entity.raw[telegram->offset - entity.offset], telegram->message_data, rest); + auto data = Helpers::data_to_hex(entity.raw, (uint8_t)length); + if (entity.data != data) { + entity.data = data; + if (Mqtt::publish_single()) { + publish_single(entity); + } else if (EMSESP::mqtt_.get_publish_onchange(0)) { + has_change = true; + } + char cmd[COMMAND_MAX_LENGTH]; + snprintf(cmd, sizeof(cmd), "%s/%s", F_(custom), entity.name.c_str()); + EMSESP::webSchedulerService.onChange(cmd); } - char cmd[COMMAND_MAX_LENGTH]; - snprintf(cmd, sizeof(cmd), "%s/%s", F_(custom), entity.name.c_str()); - EMSESP::webSchedulerService.onChange(cmd); } } else if (entity.value_type != DeviceValueType::STRING && telegram->type_id == entity.type_id && telegram->src == entity.device_id && telegram->offset <= entity.offset && (telegram->offset + telegram->message_length) >= (entity.offset + len[entity.value_type])) { diff --git a/src/web/WebCustomEntityService.h b/src/web/WebCustomEntityService.h index 8fe70e3a3..4f67c2290 100644 --- a/src/web/WebCustomEntityService.h +++ b/src/web/WebCustomEntityService.h @@ -39,6 +39,7 @@ class CustomEntityItem { uint32_t value; std::string data; uint8_t ram; + uint8_t * raw; }; class WebCustomEntity {