MyKronoz shut down: their website is offline and both official Android apps hard‑require a login call to a backend that no longer exists, so neither can pair with a watch anymore — even though the watch itself still works fine. We don't offer a phone app — most people will still want one, and building one is a real undertaking we haven't done. What we offer is the foundation for it: the watch's Bluetooth protocol, fully reverse‑engineered and documented, plus a working Python client and CLI that proves every piece of it against real hardware. Use it directly from a computer today, or build the mobile app on top of it.
Every feature of a ZeTime — notifications, alarms, activity history, watchface uploads — normally goes through MyKronoz's own Android app, which itself needs a live server that MyKronoz has since taken offline. That leaves every ZeTime owner with hardware that still works perfectly but no supported way to actually use it. This project reconstructs the watch's own Bluetooth protocol so that's no longer true — but it's worth being precise about what's actually being handed to you.
Battery level, serial number, firmware/hardware version. Full step, sleep, and heart‑rate history, with the paging logic that reliably pulls every stored record.
Push SMS, missed/incoming/ended calls, social, email, calendar, and message‑with‑sender notifications — one command at a time, not automatic forwarding of this machine's own notifications.
Create, edit, list, and genuinely delete alarms and reminders — including the slot‑freeing delete trick this project found, not just a hide‑in‑place workaround.
Full CRUD for the canned reply text offered on an SMS/social notification — confirmed to actually populate the watch's own on‑screen reply menu.
Language, units, volume, brightness, snooze, text size, wrist, and do‑not‑disturb are all live‑confirmed. Goals, per‑event vibration style, and physical button remapping are implemented but not yet tested against real hardware.
Push calendar events and clear the calendar; push weather (also the only way to clear a stuck/stale location on the watch face).
Upload any photo as a real custom watchface — the full transfer, confirmed end‑to‑end on real hardware, not just negotiated. Place live widgets (date, battery, heart‑rate, steps, and more) directly on top of the image, and switch between already‑installed faces without re‑uploading anything.
zetime shell keeps one connection open across many commands; zetime listen prints watch‑initiated events (music control, camera remote, quick‑reply, SOS) as they happen.
Requires Python 3.10+, a Bluetooth adapter, and (developed and tested against) Linux/BlueZ — other bleak-supported platforms should mostly work with minor adjustments.
Download the archive, unzip it, then:
cd zetime-python-client
python3 -m venv .venv
./.venv/bin/pip install -e ".[dev]"
Once, using your system's Bluetooth tools (e.g. bluetoothctl): scan, pair, trust, connect. It stays bonded after that — you won't need to re‑pair each session.
export ZETIME_ADDRESS=XX:XX:XX:XX:XX:XX (or pass --address on every command), then start running commands. The CLI reconnects automatically and prints a status line if it has to fall back to scanning, so a slow connection never looks like a silent hang.
A representative slice — add --json to any data command for machine‑readable output.
zetime battery # -> "81%"
zetime info # serial number, firmware/hardware version
zetime set-time # push the current time to the watch
zetime steps / sleep / heart-rate # activity history
zetime settings get/set volume 75
zetime user-info set --sex female --age 30 --height 170 --weight 62.5
zetime notify sms "hello there"
zetime notify social whatsapp "New chat"
zetime notify message whatsapp "Meeting moved" "See you at 3pm instead"
zetime calendar clear
zetime alarm create --hour 7 --minute 30 --cycle 127
zetime alarm delete --hour 7 --minute 30 --cycle 127
zetime quick-reply add "On my way"
zetime watchface prepare photo.jpg # offline preview, no watch needed
zetime watchface upload photo.jpg --date-pos 85,15 --battery-pos 180,15
zetime watchface switch other-photo.jpg # jump to an already-installed face, no re-upload
zetime watchface delete --all
zetime dnd set --start-hour 22 --start-minute 0 --end-hour 7 --end-minute 0
zetime button set up alarm
zetime goals set step 10000
zetime shell # one connection, many commands
zetime listen # print watch-initiated events
zetime debug gatt-dump # list all GATT services/characteristics
The full library and CLI (src/zetime), its test suite, and the complete protocol documentation — everything needed to install and run it, or to read and extend it.
A handful of opcodes are genuinely destructive (factory reset, wiping historical data) or unconfirmed on real hardware, and are flagged as such throughout the code and the reference. Check a command's own status marker (✅ live-confirmed, ⚠️ unconfirmed, ❌ destructive) before scripting anything unattended.
Everything the client is built on is documented separately from the code, in two forms — pick whichever matches what you're doing:
A narrative walkthrough of the protocol — transport, framing, notable payloads, and the current state of trickier features like custom watchfaces. Start here if you're deciding whether to build on this.
Read the overview →Every opcode, every payload byte, every caveat — a full static rendering of the project's protocol documentation, no summarizing. Point an AI coding agent at this URL directly if you're building a client of your own.
Read the full reference →This is interoperability work on hardware its owner bought, for a vendor that no longer offers any way to use it. No MyKronoz servers or accounts are involved, and no copyrighted assets are redistributed — only protocol knowledge and original code, published so other ZeTime owners can keep using hardware they already paid for.