From 0b4d2cbe0790087077085cc56d4861a4f03e6044 Mon Sep 17 00:00:00 2001 From: oarcher Date: Mon, 12 Aug 2024 22:51:05 +0200 Subject: [PATCH] use fv.full_config.get().data for final validate --- esphome/components/modem/__init__.py | 17 +++++++++++------ esphome/components/modem/sensor/__init__.py | 14 ++------------ esphome/components/modem/switch/__init__.py | 11 +++++++---- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/esphome/components/modem/__init__.py b/esphome/components/modem/__init__.py index b830eb78c5..92ea8e7d52 100644 --- a/esphome/components/modem/__init__.py +++ b/esphome/components/modem/__init__.py @@ -51,6 +51,9 @@ MODEM_MODELS_POWER = { MODEM_MODELS_POWER["SIM7670"] = MODEM_MODELS_POWER["SIM7600"] +KEY_MODEM_MODEL = "modem_model" +KEY_MODEM_CMUX = "modem_cmux" + modem_ns = cg.esphome_ns.namespace("modem") ModemComponent = modem_ns.class_("ModemComponent", cg.Component) ModemComponentState = modem_ns.enum("ModemComponentState") @@ -106,17 +109,17 @@ CONFIG_SCHEMA = cv.All( def final_validate_platform(config): - if modem_config := fv.full_config.get().get(CONF_MODEM, None): - if not modem_config[CONF_ENABLE_CMUX]: - raise cv.Invalid( - f"'{CONF_MODEM}' platform require '{CONF_ENABLE_CMUX}' to be 'true'." - ) + if not fv.full_config.get().data.get(KEY_MODEM_CMUX, None): + raise cv.Invalid( + f"'{CONF_MODEM}' platform require '{CONF_ENABLE_CMUX}' to be 'true'." + ) return config def _final_validate(config): + full_config = fv.full_config.get() # uncomment after PR#4091 merged - # if wifi_config := fv.full_config.get().get(CONF_WIFI, None): + # if wifi_config := full_config.get(CONF_WIFI, None): # if wifi_has_sta(wifi_config): # raise cv.Invalid("Wifi must be AP only when using ethernet") if config.get(CONF_POWER_PIN, None): @@ -124,6 +127,8 @@ def _final_validate(config): raise cv.Invalid( f"Modem model '{config[CONF_MODEL]}' has no power power specs." ) + full_config.data[KEY_MODEM_MODEL] = config[CONF_MODEL] + full_config.data[KEY_MODEM_CMUX] = config[CONF_ENABLE_CMUX] FINAL_VALIDATE_SCHEMA = _final_validate diff --git a/esphome/components/modem/sensor/__init__.py b/esphome/components/modem/sensor/__init__.py index a92408938b..06da7a1f4e 100644 --- a/esphome/components/modem/sensor/__init__.py +++ b/esphome/components/modem/sensor/__init__.py @@ -8,7 +8,6 @@ from esphome.const import ( CONF_ID, CONF_LATITUDE, CONF_LONGITUDE, - CONF_PLATFORM, CONF_SPEED, DEVICE_CLASS_SIGNAL_STRENGTH, ENTITY_CATEGORY_DIAGNOSTIC, @@ -21,7 +20,7 @@ from esphome.const import ( ) import esphome.final_validate as fv -from .. import CONF_MODEM, final_validate_platform, modem_ns, switch +from .. import final_validate_platform, modem_ns, switch CODEOWNERS = ["@oarcher"] @@ -109,16 +108,7 @@ CONFIG_SCHEMA = cv.All( def _final_validate_gnss(config): # GNSS sensors needs GNSS switch if config.get(CONF_LATITUDE, None) or config.get(CONF_LONGITUDE, None): - gnss = False - if switches := fv.full_config.get().get("switch", None): - modem_switches = filter( - lambda x: x.get(CONF_PLATFORM, None) and x[CONF_PLATFORM] == CONF_MODEM, - switches, - ) - for sw in modem_switches: - if switch.CONF_GNSS in sw: - gnss = True - if not gnss: + if not fv.full_config.get().data.get(switch.KEY_MODEM_GNSS, None): raise cv.Invalid("Using GNSS modem sensors require GNSS modem switch.") return config diff --git a/esphome/components/modem/switch/__init__.py b/esphome/components/modem/switch/__init__.py index 8ab043b989..268df91a33 100644 --- a/esphome/components/modem/switch/__init__.py +++ b/esphome/components/modem/switch/__init__.py @@ -4,7 +4,7 @@ import esphome.config_validation as cv from esphome.const import DEVICE_CLASS_SWITCH import esphome.final_validate as fv -from .. import CONF_MODEL, CONF_MODEM, final_validate_platform, modem_ns +from .. import KEY_MODEM_MODEL, final_validate_platform, modem_ns CODEOWNERS = ["@oarcher"] @@ -15,7 +15,9 @@ DEPENDENCIES = ["modem"] IS_PLATFORM_COMPONENT = True CONF_GNSS = "gnss" -CONF_GNSS_COMMAND = "gnss_command" +CONF_GNSS_COMMAND = "gnss_command" # will be set by _final_validate_gnss + +KEY_MODEM_GNSS = "modem_gnss" ICON_SATELLITE = "mdi:satellite-variant" @@ -38,11 +40,12 @@ CONFIG_SCHEMA = cv.Schema( def _final_validate_gnss(config): if config.get(CONF_GNSS, None): - modem_config = fv.full_config.get().get(CONF_MODEM) - modem_model = modem_config.get(CONF_MODEL, None) + full_config = fv.full_config.get() + modem_model = full_config.data.get(KEY_MODEM_MODEL, None) if modem_model not in MODEM_MODELS_GNSS_COMMAND: raise cv.Invalid(f"GNSS not supported for modem '{modem_model}'.") config[CONF_GNSS_COMMAND] = MODEM_MODELS_GNSS_COMMAND[modem_model] + full_config.data[KEY_MODEM_GNSS] = True return config