Add Ember Cup BLE as a temperature device (TemperatureType.EMBER) - #1134
Open
danielfcurrie-alt wants to merge 2 commits into
Open
Add Ember Cup BLE as a temperature device (TemperatureType.EMBER)#1134danielfcurrie-alt wants to merge 2 commits into
danielfcurrie-alt wants to merge 2 commits into
Conversation
danielfcurrie-alt
force-pushed
the
ember-temperature-device
branch
3 times, most recently
from
June 16, 2026 12:42
6aa15c9 to
f0acb57
Compare
Subscribes to PUSH_EVENT (fc540012) and reads CURRENT_TEMPERATURE (fc540002) on event 5 (DRINK_TEMPERATURE_CHANGED). Overrides getBattery() to read from Ember's custom characteristic fc540007 (byte[0]=percent, byte[1]=charging). Verified on Android against a real Ember Cup 2 - shows up correctly in the bluetooth device scan, connects via the existing ble.autoConnect flow, and live temperature data renders in the brew graph during an espresso shot.
Fires a configurable HTTP GET request when the brew reaches a target weight, enabling a smart plug or relay to stop the machine automatically. Features: - Configurable URL with auth options (Bearer, Basic, Custom Header) - Default target weight pre-fills brew_beverage_quantity at brew start - Direct mode: fires exactly at target weight - Predictive mode: uses graphefruit's existing lag-learning algorithm to converge toward the correct yield across shots - webhookTargetWeight captured once at brew start to avoid live scale data overwriting brew_beverage_quantity mid-shot - buildWebhookHeaders() shared between settings test button and live trigger Verified on Android with Breville + Eureka Precisa scale + Shelly smart plug. Direct mode fires at target +-0.1g.
danielfcurrie-alt
force-pushed
the
ember-temperature-device
branch
from
June 16, 2026 12:47
f0acb57 to
b18ffe3
Compare
Owner
|
Hey there, Also please: Add a github issue, with the thermometer and a link which one is supported so this can be added on the official website. Best |
Author
|
Hi Lars, thanks for the feedback! Happy to merge before your bigger change.
I do have an iOS device (iPhone 16 Pro Max, iOS 26.5). One thing worth knowing: dev builds are currently crashing at startup on iOS 26.5 due to a WebContent sandbox issue — the App Store build works fine on the same device, so it appears to be entitlement-related. If you can build with Associated Domains, NFC, and iCloud entitlements included (e.g. via TestFlight or ad-hoc with those capabilities), it should work. Otherwise I did test the Android side (INT-11I-B confirmed working) and flag the others as unverified pending iOS.
I'll open a GitHub issue for the device list now.
Cheers,
…-Dan
On Jun 19, 2026, at 14:18, Lars Saalbach ***@***.***> wrote:
graphefruit
left a comment
(graphefruit/Beanconqueror#1134)
<#1134 (comment)>
Hey there,
thank you for the PR!
I'm going to push next week a bigger change on DEV, please merge this then before and maybe update the PR if needed.
Do you have an iOS Device to test or friends, I can build you a DEV version, adding a device without having the check if iOS and Android is working is not my intention.
Also please: Add a github issue, with the thermometer and a link which one is supported so this can be added on the official website.
Best
Lars
—
Reply to this email directly, view it on GitHub <#1134?email_source=notifications&email_token=B6CARR2B356Q2Z7Y3V5UJX35ATLMXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINZUHEYDANBYG43KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#issuecomment-4749004876>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/B6CARR7MO2VNLQZRCQF45UD5ATLMXAVCNFSNUABFKJSXA33TNF2G64TZHMYTANZZGQ2TEMZXHNEXG43VMU5TINRWGYYTIMJUHAZKC5QC>.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS <https://github.com/notifications/mobile/ios/B6CARRYLZ4QMNDNGU2KAL335ATLMXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINZUHEYDANBYG43KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2KUZTPN52GK4S7NFXXG> and Android <https://github.com/notifications/mobile/android/B6CARR2ZREOWVLQ5XQWSCK35ATLMXA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTINZUHEYDANBYG43KM4TFMFZW63VGMF2XI2DPOKSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>. Download it today!
You are receiving this because you authored the thread.
|
Owner
|
Can you pass me an e-mail: info@beanconqueror.com, so we can get in direct contact for the DEV-Build on iOS (or on Discord: Beanconqueror) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Beanconqueror — Ember Temperature Device + Target Brew Weight Webhook
Two independent features on one branch. Happy to split into separate PRs if preferred.
Overview
TemperatureDevicesupport for Ember devices (Mug 2, Cup 2, Travel Mug 2, etc.)1. Ember Temperature Device (
TemperatureType.EMBER)Adds
EmberThermometer(src/classes/devices/emberThermometer.ts) as a newTemperatureDevicesubclass, following the exact same pattern asBasicGrillThermometerandMeaterThermometer.Protocol
All characteristics are under one custom 128-bit service (
fc543622-236c-4c94-8fa9-944a3e5353fa):fc540002-236c-4c94-8fa9-944a3e5353faint16/ 100 = °Cfc540012-236c-4c94-8fa9-944a3e5353fa5=DRINK_TEMPERATURE_CHANGEDfc540007-236c-4c94-8fa9-944a3e5353fabyte[0]= battery % ·byte[1]= on charging baseSubscribes to
PUSH_EVENTnotifications and reads temperature only on event5.getBattery()is overridden because Ember does not expose the standard GATT Battery Service (180F/2A19).Sources & Validation
sopelj/python-ember-mug(actively maintained) andorlopau/ember-mugbleakPython prototype before porting tocordova-plugin-ble-centralTesting (Android — real hardware)
test()matches viadevice.name.toLowerCase().includes('ember')— covers all Ember models by nameble.autoConnectflowOpen items:
2. Target Brew Weight Webhook
Fires a configurable HTTP GET request when the brew reaches a target weight.
Settings UI
New card in Settings (after the Visualizer section):
brew_beverage_quantitywhen the brew modal openscalculateBrewByWeight()/calculateNextResidualLagTime()lag-learning algorithmhttp://Implementation Highlights
buildWebhookHeaders()extracted tosrc/classes/settings/brewByWeightWebhook.tsso the test button and live trigger share the same logicwebhookFiredflag is independent ofmachineStopScriptWasTriggeredto prevent re-arming after scale reconnects mid-shotbrew_beverage_quantitycannot be used as a stable threshold)Request Format
Currently issues a simple HTTP GET to the configured URL. No query parameters or body are sent by default.
Note: Some automation platforms prefer
POST+ JSON body. This is a known v1 limitation.Testing (Android — real hardware)
Verified with Breville Barista Express + SoloBarista scale + Shelly smart plug:
[Webhook BBW] Auto-adjusting lag from X to Y)Future: Add retry on webhook failure (error logging already implemented).
Platform Support