Skip to content

FrenchCommando/watch-me-buzz

Repository files navigation

WatchMeBuzz

A Garmin Connect IQ watch app that triggers a SwitchBot Bot from your wrist. No SwitchBot Hub required.

How it works

Garmin Watch → Phone (Garmin Connect app) → Internet → Your Domain (HTTPS)
  → Raspberry Pi (nginx + Python server) → Bluetooth → SwitchBot Bot

Press the button on your watch, and the SwitchBot Bot presses a physical button for you.

Components

source/ - Garmin Watch App (Monkey C)

Connect IQ app for Garmin watches. Sends an HTTPS request with an API key to your server when you press the watch button.

  • Target devices: FR55, Vivoactive 6
  • SDK: Connect IQ 8.4.1, minSdkVersion 3.0.0

pi/ - Raspberry Pi Server (Python + Docker)

HTTP server that receives requests from the watch and sends BLE press commands to the SwitchBot Bot. See pi/README.md for setup instructions.

Quick Start

  1. Pi: Edit pi/buzz_server.py with your Bot's BLE MAC and a secret API key, then docker compose up -d
  2. Domain: Point a domain at your Pi with HTTPS (nginx + certbot)
  3. Watch app: Edit source/SwitchBotApi.mc with your domain and API key, build, and sideload to your watch

Building the Watch App

monkeyc -d fr55 -f monkey.jungle -o watchmebuzz.prg -y developer_key.der -w

Or use run.bat (Windows) to build and launch the simulator.

Why sideload instead of the Connect IQ Store?

The app requires a server URL and API key to function. Connect IQ apps support user-configurable settings via the Garmin Connect phone app, and the codebase includes the settings UI (resources/settings.xml, resources/properties.xml). However:

  • Sideloaded apps can't use phone settings. The Garmin Connect app only shows settings for apps installed from the Connect IQ Store, not for .prg files copied to the watch via USB.
  • Store publishing requires beta testing. Uploading to the Connect IQ Store as a beta didn't surface the app reliably in the store search.
  • The app is personal. The server URL and API key are specific to your own Pi, so hardcoding them in source/SwitchBotApi.mc before building is the simplest approach.

If you publish to the Connect IQ Store, you can switch back to Properties.getValue() for runtime configuration (see the TODO comment in SwitchBotApi.mc).

Requirements

  • Garmin watch (FR55, Vivoactive 6, or similar)
  • Raspberry Pi with Bluetooth
  • SwitchBot Bot (password disabled)
  • Domain with HTTPS pointing to the Pi

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors