diff --git a/esphome/components/sn74hc595/__init__.py b/esphome/components/sn74hc595/__init__.py index 92b6d8d0e5..e98da72304 100644 --- a/esphome/components/sn74hc595/__init__.py +++ b/esphome/components/sn74hc595/__init__.py @@ -75,7 +75,15 @@ SN74HC595_PIN_SCHEMA = cv.All( ) -@pins.PIN_SCHEMA_REGISTRY.register(CONF_SN74HC595, SN74HC595_PIN_SCHEMA) +def sn74hc595_pin_final_validate(pin_config, parent_config): + max_pins = parent_config[CONF_SR_COUNT] * 8 + if pin_config[CONF_NUMBER] >= max_pins: + raise cv.Invalid(f"Pin number must be less than {max_pins}") + + +@pins.PIN_SCHEMA_REGISTRY.register( + CONF_SN74HC595, SN74HC595_PIN_SCHEMA, sn74hc595_pin_final_validate +) async def sn74hc595_pin_to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_parented(var, config[CONF_SN74HC595])