Skip to content

Instantly share code, notes, and snippets.

@fffonion
Created September 28, 2019 22:32
Show Gist options
  • Save fffonion/d4960503ff6782640286163d47a30080 to your computer and use it in GitHub Desktop.
Save fffonion/d4960503ff6782640286163d47a30080 to your computer and use it in GitHub Desktop.
Setting up dash button without Amazon App
import requests
import re
import sys
# Initial work from: https://mpetroff.net/2016/07/new-amazon-dash-button-teardown-jk29lp/
h = requests.Session()
BASE_URL = "http://192.168.0.1"
def wait_for_device():
print("* Long press the dash button until LED light blinks in blue")
print("* Connect to Wifi with SSID \"Amazon ConfigureMe\"")
print("* Waiting for connection...")
while True:
try:
r = h.get(BASE_URL, timeout=1)
if 'Amazon Dash' in r.content:
break
except:
pass
else:
break
print("+ Connected!")
content = r.content
serial = re.findall('Serial Number</th>[^/]+>([A-Z0-9_]+)</td', content, re.DOTALL)[0]
mac = re.findall('MAC Address</th>[^/]+>([A-Z0-9_]+)</td', content, re.DOTALL)[0]
firmware = re.findall('Firmware</th>[^/]+>([A-Z0-9_]+)</td', content, re.DOTALL)[0]
battery = re.findall('Battery</th>[^/]+>([A-Z0-9_]+)</td', content, re.DOTALL)[0]
print("* Serial: %s, MAC: %s, Firmware: %s, Battery: %s" % (serial, mac, firmware, battery))
return mac
def configure_wifi(ssid, password):
print("* Configure Dash button to connect to \"%s\"" % ssid)
# is the ssid in range ?
r = h.get(BASE_URL, headers={'Content-Type': 'application/json'}, timeout=5)
amzn_networks = r.json()['amzn_networks']
found = False
for amzn_network in amzn_networks:
if amzn_network['ssid'] == ssid:
found = True
break
if not found:
print("- SSID %s is not discoverable by Dash button" % ssid)
return
print("%s/?amzn_ssid=%s&amzn_pw=%s" % (BASE_URL, ssid, password))
r = h.get("%s/?amzn_ssid=%s&amzn_pw=%s" % (BASE_URL, ssid, password), timeout=5)
if r.status_code == 200:
print("+ Dash button configured!")
return True
if __name__ == '__main__':
if len(sys.argv) < 3:
print("Usage: setup.py WIFI_SSID WIFI_PASSWORD")
sys.exit(1)
try:
wait_for_device()
configure_wifi(sys.argv[1], sys.argv[2])
except KeyboardInterrupt:
print("Bye")
@mattia2007
Copy link

so i can’t use them anymore?

@sangohandbz
Copy link

@mattia2007

so i can’t use them anymore?

Unfortunely if your button does not work with this script and/or the audio exploit you are out of luck. (see @ALL below for further info if not already done)

@mattia2007

hey so what i can do with my dash buttons? i want to connect them to hassio for switch on or off a light. can someone help me?

For your automation purposes you could buy some zigbee button (konke, xiaomi aquara, ...) and a usb/wifi/... zigbee bridge (like zigate, ...) see zha module compatibility list in the home assistant site (https://www.home-assistant.io/integrations/zha). It will probably be more expensive but reliable.

@ALL
If the script hangs :

  1. Replace r.content by r.content.decode('utf-8')
  2. If still doesn't work see sidoh's blog post for further reference on setting https://blog.christophermullins.com/2019/12/20/rescue-your-amazon-dash-buttons/
  3. If it still won't work : welcome to planned obsolecence !

@mattia2007
Copy link

mattia2007 commented Apr 2, 2020

hey, i've retested and for one works but i forgot to blacklist it is there a way to resolve?

@mattia2007
Copy link

what i do then?
Senza titolo

@corv45
Copy link

corv45 commented Apr 4, 2020

bonjour je n'arrive pas a détermine ou je dois rentre le ssid et le pass dans le script merci

@sangohandbz
Copy link

sangohandbz commented Apr 4, 2020

bonjour je n'arrive pas a détermine ou je dois rentre le ssid et le pass dans le script merci

-1. Pense a récupérer l'adresse MAC du bouton cf. messages précédent et/ou le post sur le blog de sidoh (connexion au wifi amazon configure me et consulter le site 192.168.0.1 avec ton navigateur).
0. Blacklist l'accès à internet de ton bouton en utilisant son adresse MAC dans ton routeur

  1. Installe Python3.xx
  2. Modifie les lignes contenant r.content cf. messages précédents
  3. Ouvre le python shell
  4. Navigue dans le dossier de ton script
  5. Tappe setup.py "Ton SSID" "Ton pass" après les 3 chevrons (les " sont particulièrement important si ton SSID et/ou ton PASS contiennent des espaces)

@Jackie78De
Copy link

Hi,

my Dash button (Firmware 60019520_EU) suddenly doesn't work anymore, from one day to the next it only lights up a blue light for about 10 seconds, and then flashes red. I doubt it was bricked by Amazon, because I use this button in the local intranet only to control some smart home devices, my Router does not allow the device to communicate with the internet. So I am not sure what actually bricked it.

The audio-hack didn't work, and also trying to access http://192.168.0.1/?amzn_ssid=SSID&amzn_pw=PASSWORD does not do anything at all, in fact, nothing happens in the browser when I call that URL.

When I access only http://192.168.0.1/, i can at least get the firmware version and MAC, serial, battery status, but that's all.

So my questions are:

1.) How could the device have become bricked? It has no internet access
2.) Is there any chance to unbrick?

Thanks!

@sangohandbz
Copy link

Hi,

my Dash button (Firmware 60019520_EU) suddenly doesn't work anymore, from one day to the next it only lights up a blue light for about 10 seconds, and then flashes red. I doubt it was bricked by Amazon, because I use this button in the local intranet only to control some smart home devices, my Router does not allow the device to communicate with the internet. So I am not sure what actually bricked it.

The audio-hack didn't work, and also trying to access http://192.168.0.1/?amzn_ssid=SSID&amzn_pw=PASSWORD does not do anything at all, in fact, nothing happens in the browser when I call that URL.

When I access only http://192.168.0.1/, i can at least get the firmware version and MAC, serial, battery status, but that's all.

So my questions are:

1.) How could the device have become bricked? It has no internet access
2.) Is there any chance to unbrick?

Thanks!

Hello.

My best bet is low battery.
Check the battery percentage in the webUI. The firmware erases the customer secret when the battery becomes to low (don't know the exact value). As the device is suposed to be trashed when it runs out if battery this is probably a safety feature to preserve your amazon account and wifi credential. From there if the audio hack doesn't work : there is no known recovery ...

To avoid this issue you have to swap the battery before it reaches the threshold -> that isnt causing a reset because the device isn't powered between press to save power.

@bummzulu
Copy link

I am a total noob with Python and faced similar issues as others here but finally it worked!

Firmware Version: 60019520_EU

On a windows machine I did the following:

  • Install Python

Then open a Windows cmd line and go to the path of your python installation. Example:
C:\Users\user\AppData\Local\Programs\Python\Python38-32\

  • install "requests" there:
    python -m pip install requests or py -m pip install requests

Save the script from above as py file at this path under the name "setup.py". In the script replace the
r.content with r.content.decode('utf-8') in line 18 and line 25.

in the windows cmd line run the programm by
image

@mhellmeier
Copy link

I´ve installed old amazon app apk version 18.4.0.100 wich has still the function to add new dash buttons.

I just tried the mentioned App version in the German region but no Dash menus or settings are visible to add a new button.

@Rothammel
Copy link

  • Long press the dash button until LED light blinks in blue
  • Connect to Wifi with SSID "Amazon ConfigureMe"
  • Waiting for connection...
  • Connected!
    Traceback (most recent call last):
    File "D:\setup-dashbutton.py", line 60, in
    wait_for_device()
    File "D:\setup-dashbutton.py", line 26, in wait_for_device
    serial = re.findall('Serial Number[^/]+>([A-Z0-9_]+)</td', content, re.DOTALL)[0]
    File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2800.0_x64__qbz5n2kfra8p0\lib\re.py", line 240, in findall
    return _compile(pattern, flags).findall(string)
    TypeError: cannot use a string pattern on a bytes-like object

@elysweyr
Copy link

elysweyr commented May 5, 2023

File "D:\setup-dashbutton.py", line 26, in wait_for_device

You may need to append .decode('utf-8') to line 25.

@elysweyr
Copy link

elysweyr commented May 5, 2023

I am on FW version 60019520_EU and it worked.
The problem in my case was that I had to url encode the SSID and password because it contained spaces and special characters.

Note: Don't forget to block internet access for your dash buttons otherwise they will get an OTA update and brick themselves.

Seems like my button is connection to the wireless network but isn't able to acquire a DHCP lease - odd.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment