Dyson AM07 tower fan - ir support/setup

Has anyone managed to get a Dyson AM07 integrated into hass? If so, how? I was thinking of an ir blaster somehow but seems Dyson codes are notoriously hard to find and seem to change; I’d also have no idea how to set this up! Any ideas?

I imagine you could use a Broadlink switch device.

They’re pretty cheap on Amazon if you’re in the US: https://smile.amazon.com/BroadLink-Control-Universal-Remote-RMMINI3-EN/dp/B01FK2SDOC/ref=sr_1_2?ie=UTF8&qid=1501537533&sr=8-2&keywords=broadlink+rm

If you’ve got an existing dyson remote you could just copy its codes using this Broadlink device.

Thanks! So to clarify, home assistant would see the broadlink and it’s then the broadlink that sends the ir signal to the fan? Would the dyson remotes codes go on homeassistant or the broadlink or both? Unfortunately it ships from China as I’m in the UK so might look for an alternative. I know dyson cycles in sets of 3 codes or something so it might not be straight forward.

Yes, home assistant can use the broadlink as a “switch”, telling the broadlink to send IR commands when “switched on”. I don’t actually own one of these devices but I do plan on buying one in the near future. It looks like that sort of detail is documented on the component page I linked to above but I’m not sure exactly how it all works.

Maybe someone who already owns this device can chime in.

I know plenty of people already use this device on this forum for very similar purposes.

I use a harmony remote and just set up the device commands as scripts for power toggle, speed +/-, and oscillate. It works well except the Dyson has no discrete codes for power on and off so it’s just a power toggle.

Hi, does somebody have an example fan template for a Dyson AM02 IR-controlled via Broadlink?

Sorry to resurrect an old thread but I’ve finally got around to doing this after 5 years haha! Here’s what I ended up with.

fans.yaml:

- platform: template
  fans:
    office_fan:
      friendly_name: "Office Fan"
      unique_id: office_fan
      value_template: "{{ states('input_boolean.office_fan_power') }}"
      percentage_template: "{{ states('input_number.office_fan_speed') }}"
      oscillating_template: "{{ true if is_state('input_boolean.office_fan_oscillate', 'on') else false }}"
      turn_on:
        service: script.office_fan_on
      turn_off:
        service: script.office_fan_off
      set_oscillating:
        service: script.office_fan_oscillate
        data:
          oscillating: "{{ oscillating }}"
      set_percentage:
        service: script.office_fan_speed
        data:
          percentage: "{{ percentage }}"
      speed_count: 10

scripts.yaml

office_fan_oscillate:
  alias: Office Fan Oscillate
  sequence:
  - service: remote.send_command
    data:
      device: office_fan
      command: oscillate
    target:
      entity_id: remote.broadlink_rm3_remote
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ oscillating }}'
      sequence:
      - service: input_boolean.turn_on
        data: {}
        target:
          entity_id:
          - input_boolean.office_fan_oscillate
          - input_boolean.office_fan_power
    default:
    - service: input_boolean.turn_off
      data: {}
      target:
        entity_id: input_boolean.office_fan_oscillate
  mode: single
office_fan_on:
  sequence:
  - service: remote.send_command
    data:
      device: office_fan
      command: power
    target:
      entity_id: remote.broadlink_rm3_remote
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.office_fan_power
  - service: fan.set_percentage
    data:
      percentage: '{{ states(''input_number.office_fan_speed'') }}'
    target:
      entity_id: fan.office_fan
  mode: single
  alias: Office Fan On
office_fan_speed:
  alias: Office Fan Speed
  sequence:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ percentage == 0 }}'
      sequence:
      - service: fan.turn_off
        data: {}
        target:
          entity_id: fan.office_fan
    default:
    - choose:
      - conditions:
        - condition: template
          value_template: '{{ ((state_attr(''fan.office_fan'', ''percentage'') - percentage)
            | abs) > (states(''input_number.office_fan_speed'') | int(0)) }}'
        sequence:
        - service: remote.send_command
          data:
            device: office_fan
            command: speed_up
            num_repeats: '{{ ((state_attr(''fan.office_fan'', ''percentage'') - percentage)
              | abs) / 10 }}'
          target:
            entity_id: remote.broadlink_rm3_remote
      default:
      - service: remote.send_command
        data:
          device: office_fan
          command: speed_down
          num_repeats: '{{ ((state_attr(''fan.office_fan'', ''percentage'') - percentage)
            | abs) / 10 }}'
        target:
          entity_id: remote.broadlink_rm3_remote
    - service: input_number.set_value
      data:
        value: '{{ percentage }}'
      target:
        entity_id: input_number.office_fan_speed
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
  mode: single
office_fan_off:
  alias: Office Fan Off
  sequence:
  - service: remote.send_command
    data:
      device: office_fan
      command: power
    target:
      entity_id: remote.broadlink_rm3_remote
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id:
      - input_boolean.office_fan_power
      - input_boolean.office_fan_oscillate
  mode: single

Everything works using a broadlink rm3 after recording the remotes buttons! There is a caveat that I haven’t bothered fixing in that you can turn this fan on by pressing the speed increase/decrease buttons - whilst this does work through home assistant too, I didn’t get the UI to update the “on” status reliably and would often end up with HA saying the fan is “off” when it was “on”! I don’t change the speed of the fan all that often and I usually press “on” first anyway so this isn’t a problem for me. It does work if you “press” oscillate from HA though!

Thought I would share my experience with this in case it helps anyone. Non-smart Dyson fans are… fun to figure out :crazy_face:. I’m using a Broadlink RM4 mini as my IR device.

I mainly followed the process in this video for teaching the RM4 the IR commands from the Dyson remote.

I couldn’t get my Dyson AM07 to turn on and off reliably any other way than the following, which is a weird combination of commands and specific time delays:

ON:

- service: remote.send_command
  data:
    device: guest_fan
    command: speed_up
  target:
    entity_id: remote.guest_broadlink_remote
- delay:
    hours: 0
    minutes: 0
    seconds: 2
    milliseconds: 0
- service: remote.send_command
  data:
    device: guest_fan
    command: speed_down
    num_repeats: 10
    delay_secs: 0.5
  target:
    entity_id: remote.guest_broadlink_remote

OFF:

- service: remote.send_command
  data:
    device: guest_fan
    command: speed_up
  target:
    entity_id: remote.guest_broadlink_remote
- delay:
    hours: 0
    minutes: 0
    seconds: 2
    milliseconds: 0
- service: remote.send_command
  data:
    device: guest_fan
    command: speed_down
  target:
    entity_id: remote.guest_broadlink_remote
- delay:
    hours: 0
    minutes: 0
    seconds: 0
    milliseconds: 500
- service: remote.send_command
  data:
    device: guest_fan
    command: power_off
  target:
    entity_id: remote.guest_broadlink_remote

Credit to Dyson fan (AM09) - different IR codes each time power button is pressed? · Issue #184 · lprhodes/homebridge-broadlink-rm · GitHub as inspiration for this method.

It also took a couple tries to capture an IR code off the remote that worked for the power_off command.