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):

  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):

  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.

Sorry, newbie over here. I’m stuck in step 2, on how to use the GET command to see description and actions.
I’m able to otherwise thru the BOND app see what my BONDBridgeID is, new DeviceID but not the currentCommandID.

Just for example, my BOND bridge is on local IP

Hey @grimmie , welcome to the forums!

So the GET commands, PATCH commands, etc are all done via a generic command line program (or optionally some graphical user interface program that does similar) on a computer connected to the same WiFi network.

For a Windows computer, it would be the “command prompt” (DOS-like) cmd.exe window calling curl commands as listed above; for a Mac computer, it would be similarly called through Terminal.
You will end up using the Bond app to get the Bond Token, and you already know your Bridge IP address.

Does that help, or do you need more specific guidance? If so, please say which computer type (Windows, Mac, Linux, etc) you can use on the same network and we will go from there.

1 Like

Thank you so much. I am using windows 10 64bit. so curl-ing with command prompt.

I actually figured out the commandID. It happened to be 71dbeda7
I used one of your later commands to find it.
curl -H “BOND-Token: xxxxxxxxxxxxxxxx” -i
HTTP/1.1 200 OK
Content-Length: 233
Content-Type: application/json; charset=utf-8


But here’s what I get when i tried to change the name of ‘Reverse’ to ‘Oscillate’

curl -H “BOND-Token: xxxxxxxxxxxxxxxx” -X PATCH -d “{“name”:“Oscillate”,“action”:“ToggleDirection”}”
curl: (56) Recv failure: Connection was reset

Awesome work!

And yes, sadly, the handful of commands that give that error when attempting to update the name via PATCH’ing were annoying. I was really only able to get around it via some extra steps described in post #7.

Thanks again.

Is it a handful of commands that give that error or a lot of them do it?
Because considering the number of commands available, can I just pick the ones that doesn’t give this error and work on that?
Just to skip some steps in post#7.
I tried though to do a few and it seems all of them gives the same recv failure.

I also have a question about this step you have in post#2

curl -H “BOND-Token: xxxxxxxxxxxxxxxx” http://BONDBridgeID.local/v2/devices/newDeviceID/commands/currentCommandID -X PATCH -d “{“name”:“Blue Dot”,“action”:“SetDirection”}”

That part referencing the address of BONDBridgeID.local
is it supposed to be just the IP address or is it really the BOND ID ending with “.local”?

i.e. if it should be ttp://… or ttp://ZZDD36888.local/v2/devices…
(my bondID ZZDD36888)

I didn’t try all commands, I just went with things that seemed close to my mind, and then if I couldn’t rename existing button because I got the error, then since I had already done the work recording, it was easier for me to just duplicate to a new button.

Depending on your home network, you should be able to use the ZZxxxxxxxx.local to get to the same IP address. However, sometimes mDNS (the way the network resolves the .local name to the actual IP address) behaves inconsistently. So, if you know the IP address, just use that directly. :slightly_smiling_face:

I got the duplicate created and working according to your guidance, but at Step 5 of your Post#7 above, here is an error that I got, and the icon i tried deleting (Reverse) is still there.
Any idea what I could have done wrongly?

curl -H “BOND-Token: xxxxxxxxxxxxxxxx” -i -x DEL -d “{}”
curl: (5) Could not resolve proxy: DEL

I think I had to end up writing out DELETE vs using the DEL shorthand. Try that?
If that doesn’t work, I’ll recreate the step later this morning and get back to you.

Thanks, had try DELETE and it returns the same error.
curl: (5) Could not resolve proxy: DELETE

Thank you for your help in any case.

Hmm. Now I’ll have to check out how I did it before. :sweat_smile:

In the meantime, you SHOULD be able to remove the unnecessary buttons in the app, I believe? Through Device → Menu button → Edit commands?

i was considering removal thru the app too
But hesitated because unsure if that will also affect the duplicate i made.
It wouldn’t right? the duplicated button is there to stay regardless where it was duplicated from before?