Unable to learn dyson remote

I have a Dyson Hot+Cool AM04 fan w/ remote and I’m unable to get the my BD-1000 to learn the IR codes. Ive searched on this website and google with no success on anyone even attempting to do this. I’ve tried all 6 buttons on the remote during the learning phase of the “generic remote” and nothing works.

My steps are as follows, In App:

  • Select + sign to add new device
  • Select Remote Control
  • Select My Bridge
  • Select Generic Device
  • Select Continue accepting default location / name
  • Select Toggle for Command
  • Select Start (then Bond Bridge starts flasing)
  • <Press AM04 remote On/Off toggle button>

I see other people have done some work on the remotecentral com website :

I additionally have tried to have my bond device learn my Vizio E70-E3 remote and have not had any success. Does Generic Device work with TVs? My BD-1000 does work with my Hunter fans just fine.

Bond App Version - 2.18.1
Bond Firmware Version - 2.10.8

Any suggestions?

So I’m going to walk you through what I did in the app first, and then how i relabeled things via cURL.

  1. Open BOND Home app, press “+” and select “Device Control”.
    (if you have multiple BOND Bridges in your home, choose the one which will have IR line of sight to your Dyson)
  2. Select “Ceiling Fan”.
  3. Assign “Location” and “Device Name” as appropriate, then press “Continue”.
  4. Choose “Winter”, hit “Advanced Settings”.
  5. Choose “Signal Type” of IR and toggle OFF “search remote database”, then hit “Save”.
  6. Click “Start” and press the blue dot on your remote once (BOND Bridge should blink green).
  7. Test it and click “Yes, it works!” if it successfully toggles back and forth between heat and cool modes (just like pressing the blue dot button on the OEM Dyson remote itself does).
  8. Repeat steps 6 and 7 for each of “Summer” (heat up / red dot button on remote), “Breeze” (heat down / red circle button on remote), “Reverse” (oscillate button on remote), “Toggle Bottom Light” (narrow angle focus breeze button on remote), “Toggle Power” (power button on remote), “Increase Speed” (fan speed up / larger white circle button on remote), “Decrease Speed” (fan speed down / smaller white circle button on remote), “Timer Off” (timer button on remote), and “Toggle Top Light” (wide angle breeze button on remote).

Now we need to rename things because we kind of flexed some commands from the ceiling fan class to do Dyson specific things. I suppose this is optional since it is tedious, but it should vastly improve your user experience I think.

  1. Open cURL, and find the new device ID for the AM04 you just created in step 3 above.
  2. For each command in v2/devices/newDeviceID/commands/, call it out first with a normal GET command to see what the description and action currently is (replacing the BOND-Token, BONDBridgeID, newDeviceID, and currentCommandID as appropriate):
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" http://BONDBridgeID.local/v2/devices/newDeviceID/commands/currentCommandID
  3. Once you have identified the action, come up with what you’d like to name it in the app, and then use -X PATCH -d as indicated below (" marks are designated as used on a Windows based system; adjust as necessary for Linux/Apple):
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" http://BONDBridgeID.local/v2/devices/newDeviceID/commands/currentCommandID -X PATCH -d "{\"name\":\"Blue Dot\",\"action\":\"SetDirection\"}"
    Make sure to keep the same action value, but feel free to change the name. This is my replacement for the “Winter” command, for instance.
  4. Repeat steps 2 and 3 for each command, updating the name as you see fit for any and all.
    Might help to have a notepad or equivalent window open to keep track of each of the commands as you enumerate and rename each one. If you forget which command does what you can reference my list above (if you followed it directly), or obviously pressing the button in the BOND Home app and watching your AM04’s reaction is an option. :slight_smile:

@jacob : I have trouble PATCHing commands such as Reverse, Toggle Top Light and Toggle Bottom Light. I seem to be running across this with only commands when argument is null, but I am not certain if that is the only difference. This issue persists across Windows and Linux, cURL or Postman.
curl: (56) Recv failure: Connection was reset
The way I get around that is by POSTing a duplicate of the command (and its signal node) I want with the proper naming convention, then DELing the command that won’t accept a PATCH.

You end up with this (after some amount of time and effort):

1 Like

Okay, thanks for the report. Looking into it.

1 Like

Stuck at the same point. Anyone figure this out?

@hexon - at which part are you stuck? I have this working as described here.

My mistake. When you say " The way I get around that is by POSTing a duplicate of the command (and its signal node) I want with the proper naming convention, then DELing the command that won’t accept a PATCH." Do you mean adding the remote command to another fan function in the bond app? Then renaming that one? I’m not sure what you mean by POSTing. Could you give me a command example?

So I set up the commands as indicated above in the app. Then renamed as many as I could via simple PATCH.

As I mentioned and you quoted, for a few commands, such as “ToggleUpLight”, I had trouble PATCHing the name of the command. For those, I got the command and signal of the existing buttons, then copied the command via a POST and the signal via a PUT, then removed the offending button via a DEL like so:

  1. GET the command structure of existing “ToggleUpLight”
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" -i http://192.168.a.b/v2/devices/yyyyyyyy/commands/zzzzzzzz
    …which returns:
    {"name":"Top Light","action":"ToggleUpLight","argument":null,"button_type":"tap","category_name":"Light","feedback":"state.light==1 and state.up_light==1","icon":"top_light","hidden":false,"_":"59262ec6","signal":{"_":"74af0fc3"},"tx":{"_":"56f0ee01"}}

  2. GET the command->signal structure of existing “ToggleUpLight”
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" -i http://192.168.a.b/v2/devices/yyyyyyyy/commands/zzzzzzzz/signal
    …which returns (truncated the hex value for the Data field, represented with …, to make this post readable):
    {"freq":38,"bps":40000,"reps":1,"modulation":"OOK","encoding":"hex","data":"0...0","_":"74af0fc3"}

  3. Copy and paste the output from Step 1 in a plain text editor of your choice, then modify so you have a POST string like so, including the change you desire in the Name field and keeping (unmodified) everything else up to and including the Hidden field - as in, do not include the underscore + value pair, the signal node, or the tx node at the end of the output from Step 1.
    Don’t forget to escape your " signs as necessary for your platform - this was my version on Windows for cURL:
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" -i http://192.168.a.b/v2/devices/yyyyyyyy/commands -X POST -d "{\"name\":\"Wide Angle\",\"action\":\"ToggleUpLight\",\"argument\":null,\"button_type\":\"tap\",\"category_name\":\"Light\",\"feedback\":\"state.light==1 and state.up_light==1\",\"icon\":\"top_light\",\"hidden\":false"}"
    …which returns your new command ID (keep track of this, you will need it for step 4):
    {"_id":"nnnnnnnn"}

  4. Copy and paste the output from Step 2 (up to and including the Data field, again not including the underscore + value pair at the end) at the end of a string PUTting the actual signal for the new command ID nnnnnnnn from Step 3 like so (truncated the hex value the Data field, represented with …, to make this post readable):
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" -i http://192.168.a.b/v2/devices/yyyyyyyy/commands/nnnnnnnn/signal -X PUT -d "{\"freq\":38,\"bps\":40000,\"reps\":1,\"modulation\":\"OOK\",\"encoding\":\"hex\",\"data\":\"0...0\"}"
    …which returns the same value as you put in the {} of the PUT command.

  5. Now test your new “Wide Angle” (or whatever you named it) command from the app, and if it works, you can DELete the original “Top Light toggle” command button that wouldn’t let you rename it via PATCH:
    curl -H "BOND-Token: xxxxxxxxxxxxxxxx" -i http://192.168.a.b/v2/devices/yyyyyyyy/commands/zzzzzzzz -x DEL -d "{}"

Your detailed explanation did the trick! I’m new to all this so it took a bit to wrap my brain around it. Thanks again.

1 Like

I’m so glad, @hexon ! It is quite a bit of work and not exactly straightforward, but the end result is pretty sweet.