Tools
WattsUp

WattsUp

See the battery of your wireless mouse, keyboard and more in the menu bar and a widget.

Coming soon
Runs on
  • macOS
Status
Coming soon
Version
1.0
Needs
macOS 14 Sonoma or later
Source
Closed source
Built with
  • Swift
  • SwiftUI
  • WidgetKit
  • IOKit
  • CoreBluetooth
  • IOBluetooth
  • XcodeGen

The problem

My peripherals report their battery in different ways. Apple keyboards and mice use one method, AirPods use a second, and Bluetooth LE devices use a third. A mouse or keyboard on a USB 2.4 GHz receiver uses a method from its vendor. On a Mac, no single place showed all of them, and I wanted a warning before a battery goes empty.

What it does

WattsUp shows how much battery is left in your wireless mouse, keyboard, headphones and other devices, from the Mac menu bar.

  • Click the bolt icon to see each device, its battery percentage and a guess such as "~3 days left".
  • Show the lowest battery as a number next to the icon.
  • Rename a device, change its icon, or hide it.
  • Choose the theme, how often WattsUp checks, the level that counts as low, and start at login.
  • Add a widget in two sizes to your desktop or to Notification Center.
  • Get one notification when a battery becomes low.
  • See "N/A" when WattsUp finds a device but cannot read its battery.
The WattsUp menu shows the connected devices and their battery levels.

Decisions & trade-offs

Private Bluetooth keys, read with care. I read the AirPods battery through private macOS keys, and I check each key before I read it. You get AirPods battery levels, and a future macOS cannot crash the app. A macOS update can remove AirPods support at any time.

Vendor commands only for vendor hardware. I send a vendor command only to devices from that vendor. Your other USB devices never get commands that were made for a different brand. Each new brand needs new code before WattsUp can show its battery.

No battery is better than a wrong battery. I removed a dongle read that showed a constant, wrong 93% for my Gravastar keyboard. You see "N/A" instead of a false value. That keyboard shows no battery over the dongle, but it shows the correct value over Bluetooth.

Input Monitoring for dongles. WattsUp asks for the macOS Input Monitoring permission one time at each launch, and the dropdown tells you why. Without this permission, the app cannot read the battery from USB receivers. The permission looks alarming for a battery app, but no other method can read the receiver.

One notification for each discharge. I send one warning when a device goes below the threshold, not one on each refresh. A restart of the app does not repeat the warning. A device can warn again only after it charges or goes 5 points above the threshold.

What's next

  • Get an Apple Developer account and real code signing, so I can share WattsUp. Without it, the widget does not always get its data.
  • Add support for USB receivers from more gaming brands.

Some receivers, such as my Gravastar receiver, do not send the battery over 2.4 GHz, and the Mac cannot fix that. A device also shows only while it is connected and awake.

Powered by codifyit.dev (opens in a new tab)