From daffdcf58e358606cce36da61cd642ff401271ee Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 22 Apr 2026 15:43:20 +0200 Subject: [PATCH 1/5] https://github.com/emsesp/EMS-ESP32/issues/2686 --- src/devices/thermostat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 977f041bc..aa909b515 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -166,7 +166,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i set2_typeids = {0x0421, 0x0422, 0x0423, 0x0424}; summer_typeids = {0x02AF, 0x02B0, 0x02B1, 0x02B2, 0x02B3, 0x02B4, 0x02B5, 0x02B6}; curve_typeids = {0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x02A0, 0x02A1, 0x02A2}; - summer2_typeids = {0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478}; + summer2_typeids = {0x0470, 0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478}; hp_typeids = {0x0467, 0x0468, 0x0469, 0x046A}; hpmode_typeids = {0x0291, 0x0292, 0x0293, 0x0294}; const size_t monitor_size = monitor_typeids.size(); From 74c76eb90b2e52a21a6583e2412080e02092a12d Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 22 Apr 2026 15:43:29 +0200 Subject: [PATCH 2/5] remove YIELD --- src/core/temperaturesensor.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index afcfb4673..086582292 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -21,12 +21,6 @@ #include "temperaturesensor.h" #include "emsesp.h" -#ifdef ESP32 -#define YIELD -#else -#define YIELD yield() -#endif - namespace emsesp { uuid::log::Logger TemperatureSensor::logger_{F_(temperaturesensor), uuid::log::Facility::DAEMON}; @@ -81,7 +75,6 @@ void TemperatureSensor::loop() { LOG_DEBUG("Read sensor temperature"); #endif if (bus_.reset() || parasite_) { - YIELD; bus_.skip(); bus_.write(CMD_CONVERT_TEMP, parasite_ ? 1 : 0); state_ = State::READING; @@ -260,19 +253,16 @@ int16_t TemperatureSensor::get_temperature_c(const uint8_t addr[]) { LOG_ERROR("Bus reset failed before reading scratchpad from %s", Sensor(addr).id()); return EMS_VALUE_INT16_NOTSET; } - YIELD; uint8_t scratchpad[SCRATCHPAD_LEN] = {0}; bus_.select(addr); bus_.write(CMD_READ_SCRATCHPAD); bus_.read_bytes(scratchpad, SCRATCHPAD_LEN); - YIELD; if (!bus_.reset()) { LOG_ERROR("Bus reset failed after reading scratchpad from %s", Sensor(addr).id()); return EMS_VALUE_INT16_NOTSET; } - YIELD; if (bus_.crc8(scratchpad, SCRATCHPAD_LEN - 1) != scratchpad[SCRATCHPAD_LEN - 1]) { LOG_WARNING("Invalid scratchpad CRC: %02X%02X%02X%02X%02X%02X%02X%02X%02X from sensor %s", From 8e64c6303ec1ab4c42ca67902f74a251b4f504a3 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 22 Apr 2026 15:43:58 +0200 Subject: [PATCH 3/5] package update --- interface/package.json | 2 +- interface/pnpm-lock.yaml | 8 ++++---- mock-api/package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/package.json b/interface/package.json index 80ce3ced3..d2d955b19 100644 --- a/interface/package.json +++ b/interface/package.json @@ -67,5 +67,5 @@ "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^6.1.1" }, - "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319" + "packageManager": "pnpm@10.33.1+sha512.05ba3c1d5d1c18f68df06470d74055e62d41fc110a0c660db1b2dfb2785327f04cf0f68345d4609bc52089e7fa0343c31593b2f9594e2c5d5da426230acc9820" } diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 8b4040ec6..735cfd2c5 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -1287,8 +1287,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001788: - resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + caniuse-lite@1.0.30001790: + resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -4417,7 +4417,7 @@ snapshots: browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.20 - caniuse-lite: 1.0.30001788 + caniuse-lite: 1.0.30001790 electron-to-chromium: 1.5.343 node-releases: 2.0.38 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -4480,7 +4480,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001788: {} + caniuse-lite@1.0.30001790: {} caw@2.0.1: dependencies: diff --git a/mock-api/package.json b/mock-api/package.json index c90493509..dea8d1846 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -15,5 +15,5 @@ "itty-router": "^5.0.23", "prettier": "^3.8.3" }, - "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319" + "packageManager": "pnpm@10.33.1+sha512.05ba3c1d5d1c18f68df06470d74055e62d41fc110a0c660db1b2dfb2785327f04cf0f68345d4609bc52089e7fa0343c31593b2f9594e2c5d5da426230acc9820" } From 26102121e1996b70e66f19c8d2543f51e1bac6a0 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 22 Apr 2026 16:07:56 +0200 Subject: [PATCH 4/5] async-validator fixes --- interface/src/SignIn.tsx | 4 ++-- .../src/app/main/CustomEntitiesDialog.tsx | 12 ++++++------ interface/src/app/main/DevicesDialog.tsx | 4 ++-- interface/src/app/main/SchedulerDialog.tsx | 4 ++-- interface/src/app/main/SensorsAnalogDialog.tsx | 4 ++-- .../src/app/main/SensorsTemperatureDialog.tsx | 4 ++-- interface/src/app/settings/APSettings.tsx | 4 ++-- .../src/app/settings/ApplicationSettings.tsx | 4 ++-- interface/src/app/settings/MqttSettings.tsx | 4 ++-- interface/src/app/settings/NTPSettings.tsx | 4 ++-- .../app/settings/network/NetworkSettings.tsx | 4 ++-- .../app/settings/security/SecuritySettings.tsx | 4 ++-- interface/src/app/settings/security/User.tsx | 4 ++-- interface/src/validators/shared.ts | 18 ++++++++++++++++-- 14 files changed, 46 insertions(+), 32 deletions(-) diff --git a/interface/src/SignIn.tsx b/interface/src/SignIn.tsx index 7b26d94dc..c3955d286 100644 --- a/interface/src/SignIn.tsx +++ b/interface/src/SignIn.tsx @@ -18,7 +18,7 @@ import { PROJECT_NAME } from 'env'; import { useI18nContext } from 'i18n/i18n-react'; import type { SignInRequest } from 'types'; import { onEnterCallback, updateValue } from 'utils'; -import { SIGN_IN_REQUEST_VALIDATOR, validate } from 'validators'; +import { SIGN_IN_REQUEST_VALIDATOR, ValidationError, validate } from 'validators'; const SignIn = memo(() => { const authenticationContext = useContext(AuthenticationContext); @@ -74,7 +74,7 @@ const SignIn = memo(() => { await validate(SIGN_IN_REQUEST_VALIDATOR, signInRequest); await signIn(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); setProcessing(false); } }, [signInRequest, signIn, LL]); diff --git a/interface/src/app/main/CustomEntitiesDialog.tsx b/interface/src/app/main/CustomEntitiesDialog.tsx index 170c5e888..b40e4aa25 100644 --- a/interface/src/app/main/CustomEntitiesDialog.tsx +++ b/interface/src/app/main/CustomEntitiesDialog.tsx @@ -28,7 +28,7 @@ import type { ValidateFieldsError } from 'async-validator'; import { BlockFormControlLabel, ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { DeviceValueType, DeviceValueTypeNames, DeviceValueUOM_s } from './types'; import type { EntityItem } from './types'; @@ -136,7 +136,7 @@ const CustomEntitiesDialog = ({ } onSave(processedItem); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [validator, editItem, onSave]); @@ -215,7 +215,7 @@ const CustomEntitiesDialog = ({ name="value" label={LL.DEFAULT(0) + ' ' + LL.VALUE(0)} type="string" - value={editItem.value as string} + value={editItem.value} variant="outlined" onChange={updateFormValue} fullWidth @@ -260,7 +260,7 @@ const CustomEntitiesDialog = ({ margin="normal" sx={{ width: '11ch' }} type="string" - value={editItem.device_id as string} + value={editItem.device_id} onChange={updateFormValue} slotProps={{ input: { @@ -280,7 +280,7 @@ const CustomEntitiesDialog = ({ margin="normal" sx={{ width: '11ch' }} type="string" - value={editItem.type_id as string} + value={editItem.type_id} onChange={updateFormValue} slotProps={{ input: { @@ -381,7 +381,7 @@ const CustomEntitiesDialog = ({ fieldErrors={fieldErrors || {}} name="factor" label={LL.BITMASK()} - value={editItem.factor as string} + value={editItem.factor} sx={{ width: '11ch' }} variant="outlined" onChange={updateFormValue} diff --git a/interface/src/app/main/DevicesDialog.tsx b/interface/src/app/main/DevicesDialog.tsx index 5afa96666..fd2770e7d 100644 --- a/interface/src/app/main/DevicesDialog.tsx +++ b/interface/src/app/main/DevicesDialog.tsx @@ -24,7 +24,7 @@ import type { ValidateFieldsError } from 'async-validator'; import { ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { DeviceValueUOM, DeviceValueUOM_s } from './types'; import type { DeviceValue } from './types'; @@ -67,7 +67,7 @@ const DevicesDialog = ({ await validate(validator, editItem); onSave(editItem); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [validator, editItem, onSave]); diff --git a/interface/src/app/main/SchedulerDialog.tsx b/interface/src/app/main/SchedulerDialog.tsx index 8277da6e3..27713de86 100644 --- a/interface/src/app/main/SchedulerDialog.tsx +++ b/interface/src/app/main/SchedulerDialog.tsx @@ -26,7 +26,7 @@ import type { ValidateFieldsError } from 'async-validator'; import { BlockFormControlLabel, ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { ScheduleFlag } from './types'; import type { ScheduleItem } from './types'; @@ -120,7 +120,7 @@ const SchedulerDialog = ({ await validate(validator, itemToSave); onSave(itemToSave); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [validator, onSave] diff --git a/interface/src/app/main/SensorsAnalogDialog.tsx b/interface/src/app/main/SensorsAnalogDialog.tsx index 10b49fbf8..ffc5a4485 100644 --- a/interface/src/app/main/SensorsAnalogDialog.tsx +++ b/interface/src/app/main/SensorsAnalogDialog.tsx @@ -23,7 +23,7 @@ import type { ValidateFieldsError } from 'async-validator'; import { ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { AnalogType, AnalogTypeNames, DeviceValueUOM_s } from './types'; import type { AnalogSensor } from './types'; @@ -172,7 +172,7 @@ const SensorsAnalogDialog = ({ await validate(validator, editItem); onSave(editItem); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [validator, editItem, onSave]); diff --git a/interface/src/app/main/SensorsTemperatureDialog.tsx b/interface/src/app/main/SensorsTemperatureDialog.tsx index 31cdad43b..670b34244 100644 --- a/interface/src/app/main/SensorsTemperatureDialog.tsx +++ b/interface/src/app/main/SensorsTemperatureDialog.tsx @@ -21,7 +21,7 @@ import type { ValidateFieldsError } from 'async-validator'; import { ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import type { TemperatureSensor } from './types'; @@ -84,7 +84,7 @@ const SensorsTemperatureDialog = ({ await validate(validator, editItem); onSave(editItem); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [validator, editItem, onSave]); diff --git a/interface/src/app/settings/APSettings.tsx b/interface/src/app/settings/APSettings.tsx index 593d0e45d..7d8c8875c 100644 --- a/interface/src/app/settings/APSettings.tsx +++ b/interface/src/app/settings/APSettings.tsx @@ -21,7 +21,7 @@ import { useI18nContext } from 'i18n/i18n-react'; import type { APSettingsType } from 'types'; import { APProvisionMode } from 'types'; import { numberValue, updateValueDirty, useRest } from 'utils'; -import { createAPSettingsValidator, validate } from 'validators'; +import { ValidationError, createAPSettingsValidator, validate } from 'validators'; export const isAPEnabled = ({ provision_mode }: APSettingsType) => provision_mode === APProvisionMode.AP_MODE_ALWAYS || @@ -86,7 +86,7 @@ const APSettings = () => { await validate(createAPSettingsValidator(data), data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData]); diff --git a/interface/src/app/settings/ApplicationSettings.tsx b/interface/src/app/settings/ApplicationSettings.tsx index 247db2d45..ce985530b 100644 --- a/interface/src/app/settings/ApplicationSettings.tsx +++ b/interface/src/app/settings/ApplicationSettings.tsx @@ -33,7 +33,7 @@ import { } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValueDirty, useRest } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { API, getBoardProfile, readSettings, writeSettings } from '../../api/app'; import { BOARD_PROFILES } from '../main/types'; @@ -153,7 +153,7 @@ const ApplicationSettings = () => { setFieldErrors(undefined); await validate(createSettingsValidator(data), data); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } finally { await saveData(); } diff --git a/interface/src/app/settings/MqttSettings.tsx b/interface/src/app/settings/MqttSettings.tsx index a2ae1c236..417fa8190 100644 --- a/interface/src/app/settings/MqttSettings.tsx +++ b/interface/src/app/settings/MqttSettings.tsx @@ -31,7 +31,7 @@ import { import { useI18nContext } from 'i18n/i18n-react'; import type { MqttSettingsType } from 'types'; import { numberValue, updateValueDirty, useRest } from 'utils'; -import { createMqttSettingsValidator, validate } from 'validators'; +import { ValidationError, createMqttSettingsValidator, validate } from 'validators'; import { callAction } from '../../api/app'; @@ -94,7 +94,7 @@ const MqttSettings = () => { await validate(createMqttSettingsValidator(data), data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData]); diff --git a/interface/src/app/settings/NTPSettings.tsx b/interface/src/app/settings/NTPSettings.tsx index 9b36e417d..ff517a266 100644 --- a/interface/src/app/settings/NTPSettings.tsx +++ b/interface/src/app/settings/NTPSettings.tsx @@ -36,7 +36,7 @@ import { import { useI18nContext } from 'i18n/i18n-react'; import type { NTPSettingsType, Time } from 'types'; import { formatLocalDateTime, updateValueDirty, useRest } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { NTP_SETTINGS_VALIDATOR } from 'validators/ntp'; import { TIME_ZONES, selectedTimeZone, useTimeZoneSelectItems } from './TZ'; @@ -133,7 +133,7 @@ const NTPSettings = () => { await validate(NTP_SETTINGS_VALIDATOR, data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData]); diff --git a/interface/src/app/settings/network/NetworkSettings.tsx b/interface/src/app/settings/network/NetworkSettings.tsx index 92651c654..5f96aa594 100644 --- a/interface/src/app/settings/network/NetworkSettings.tsx +++ b/interface/src/app/settings/network/NetworkSettings.tsx @@ -40,7 +40,7 @@ import { import { useI18nContext } from 'i18n/i18n-react'; import type { NetworkSettingsType } from 'types'; import { updateValueDirty, useRest } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; import { createNetworkSettingsValidator } from 'validators/network'; import SystemMonitor from '../../status/SystemMonitor'; @@ -116,7 +116,7 @@ const NetworkSettings = () => { await validate(createNetworkSettingsValidator(data), data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } deselectNetwork(); }, [data, saveData, deselectNetwork]); diff --git a/interface/src/app/settings/security/SecuritySettings.tsx b/interface/src/app/settings/security/SecuritySettings.tsx index b894a0e0a..117a84467 100644 --- a/interface/src/app/settings/security/SecuritySettings.tsx +++ b/interface/src/app/settings/security/SecuritySettings.tsx @@ -19,7 +19,7 @@ import { AuthenticatedContext } from 'contexts/authentication'; import { useI18nContext } from 'i18n/i18n-react'; import type { SecuritySettingsType } from 'types'; import { updateValueDirty, useRest } from 'utils'; -import { SECURITY_SETTINGS_VALIDATOR, validate } from 'validators'; +import { SECURITY_SETTINGS_VALIDATOR, ValidationError, validate } from 'validators'; const SecuritySettings = () => { const { LL } = useI18nContext(); @@ -58,7 +58,7 @@ const SecuritySettings = () => { await saveData(); await authenticatedContext.refresh(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData, authenticatedContext]); diff --git a/interface/src/app/settings/security/User.tsx b/interface/src/app/settings/security/User.tsx index 68f740647..bf1ce8862 100644 --- a/interface/src/app/settings/security/User.tsx +++ b/interface/src/app/settings/security/User.tsx @@ -24,7 +24,7 @@ import { import { useI18nContext } from 'i18n/i18n-react'; import type { UserType } from 'types'; import { updateValue } from 'utils'; -import { validate } from 'validators'; +import { ValidationError, validate } from 'validators'; interface UserFormProps { creating: boolean; @@ -69,7 +69,7 @@ const User: FC = ({ await validate(validator, user); onDoneEditing(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } } }, [user, validator, onDoneEditing]); diff --git a/interface/src/validators/shared.ts b/interface/src/validators/shared.ts index d1132d184..a0da4beb3 100644 --- a/interface/src/validators/shared.ts +++ b/interface/src/validators/shared.ts @@ -1,6 +1,20 @@ -import type { InternalRuleItem, ValidateOption } from 'async-validator'; +import type { + InternalRuleItem, + ValidateFieldsError, + ValidateOption +} from 'async-validator'; import type Schema from 'async-validator'; +export class ValidationError extends Error { + readonly fieldErrors: ValidateFieldsError; + + constructor(fieldErrors: ValidateFieldsError) { + super('Validation failed'); + this.name = 'ValidationError'; + this.fieldErrors = fieldErrors; + } +} + export const validate = ( validator: Schema, source: Partial, @@ -8,7 +22,7 @@ export const validate = ( ): Promise => new Promise((resolve, reject) => { void validator.validate(source, options ?? {}, (errors, fieldErrors) => { - errors ? reject(fieldErrors as Error) : resolve(source as T); + errors ? reject(new ValidationError(fieldErrors)) : resolve(source as T); }); }); From db2be70d66bd0e6ff55ab5d431042387e95ea7b0 Mon Sep 17 00:00:00 2001 From: proddy <1230712+proddy@users.noreply.github.com> Date: Wed, 22 Apr 2026 14:22:25 +0000 Subject: [PATCH 5/5] chore: update generated files for v3.8.2-dev.18 --- docs/dump_telegrams.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/dump_telegrams.csv b/docs/dump_telegrams.csv index 8b0173331..f9b84239e 100644 --- a/docs/dump_telegrams.csv +++ b/docs/dump_telegrams.csv @@ -171,6 +171,7 @@ telegram_type_id,name,is_fetched 0x0468,HPSet, 0x0469,HPSet, 0x046A,HPSet, +0x0470,RC300Summer2, 0x0471,RC300Summer2, 0x0472,RC300Summer2, 0x0473,RC300Summer2, @@ -178,7 +179,6 @@ telegram_type_id,name,is_fetched 0x0475,RC300Summer2, 0x0476,RC300Summer2, 0x0477,RC300Summer2, -0x0478,RC300Summer2, 0x047B,HP2, 0x0484,HPSilentMode,fetched 0x0485,HpCooling,fetched