Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

behmor-rescue

Get an orphaned Behmor Connected Brewer back onto your Wi-Fi after the official app and its servers were shut down — without the app, without an account, without the cloud.

The Behmor Connected (and the Char-Broil SmartChef grills) used a cloud IoT platform from DADO Labs, which no longer exists. The app can't log in, so it can't push your Wi-Fi to the brewer, so a power-cycled brewer just sits there blinking. This repo talks to the brewer's local setup interface directly and provisions it.

Illustrated guide: https://garalex.github.io/behmor-rescue/ — the same walkthrough with the DADO light states and the exact handshake, for owners who'd rather read than run code.

Status: provisioning works and is the reason this exists. Remote brew control does not — it ran through the dead cloud. See What you can and can't do and PROTOCOL.md for the full story.

Tested on macOS (Apple Silicon), Python 3.9+ (standard library only — no pip install).


Quick start (macOS)

# 1. Put in your home Wi-Fi (2.4 GHz-capable SSID, WPA/WPA2, 8-64 char password)
cp wifi.env.example wifi.env
chmod 600 wifi.env
$EDITOR wifi.env            # set SSID= and PASS=

# 2. Press the DADO button on the brewer so its light blinks ~once per second.
#    (The setup radio sleeps after ~5 min; the button wakes it.)

# 3. Run the one-shot provisioner. It temporarily joins the brewer's "DADO"
#    hotspot, sends your credentials, then restores your normal Wi-Fi.
#    Your Mac's internet drops for ~30 seconds while it's on the DADO network.
./tools/provision_dado.sh

When it finishes, the brewer leaves the DADO network, joins yours, and the DADO light goes solid (no longer blinking). That's the goal: it's back on your network.

If your Mac is Wi-Fi only

provision_dado.sh switches the Wi-Fi to DADO and back for you. If it can't (some setups), do it by hand:

# join "DADO" from the macOS Wi-Fi menu (it's an open network), then:
python3 tools/provision.py wifi.env
# then rejoin your home Wi-Fi from the menu

On Linux/Windows the provision.py step is identical once you're joined to DADO; only the automatic network-switching wrapper is macOS-specific.


What you can and can't do

The Behmor app historically let you, all via the DADO cloud:

  • brew now — set cups, water temperature (190–210 °F), grind/roast style, pre-soak (bloom) time
  • schedule / delay a brew — yes, morning-coffee scheduling
  • stop or cancel a brew
  • run a clean cycle, run calibration, keep-warm
  • save favorites and quick-start presets, pull roaster "Buzz" profiles
  • auto-reorder coffee via Amazon Dash, take firmware updates, see live status

Today, with the cloud gone, only provisioning works. Once the brewer is on your Wi-Fi it exposes no local control port (verified by port-scanning: :9760 refuses connections in normal mode, nothing on 80/443), because all of the above was relayed through DADO's servers. So this toolkit gets your brewer connected and usable from its own front panel, but it cannot (yet) start a brew over the network. The path that could — impersonating the DADO cloud on your LAN — is described at the end of PROTOCOL.md; it isn't built here.

Practically: the brewer's physical Start/Stop button still brews with the last settings. Provisioning mainly buys you a non-blinking light and a device that's ready for any future local-cloud project.


Tools

File What it does
tools/provision_dado.sh Main entry point (macOS). Joins DADO, provisions from wifi.env, restores your Wi-Fi, then looks for the brewer on your LAN.
tools/provision.py The pure provisioning step. Run it while joined to DADO. Sends SSID/PASS/SEC/DHCP/SAVE and prints each ACK/REJ/RSSI.
tools/discover.py Broadcasts "D" to UDP 30303 and prints any brewer that answers (ip, product key).
tools/brewer_ws.py Opens ws://<ip>:9760 and speaks the mbCORE framing (for experimentation / firmware-era messages).
tools/wsclient.py Tiny dependency-free RFC-6455 WebSocket client used by the above.
tools/tcpscan.py Async TCP port scanner, used to characterize the brewer on the LAN.

provision.py reads wifi.env (default ~/src/behmor/wifi.env, or pass a path) so your password never appears in shell history or process listings. wifi.env is git-ignored.


How it works (short version)

  1. An unprovisioned brewer broadcasts an open Wi-Fi network called DADO and runs a WebSocket server at ws://192.168.1.1:9760.
  2. You join DADO; the tool sends five JSON frames — SSID, PASS, SEC, DHCP, then SAVE — and the brewer ACKs each.
  3. The brewer saves the credentials, joins your network, and the DADO light goes solid.

Full frame-by-frame details, the cloud API it used to use, and the hardware are in PROTOCOL.md.


Safety / privacy notes

  • wifi.env holds your Wi-Fi password in plaintext; it is git-ignored and should stay chmod 600. Never commit it.
  • The tools only talk to the brewer on your own LAN and to the brewer's own setup AP. Nothing is sent to any third party.
  • This is unofficial, community-made, and not affiliated with Behmor or DADO Labs.

Credits

Protocol recovered by decompiling the last public build of the official com.dadolabs.behmor app. See PROTOCOL.md for method and specifics.

About

Behmor Connected blinks without wifi - what to do

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages