# blueprints/automation/inovelli_mode_cycling.yaml # # Inovelli Config Button Mode Cycling # # Cycles through lighting modes when the config button is pressed on an # Inovelli Blue Dimmer Switch (VZM31-SN) via Zigbee2MQTT. # # Features: # - Cycles through available modes in input_select # - Updates LED color to match new mode (ROYGBIV scheme) # - Flashes LED to confirm mode change (0.5-second pulse) # # Requirements: # - Inovelli Blue Dimmer (VZM31-SN) paired with Zigbee2MQTT # - input_select helper with available modes # - Mode settings entities following convention: input_text.adaptive_lighting_settings_{{mode}} # - Each mode must have led_color field in nested JSON schema # # Reference: ADAPTIVE_LIGHTING_CONTROL_SYSTEM_DESIGN.md lines 144-182 blueprint: name: Inovelli Config Button Mode Cycling description: Press config button to cycle through lighting modes with LED feedback domain: automation input: switch_action_event: name: Switch Action Event description: The event entity that reports button presses (event.xxx_action) selector: entity: domain: event mode_input_select: name: Mode Input Select description: The input_select helper that tracks current lighting mode selector: entity: domain: input_select led_color_entity: name: LED Color Entity description: The number entity for LED color when on (number.xxx_led_color_when_on) selector: entity: domain: number zigbee2mqtt_device_name: name: Zigbee2MQTT Device Name description: The device name in Zigbee2MQTT (for LED flash effect via MQTT). Example "bedroom_switch" selector: text: mode: single max_exceeded: silent trigger: - platform: state entity_id: !input switch_action_event condition: - condition: state entity_id: !input switch_action_event attribute: event_type state: "config_single" action: - variables: mode_select: !input mode_input_select zigbee2mqtt_device_name: !input zigbee2mqtt_device_name current_mode: "{{ states(mode_select) }}" available_modes: "{{ state_attr(mode_select, 'options') }}" current_index: "{{ available_modes.index(current_mode) }}" next_index: "{{ (current_index + 1) % (available_modes | length) }}" next_mode: "{{ available_modes[next_index] }}" next_mode_settings_entity: >- input_text.adaptive_lighting_settings_{{ next_mode | lower | replace(' ', '_') }} next_mode_settings: "{{ states(next_mode_settings_entity) | from_json }}" next_color: "{{ next_mode_settings.led_color | default(170) }}" # Change to next mode - service: input_select.select_option target: entity_id: !input mode_input_select data: option: "{{ next_mode }}" # Update LED color - service: number.set_value target: entity_id: !input led_color_entity data: value: "{{ next_color }}" # Flash LED to confirm mode change (0.5-second pulse) - service: mqtt.publish data: topic: "zigbee2mqtt/{{ zigbee2mqtt_device_name }}/set" payload: >- {"led_effect": {"effect": "pulse", "color": {{ next_color }}, "level": 100, "duration": 0.5}}