We taught an Apple Watch to notice vaping. Here is how.
Inside Vape Sense™ (BETA), the ExHale feature that notices vape sessions from wrist motion alone: the physics, the simulated arms, the thresholds and the privacy calls behind it.
3:10pm. A desk, a half-written email, a vape in your left hand. The hand rises, pauses at your mouth for two seconds and drops back to the keyboard. You don't notice. Forty seconds later it happens again, and then again. Your watch notices. Not the vapor, not the sound, not where you are: just the arc of a forearm against gravity. A little later, it taps your wrist.
That card is Vape Sense™ (BETA), the Apple Watch vape detection we built into ExHale, the quit vaping app where every puff costs your pixel buddy a little HP. It doesn't log anything on its own. It suggests. You answer.
This is the story of how we taught a watch to notice a gesture that is practically designed to go unnoticed: the physics, the simulated arms, the thresholds, the trade-offs and the privacy calls. It is also, honestly, a story about what we don't know yet.
- Accelerometer, recorded in the background
- 50 Hz
- Between background checks
- ~15 min
- Microphones, cameras or GPS used
- 0
- Decide what gets logged
- You
Why vaping is so hard to track#
Cigarettes come with a ritual. You buy a pack, step outside, light up, and it burns down to nothing. Every step is a timestamp. Vaping erased all of them. There is no lighter and no ash, and there is no natural end. The device lives in a pocket or a fist all day, and a session just keeps going. In one study, vaping sessions averaged about 58 puffs over roughly 18 minutes, against about 17 puffs over 5 minutes for a cigarette.1
So most people who vape have only a rough idea of how much they vape. And every vape tracker we found on the App Store (as of our research in September 2026) relies on you tapping a button for each puff. Manual logging works, for a while. It also asks you to stay perfectly mindful of a habit that thrives on mindlessness.
Researchers have chased the automatic version for over a decade, for cigarettes. Wrist-worn motion sensors have recognised smoking gestures in the lab with F1 scores between 0.84 and 0.98: RisQ in 2014,2 puffMarker in 2015,3 PACT in 20194 and Sense2Quit in 2025, which scored 0.975 when its model was trained on look-alike gestures such as eating and drinking, and 0.67 without them.5 Outside the lab the numbers sag. PACT's 98% in the lab became 84.9% agreement with people's own counts in free living.4
For vaping, detected from the wrist, we found no published papers at all. Just one registered trial.6 There was no recipe to copy. There was a platform with rules, a body with physics, and a question: what can a watch honestly see?
What watchOS lets a vape tracker sense#
Less than you would think. An Apple Watch is packed with sensors, but an App Store app gets a narrow, carefully guarded slice of them, especially while it isn't on screen. For a vape tracker, that is always.
Live motion stops when the app sleeps
CMMotionManager, the API that streams live accelerometer and gyroscope readings, stops delivering when the app is suspended.7 The well-known workaround is a workout session, which keeps an app alive. But an Apple engineer has said plainly that using one for something that isn't a workout is not a valid use case.8 A workout session also fills your Activity rings whether you exercised or not,9 and it drains the battery. We were not going to fake a workout on your wrist all day.
CMSensorRecorder, the quiet recorder
What watchOS does offer is CMSensorRecorder. Ask, and the system records the accelerometer in the background at a fixed 50 Hz, for up to 12 hours per request (we re-arm it), and keeps the data for about three days.10 The app doesn't need to be running while it records. The catch: accelerometer only, no gyroscope.11 And you can only read the recording when the system gives your app some time, which on watchOS means a background refresh roughly every 15 minutes.12
What about heart rate?
Heart rate looked tempting. It isn't. Raw optical (PPG) data is not available to third-party apps; only approved research studies get it.13 And nicotine nudges heart rate by only about 4 to 5 beats per minute, over minutes,14 a change easily lost behind a flight of stairs or a stressful message.
The design the platform forced
Those limits wrote most of our spec for us:
- Motion only. Accelerometer data from
CMSensorRecorder, nothing else. The only permission is Motion & Fitness. No HealthKit. - Batches, not live. Each background refresh (about every 15 minutes) reads what was recorded since the last one and analyses it in one pass.
- Sessions, not single puffs. One hand-to-mouth gesture is ambiguous. A cluster of them, minutes apart, is a pattern.
- Suggest, never auto-log. The watch proposes a session. You confirm it, adjust the count, or say it wasn't you.
That last rule has a price: a suggestion can arrive up to about 15 minutes after the fact. We decided it was worth paying, and we'll come back to why.
A watch can't see the vape. It can feel your forearm turn against gravity, and that turns out to be enough to start.
How Apple Watch vape detection works: gravity is the sensor#
Here is the trick at the heart of Vape Sense. An accelerometer at rest doesn't read zero. It reads gravity: a steady 1 g, split across the watch's three axes depending on how the watch is tilted. Hold your wrist flat and gravity sits mostly on one axis. Tilt it and gravity slides onto the others. A watch, in other words, is a very good spirit level strapped to your forearm.
Core Motion describes the watch with three axes tied to the case: +x points out of the crown side, +y toward 12 o'clock and +z out of the screen. At rest, an axis reads about -1 g when it points straight up and about +1 g when it points straight down. Because the watch sits across your wrist, its x axis runs along your forearm. So the x reading says how steeply your forearm is tilted, which is the one number a hand-to-mouth gesture can't hide. Earlier smartwatch smoking studies reached the same place from the data side: an accelerometer alone can recognise hand-to-mouth smoking gestures,15 and the axis along the forearm carries most of the signal.16
A 3D pixel forearm: how wrist tilt moves gravity between the watch's axes
Accelerometer (g)
Elevation seen
9°
threshold 35° / exits below 30°
Last lift: none yet
Detector view elevation 9° | above 35°: no | still: yes | hold 0.0 s
First, separate gravity from motion. Vape Sense runs a low-pass filter over each axis with a time constant of 0.3 seconds. Quick hand movements get smoothed away, and the slow, steady pull of gravity stays. Whatever is left over is motion.
Then turn gravity's share on the x axis into an angle:
The minus sign is there because an axis reads negative when it points up. The result is the forearm's elevation in degrees above horizontal. Hand at the mouth: about +40 to +80. Forearm on a desk: about 0. Arm hanging at your side: about -60 to -90.
The wrist sign problem
The catch is s, which is either +1 or -1. Whether +x points toward your hand or your elbow depends on which wrist the watch is on and which side its crown faces. Left wrist with the crown on the right, or right wrist with the crown on the left: the crown points toward the hand, and s is +1. The other two combinations flip it to -1. Get it wrong and a hanging arm looks like a raised one. Every walk to the kitchen becomes a vape session.
The watch knows its own wrist and crown setting, so Vape Sense starts there. But we didn't want to bet everything on a lookup table, so the detector also checks its work by watching you walk. When you walk, your arm hangs and swings. Every 2-second window that looks like walking (steady rhythmic motion, forearm near vertical) votes for the sign that makes the forearm point down. After 2 minutes of evidence with a 70% majority, the votes override the setting. Evidence is capped at an hour, so old votes fade and a change gets picked up. Brushing your teeth votes the wrong way: arm up, rhythmic. Walking outweighs it.
Counting vape puffs from the wrist#
Now picture a puff from the watch's point of view. Elevation climbs as the hand rises. It plateaus while the hand is at the mouth, and here is the tell: the hand goes still. Not perfectly still, but calmer than almost anything else your arm does at that height. Then elevation falls away. RisQ saw the same signature in cigarette smokers a decade ago: a quick change of orientation, then a long pause.2
What a vape puff looks like to an Apple Watch accelerometer
Loading the sensor trace_
Vape Sense calls that shape a lift, and a lift has strict rules:
- Elevation rises above a threshold, 35 degrees by default.
- It stays up for between 0.6 and 8 seconds.
- During that hold, the hand is calm: average motion |a - g| of 0.3 g or less, ignoring the first and last quarter second, when the hand is still arriving and leaving.
- It ends when elevation drops 5 degrees below the threshold. That hysteresis stops a hand hovering at the line from counting twice.
Two housekeeping rules keep the math honest. No lift may start in the first 2 seconds of a slice of data, while the gravity filter warms up. And a gap of more than a second in the data resets the filter instead of letting it guess.
Rules alone are brittle, so every lift that passes them also earns a score from 0 to 1:
Each factor is a small, readable curve. hold is 0.1 at the minimum hold, rises quadratically to 1 at 2 seconds, stays at 1 up to 5 seconds and slides to 0.5 at the 8-second limit. still is 1 when the hand moves 0.06 g or less, and 0 at 0.3 g. elev is 0.6 right at the threshold, 1 from 10 degrees above it up to 80 degrees, and back down to 0.6 at 90, an arm pointing straight at the ceiling.
Scoring a hand-to-mouth gesture: hold, stillness and elevation
The quadratic is deliberate. A bite of food is a real hand-to-mouth gesture, but a short one: under a second at the mouth. Squaring the ramp keeps those brief touches low. At the other end, a phone call or a long look at the watch holds the arm up far longer than a puff, past the 8-second limit, and is turned down outright. The puff lives in the middle: a few seconds, high, still.
From hand-to-mouth gestures to vape sessions#
One lift proves very little. You scratch your nose, sip a coffee, push your glasses up. What vaping has, and most other gestures lack, is repetition: the same arc, again and again, over minutes.
So Vape Sense groups lifts. Lifts less than 5 minutes apart join one cluster. A cluster closes 5 minutes after its last lift and becomes a session if it holds at least 3 lifts (the default). The estimated puff count is simply the number of lifts, kept between 1 and 40. Each session also carries a confidence:
Here extra is how many lifts the cluster has beyond the minimum. A session that just scrapes in gets 0.7 of its mean score; each extra lift adds 0.1, up to the full score.
The Vape Sense pipeline, from wrist motion to a suggestion you answer
One more piece of engineering never shows up in a notification. Each background run reads the new recorder data plus a 30-second overlap with the previous run, so a lift that straddles the boundary isn't cut in half. A lift seen twice is merged when the two peaks fall within 1.5 seconds. The result is a property we test directly: feeding the detector a day in many slices gives exactly the same lifts as one long pass.
Building a virtual arm to test smartwatch gesture detection#
Here is an awkward truth about building a detector for a behaviour nobody has studied: there is no dataset. No public collection of labelled Apple Watch accelerometer traces of people vaping. Recording our own takes time, consent and volunteers, and it is the plan (more on that below). But we wanted to test every rule above long before then. So we built an arm.
VapeSenseSynthetic is a small physics model of a forearm. It has two angles: elevation e, its tilt above horizontal, and roll r, its twist around its own axis. In the arm's frame, with x running from elbow to hand, "up" is this vector:
For every 50 Hz sample, each axis reads minus its share of up, plus whatever linear acceleration the current move adds, plus a little Gaussian noise. Set s to -1 and the watch turns 180 degrees on the wrist: crown toward the elbow, x and y reversed. Moves follow a smooth cosine ease with a bump of acceleration. Holds wobble gently at 0.3 Hz, because nobody's hand is a tripod.
On top of the arm sit scenarios, each a little script from an ordinary day:
- Resting: forearm between 4 and 16 degrees.
- Typing: flat, with a 6 Hz jitter.
- Walking: arm hanging at -72 degrees, swinging 15 degrees each way at 0.9 Hz, with a 1.8 Hz step bounce.
- A vape session: lifts to 45 to 75 degrees, held 1.5 to 4 seconds, 15 to 90 seconds apart; 40% of the time standing, with the arm hanging between puffs.
- A meal: bites of 0.3 to 0.9 seconds at the mouth, 8 to 40 seconds apart, with cutting jitter in between.
- Drinking: sips of 1.5 to 3 seconds at 55 to 70 degrees, the cup tilting through 30 degrees of roll, 60 to 180 seconds apart.
- A phone call: 60 seconds at 65 degrees, rolled 60.
Every random choice comes from a seeded SplitMix64 generator, so every trace is reproducible down to the last sample, and a failing test can be replayed exactly. The app's detector test suite compiles the real Swift detector on macOS and runs it against these traces: 346 of 346 checks pass on the commit this article was built from.
Tuning the vape tracker: what the simulation says#
A test suite tells you the rules do what you meant. It doesn't tell you whether you meant the right thing. For that we built a harness that runs the real detector, the same Swift source that ships on the watch, over many simulated days, and sweeps its settings.
For this article it simulated 100 days of 16 waking hours each: 1,611 hours of wrist motion, 290 million accelerometer samples at 50 Hz. Each day mixed 4 to 8 vape sessions of 3 to 14 puffs into ordinary life. In total: 598 true vape sessions, 5,065 true puffs and 2,600 detector passes.
- Simulated days
- 100
- Hours of wrist motion
- 1,611
- Accelerometer samples
- 290 million
- True puffs to find
- 5,065
Every number in this section is simulation, not real-world accuracy.
At the defaults (35 degrees, 3 lifts, a 0.6-second minimum hold and a minimum score of 0.45), the detector found 99.8% of the true vape sessions, and when it found one, its puff count was off by 1.4 puffs on average. Of the sessions it suggested, 52% were real, which works out to 5.24 false sessions a simulated day. Those false alarms are the weak spot, and the next section shows where they come from.
Threshold explorer: vape sessions found vs false alarms across detector settings
- Session recall
- 99.8%
- Precision
- 52%
- False alarms per day
- 5.2
- Puff count error
- ±1.4
The grid holds 45 settings, from 20 to 60 degrees and from 2 to 6 lifts per session. Start with the elevation threshold, holding the lift count at 3. At 20 degrees the detector found 82% of sessions, with 7.2 false sessions a simulated day; at 35, 99.8%, with 5.24 false a day; at 60, 71%, with 3.39 false a day. The default sits on the plateau: no threshold in that row finds more sessions, and none that finds as many raises fewer false alarms. Recall holds up to 45 degrees, which leaves room above the default for the per-user calibration (more on that below) to tighten in 3-degree steps before it starts missing sessions.
The minimum number of lifts per session is the other dial. At 35 degrees: 2 lifts found 100% of sessions with 6.39 false a day; 3 lifts found 99.8% of sessions with 5.24 false a day; 4 lifts found 94% of sessions with 4.14 false a day; 5 lifts found 87% of sessions with 2.72 false a day; 6 lifts found 80% of sessions with 1.46 false a day. Requiring more lifts trades missed sessions for fewer false alarms. Each pair of "Not me" answers moves a person one step along that row (and 3 degrees up the other axis).
Across the whole grid, no setting clearly beat the default on both counts at once. The other two knobs tell their own story. With a minimum hold of 0.2 seconds the detector found 100% of sessions with 5.53 false sessions a simulated day; at 1.5 seconds, 99.7% with 5.23 false sessions a simulated day. Raising the minimum lift score from 0.25 to 0.7 moved the share of sessions found from 100% to 99.7%, and false sessions from 7.39 to 5.23 a day.
What fools a smartwatch: coffee, forks and phone calls#
The enemies of hand-to-mouth gesture detection are well known, because they are the other things hands do near mouths. Smoking researchers call them confounders, and Sense2Quit's jump from 0.67 to 0.975 came from training on exactly these.5 We ran each of ours on its own, at the default settings: 1,200 simulated episodes across 6 activities, vaping included.
Confounders: how often eating, drinking, calls, walking and typing look like vaping
Vape sessionfound 100% of episodesepisodes 200Found 100% of simulated sessions; 1653 puffs estimated for 1653 real ones.
Mealfalse alarm 0% of episodesepisodes 200Bites are too quick and too shaky to score as puffs (0.2 accepted per meal), so no meal became a session.
Drinkingfalse alarm 84% of episodesepisodes 200A sip looks like a puff: same height, same stillness. Of 200 drinks, 168 had 3 or more accepted sips and 168 of those became a suggestion.- Phone callfalse alarm 0% of episodesepisodes 200The hand stays up far longer than 8 seconds, so a call is never a lift.
- Walkingfalse alarm 0% of episodesepisodes 200The arm hangs below the horizon. Walking only votes on which way round the watch is worn.
- Typingfalse alarm 0% of episodesepisodes 200The forearm lies flat, nowhere near the threshold.
Meals, phone calls, walking and typing never produced a session at all. The exception: drinks, where 84% of simulated episodes became a suggestion, with 4.1 accepted lifts each on average.
It makes sense once you picture it. A sip is a few seconds at the mouth, high, with the hand fairly still. To heuristic-1, which reads only height, stillness and timing, that is the shape of a puff. The others fall away by design: a bite is too quick at the mouth to score well, a phone call holds the arm up far too long, walking keeps the forearm pointing at the ground and typing keeps it flat.
This is the simulation doing its job: it found the weak spot before anyone's wrist did. It is why nothing is logged without your answer, and why two "Not me" answers in a row raise the lift count. It also points at what comes next. A sip and a puff differ in one way the heuristic ignores: the cup tilts. In our simulated arm a sip rolls the wrist through about 30 degrees during the hold, and a puff doesn't. That is exactly the kind of signal a learned second stage can pick up from labelled samples.
Suggest, never auto-log: how Vape Sense learns from you#
In ExHale, every puff costs your buddy HP. Log enough and they get knocked out, which can break a streak and cost XP and coins. That makes a false puff more than a statistical blemish. It is a small injustice. And a batched detection you never saw can't be undone fairly after the fact.
So Vape Sense never logs anything on its own. When a session closes, your watch shows a notification: "Looks like you vaped ~6 times around 3:10pm", with two buttons. Log it records the session, and lets you adjust the count first. Not me dismisses it. Unanswered suggestions quietly expire after 12 hours. A confirmed session is merged with any puffs you already tapped on your phone or watch, taking the larger count, so a puff is never counted twice.
The watch proposes. You decide. Nothing touches your buddy until you answer.
Calibration that moves slowly, on purpose
Every answer also teaches. In the smoking research, models tuned to one person beat one-size-fits-all models (individual F1 scores of 0.83 to 0.94, against 0.65 to 0.81 for group models),4 and Somatix's SmokeBeat showed that watch-based cigarette detection could leave the lab.17 Vape Sense personalises in the gentlest way we could think of: one answer never moves a threshold, a pair does.
- Every second "Not me" in a row tightens it: one more lift per session (up to 6) and 3 more degrees of elevation (up to 60).
- Every second miss loosens it: one fewer lift (down to 2) and 3 degrees less (down to 20). A miss is a puff you log on the watch yourself with no suggestion within 3 minutes.
- The hold limits never move. They describe the physics of a puff, not your habits.
Per-user calibration: how answers nudge the Vape Sense thresholds
- Confirmed
- 0
- Not me
- 0
- Missed
- 0
- Not me streak
- 0
- Hold limits
- 0.6 to 8 s
- Answer a few suggestions. Two Not me in a row tighten both thresholds; every second missed puff loosens them. Hold limits never move.
Why so cautious? Because answers are noisy too. Now and then you will tap Not me on a real session, by accident or in a hurry. A detector that lurched at every tap would chase your mood. One that waits for a pair follows your habits.
Privacy by design: motion only#
A watch that notices when you vape could easily feel creepy. We designed it not to be.
- Motion only. Vape Sense reads the accelerometer. It never uses location or audio, and it never asks for HealthKit. The only permission is Motion & Fitness.
- On your wrist. Detection runs on the watch, in batches.
- You decide what counts. Nothing is logged without your answer.
- Off any time. You can turn Vape Sense off any time.
What's next for Apple Watch vape detection, and the honest limits#
Today's detector is called heuristic-1, and it is fully explainable: every decision traces back to a threshold you have read about here. That is a feature. When it suggests a session, we can say exactly why.
The next stage is learned. Create ML can train an activity classifier on windows of motion data,18 and we plan to put one behind the heuristic as a second-stage filter: the heuristic proposes candidate lifts, the classifier gets a vote. It won't be trained on simulation. We set the bar in advance: at least 300 confirmed or adjusted sessions and 150 rejected ones, from 20 or more people. Below that, a bigger model would only mean more confident guessing. High on its list: telling a sip from a puff, starting with the tilt of the cup.
Some people want every single puff counted, from the device itself. For them we are prototyping ExCap, a tiny Bluetooth clip-on for a vape's top cap whose pressure sensor feels each puff. It is still in the lab, with a waitlist.
The honest limits
- The other hand. Most people wear their watch on the left wrist, and most people are right-handed. A puff taken with the hand that isn't wearing the watch is invisible to it. The watch already knows its wrist, so setup doesn't ask; it tells you: "Your watch is on your LEFT wrist - vape with your LEFT hand so Vape Sense can see it."
- Simulation is not the street. Smoking detectors lose accuracy between the lab and real life,4 and we expect the same. We have no real-world accuracy figures yet, and we won't pretend otherwise.
- Delay. Batches mean a suggestion can arrive up to about 15 minutes after a session.
- It's a BETA. Vape Sense will miss some sessions, and now and then it will suggest one that wasn't. That is what Not me is for.
Wearables as quiet allies#
There is a version of this technology that would feel like surveillance: a device that catches you, scores you, reports you. We wanted the opposite. Awareness, not punishment.
Watches already notice when we stand, walk and sleep. They are getting better at noticing the quiet things too, the ones we do a hundred times a day without deciding to. A habit that hides in plain sight is hard to change, because it is hard to see. The kindest thing a watch can do is make it visible, gently, and then get out of the way.
Most of us vape more than we think. Seeing the real number, on your own terms, is where cutting down starts. A little arc of a forearm, a nudge on the wrist, a question you are free to answer. That is the whole idea.
Apple Watch vape detection: questions and answers#
Can an Apple Watch detect vaping?
Not directly: no Apple Watch sensor can see vapor or nicotine. What it can feel is your forearm. Vape Sense (BETA), part of the ExHale app, uses the watch's accelerometer to spot the pattern a vape session leaves on the wrist: the hand rising to the mouth, pausing, still, for a few seconds, then dropping, again and again over minutes. When it sees that pattern it suggests a session, and you decide whether to log it.
How does Vape Sense count vape puffs?
The watch records its accelerometer in the background at 50 Hz. About every 15 minutes, Vape Sense reads the new data, separates gravity from motion, and works out how steeply your forearm is tilted. Each time the forearm rises above a threshold (35 degrees by default), holds there calmly for between 0.6 and 8 seconds and drops again, that counts as one lift. Lifts less than 5 minutes apart form a cluster, and a cluster with at least 3 lifts becomes a suggested session. The estimated puff count is the number of lifts, and you can adjust it before logging.
Does Vape Sense use the microphone, location or health data?
No. Vape Sense is motion only: it reads the watch's accelerometer and nothing else. It does not use location, audio or the camera, and it does not ask for HealthKit access. The only permission it needs is Motion & Fitness. You can turn it off any time.
Which wrist and hand should I vape with for Vape Sense to work?
Vape with the hand on the same arm as your watch. The watch can only feel the arm it is strapped to, so a puff taken with the other hand is invisible to it. The watch already knows which wrist it is on, so setup tells you directly, for example: Your watch is on your LEFT wrist, vape with your LEFT hand so Vape Sense can see it.
Does Apple Watch vape detection work with any vape?
Yes, because Vape Sense watches your arm, not the device. Disposables, pods and refillable vapes all make the same hand-to-mouth gesture, and nothing needs to be paired or connected. What matters is that you hold the vape in the hand on your watch arm.
How accurate is Vape Sense?
We don't have real-world accuracy figures yet, and Vape Sense is in BETA. So far we have tested it on simulated arms, running the real detector over 100 simulated days: it found 99.8% of the simulated vape sessions, and the gesture that fooled it most was drinks. Real wrists are messier than simulated ones, and published smoking detectors score lower outside the lab than inside it. That is why Vape Sense only suggests sessions and never logs one without your answer, and why every answer helps it improve.
Will Vape Sense log puffs without asking me?
Never. When it thinks you vaped, your watch shows a suggestion such as: Looks like you vaped ~6 times around 3:10pm, with Log it and Not me. Nothing is logged until you answer, and an unanswered suggestion expires after 12 hours. A confirmed session is merged with puffs you already logged by hand, so nothing is counted twice.
Is my Vape Sense data shared?
Detection runs on your watch. The Help improve Vape Sense setting is on by default and you can switch it off any time. When it is on, your answers are sent with short motion windows around each detected lift (about 10 seconds each, accelerometer only, no location or audio). We only use this data to improve Vape Sense's accuracy.
References#
- Vaping and smoking puff topography: e-cigarette sessions ran longer, with more puffs, than cigarette sessions. Scientific Reports, 2019. www.nature.com/articles/s41598-019-55410-5
- Parate et al. RisQ: Recognizing Smoking Gestures with Inertial Sensors on a Wristband. MobiSys 2014. dl.acm.org/doi/10.1145/2594368.2594379
- Saleheen et al. puffMarker: a multi-sensor approach for pinpointing the timing of first lapse in smoking cessation. UbiComp 2015. www.cs.memphis.edu/~santosh/Papers/puffMarker.pdf
- Senyurek et al. PACT2.0: wrist IMU smoking detection in the lab and in free living, with individual and group models. Sensors, 2019. pmc.ncbi.nlm.nih.gov/articles/PMC6387353/
- Xu et al. Sense2Quit: a confounding-resilient smartwatch smoking detection model. JMIR, 2025. www.jmir.org/2025/1/e67186
- ClinicalTrials.gov NCT05932693: feasibility of a wrist-worn sensor for detecting e-cigarette use. clinicaltrials.gov/study/NCT05932693
- Apple Developer Forums: CMMotionManager stops delivering updates when a watchOS app is suspended. developer.apple.com/forums/thread/704826
- Apple Developer Forums: workout sessions used only to keep a non-workout app running are not a valid use case. developer.apple.com/forums/thread/778920
- Apple Developer Forums: a running workout session contributes to the Activity rings. developer.apple.com/forums/thread/780220
- Apple Developer Documentation: CMSensorRecorder. developer.apple.com/documentation/coremotion/cmsensorrecorder
- Apple Developer Forums: CMSensorRecorder records the accelerometer only, with no gyroscope. developer.apple.com/forums/thread/115056
- Apple Developer Forums: the background app refresh budget on watchOS. developer.apple.com/forums/thread/788713
- Apple Developer Documentation: SRPhotoplethysmogramSample (raw PPG, SensorKit research studies only). developer.apple.com/documentation/sensorkit/srphotoplethysmogramsample
- Acute heart rate response to e-cigarette use. pmc.ncbi.nlm.nih.gov/articles/PMC4958544/
- Shoaib et al. Complex human activity recognition using smartphone and wrist-worn motion sensors (smoking with a smartwatch). Sensors, 2016. www.mdpi.com/1424-8220/16/4/426
- Shoaib et al. Smoking gesture recognition with a smartwatch: which accelerometer axes carry the gesture. arxiv.org/abs/2003.02735
- SmokeBeat (Somatix): smartwatch smoking detection pilot. Nicotine and Tobacco Research. pmc.ncbi.nlm.nih.gov/articles/PMC7177980/
- Apple Turi Create user guide: Activity Classifier. apple.github.io/turicreate/docs/userguide/activity_classifier/
Methods note#
The simulation numbers in this article come from a harness that compiles the Vape Sense detector (heuristic-1) and the synthetic-arm Swift sources from the ExHale app at commit c3361d16 on macOS and runs them over 100 simulated days of 16 waking hours at 50 Hz (generated 2026-10-13). Every scenario uses its own SplitMix64 seed, so each run is reproducible.
Session recall is the share of true vape sessions overlapped by at least one detected session. Precision is the share of detected sessions that overlap a true one. False sessions per day count detected sessions that overlap none. Puff count error is the mean absolute difference between estimated and true puffs, over the sessions that were found. The scenario results run each activity on its own, at the default settings. The app's own detector test suite passed 346 of 346 checks on that commit.
False sessions per day, and so precision, depend on how many drinks, meals and calls we put into each simulated day, so read them as relative, not absolute. Simulated arms are also tidier than real ones: read these results as tests of the logic, not as real-world accuracy. Literature figures are as reported by the cited studies, most of them on cigarette smoking.
© 2026 ExHale Labs. Text, figures and simulation data. All rights reserved. Vape Sense™ is a trademark of ExHale Labs.