Skip to main content

Python Library for Ember Mugs.

Project description

Python Ember Mug

pypi python Build Status codecov Project Maintenance Maintainer License pre-commit

Python Library for interacting with Ember Mugs, Cups and Travel Mugs via Bluetooth

Summary

This is an unofficial library to attempt to interact with Ember Mugs via Bluetooth. This was created for use with my Home Assistant integration, but could be useful separately and has a simple CLI interface too.

All known Ember Mugs, Cups and Travel Mugs have been tested and work. If I missed one, or you have new feature ideas/issues, please let me know.

Device Tested
Mug
Mug 2
Cup
Travel Mug
Travel Mug 2

Features

  • Finding devices
  • Connecting to devices
  • Reading/Writing most values
  • Poll for changes

Attributes by device:

Attribute Mug Cup Travel Mug Description
Name R/W N/A R Name to give device
LED Colour R/W R/W N/A Colour of front LED
Current Temperature R R R Current temperature of the liquid in the mug
Target Temperature R/W R/W R/W Desired temperature for the liquid
Temperature Unit R/W R/W R/W Internal temperature unit for the app (C/F)
Liquid Level R R R Approximate level of the liquid in the device
Volume level N/A N/A R/W Volume of the button press beep
Battery Percent R R R Current battery level
On Charger R R R Device is on it's charger

*** Writing may only work if the devices has been set up in the app previously

Usage

Python

from ember_mug.scanner import find_mug, discover_mugs
from ember_mug.mug import EmberMug

# if first time with mug in pairing
mugs = await discover_mugs()
device = mugs[0]
# after paired you can simply use
device = await find_mug()
mug = EmberMug(device)
await mug.update_all()
print(mug.data.formatted)
await mug.disconnect()

# You can also use connection as a context manager
# if you want to ensure connection before starting and cleanup on exit
async with mug.connection():
    print('Connected.\nFetching Info')
    await mug.update_all()
    print(mug.data.formatted)

CLI

It can also be run via command line either directly with ember-mug --help or as a module with python -m ember_mug --help There are four options with different subsections. You can see them by specifying them before help. eg ember-mug poll --help

ember-mug discover  # Finds the mug in pairing mode for the first time
ember-mug poll  # fetches info and keeps listening for notifications
ember-mug get name target-temp  # Prints name and target temp of mug
ember-mug set --name "My mug" --target-temp 56.8  # Sets the name and target temp to specified values

Basic options:

Command Use
discover Find/List all detected unpaired devices in pairing mode
find Find one already paired devices
info Connect to one device and print its current state
poll Connect to one device and print its current state and keep watching for changes
get Get the value(s) of one or more attribute(s) by name
set Set one or more values on the device

CLI Example

Caveats

  • Since this api is not public, a lot of guesswork and reverse engineering is involved, so it's not perfect.
  • If the device has not been set up in the app since it was reset, writing is not allowed. I don't know what they set in the app, but it changes something, and it doesn't work without it.
  • Once that device has been set up in the app, you should ideally forget the device or at least turn off bluetooth whilst using it here, or you will probably get disconnected often
  • I haven't figured out some attributes like udsk, dsk, location and timezone, but they are not very useful anyway.

Troubleshooting

'Operation failed with ATT error: 0x0e' or another connection error

This seems to be caused by the bluetooth adaptor being in some sort of passive mode. I have not yet figured out how to wake it programmatically so sadly, you need to manually open bluetoothctl to do so. Please ensure the device is in pairing mode (ie the light is flashing blue or says "PAIR") and run the bluetoothctl command. You don't need to type anything. run it and wait until the mug connects.

Development

Install:

pip install hatch
# Use CLI interface
hatch run ember-mug --help
# Run Tests
hatch run test:cov
# View docs
hatch docs:serve
# Lint code
pre-commit run --all-files

Credits

This package was created with Cookiecutter and the waynerv/cookiecutter-pypackage project template.

Notice of Non-Affiliation and Disclaimer

This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with Ember.

The name Ember as well as related names, marks, emblems and images are registered trademarks of their respective owners.

Project details


Release history Release notifications | RSS feed

This version

0.8.3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_ember_mug-0.8.3.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

python_ember_mug-0.8.3-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file python_ember_mug-0.8.3.tar.gz.

File metadata

  • Download URL: python_ember_mug-0.8.3.tar.gz
  • Upload date:
  • Size: 27.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.0

File hashes

Hashes for python_ember_mug-0.8.3.tar.gz
Algorithm Hash digest
SHA256 9f062bb2e3891776f498823557cc4d565a91af01a07f4de2bc873da20aadecfd
MD5 73569ff5da908337bf77108a4d09c01f
BLAKE2b-256 290a91a9e02bb373ab6524b3fc5f35221d2da376f6b15ab39d3dc2cffec616b0

See more details on using hashes here.

File details

Details for the file python_ember_mug-0.8.3-py3-none-any.whl.

File metadata

File hashes

Hashes for python_ember_mug-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4c2d5d1a2007c64ac10b995e96ac81f73a67d8b3a83743b5df639e1a6a470211
MD5 3b1bfea7835462434cfdcbcaebb4315e
BLAKE2b-256 f551d9aafe1edf3bfeb1982b5baa6c9e2da6e6f927c0fbedf2a322d88034aceb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page