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")
@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