2026/07/16

빌레사 스크롤 휠 / 커튼과 선풍기 속도조절


빌레사 스크롤 휠로 커튼과 선풍기의 열림 또는 속도 단계 올리고 내리는 자동화.
휠을 돌린만큼 이벤트 타입이 multi_press_1부터 8까지 생성되는 걸 이용해 현재위치에서 스텝*상수를 더하거나 빼는 방식으로 컨트롤.

- id: Wheel 1st/Bedroom
  alias: Wheel 1st/Bedroom
  mode: restart
  triggers:
    - trigger: state
      entity_id:
        - event.bilresa_wheel_1st_button_1
        - event.bilresa_wheel_1st_button_2
        - event.bilresa_wheel_1st_button_3
        - event.bilresa_wheel_1st_button_4
        - event.bilresa_wheel_1st_button_5
        - event.bilresa_wheel_1st_button_6
        - event.bilresa_wheel_1st_button_7
        - event.bilresa_wheel_1st_button_8
        - event.bilresa_wheel_1st_button_9
      to: ~
  conditions:
    - "{{ trigger.from_state.state != 'unavailable' }}"
  actions:
    - choose:

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_1' }}"
          sequence:
            - variables:
                step: >
                  {{ trigger.to_state.attributes.event_type.split('_')[-1] | int }}
                current: >
                  {{ state_attr('cover.be_curtain', 'current_position') | int(0) }}
                target: >
                  {{ [current + (step * 5), 100] | min }}
            - action: cover.set_cover_position
              target:
                entity_id: cover.be_curtain
              data:
                position: "{{ target }}"

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_2' }}"
          sequence:
            - variables:
                step: >
                  {{ trigger.to_state.attributes.event_type.split('_')[-1] | int }}
                current: >
                  {{ state_attr('cover.be_curtain', 'current_position') | int(100) }}
                target: >
                  {{ [current - (step * 5), 1] | max }}
            - action: cover.set_cover_position
              target:
                entity_id: cover.be_curtain
              data:
                position: "{{ target }}"

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_3' }}"
            - "{{ trigger.to_state.attributes.event_type == 'multi_press_1' }}"
          sequence:
            - action: cover.toggle
              entity_id: cover.be_curtain

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_4' }}"
          sequence:
            - variables:
                step: >
                  {{ trigger.to_state.attributes.event_type.split('_')[-1] | int }}
                current: >
                  {{ state_attr('fan.mi_smart_fan', 'percentage') | int(0) }}
                target: >
                  {{ [current + (step * 10), 100] | min }}
            - action: fan.set_percentage
              target:
                entity_id: fan.mi_smart_fan
              data:
                percentage: "{{ target }}"

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_5' }}"
          sequence:
            - variables:
                step: >
                  {{ trigger.to_state.attributes.event_type.split('_')[-1] | int }}
                current: >
                  {{ state_attr('fan.mi_smart_fan', 'percentage') | int(0) }}
                target: >
                  {{ [current - (step * 10), 1] | max }}
            - action: fan.set_percentage
              target:
                entity_id: fan.mi_smart_fan
              data:
                percentage: "{{ target }}"

        - conditions:
            - "{{ trigger.entity_id == 'event.bilresa_wheel_1st_button_6'}}"
            - "{{ trigger.to_state.attributes.event_type == 'multi_press_1' }}"
          sequence:
            - action: fan.toggle
              entity_id: fan.mi_smart_fan