— Chromium only. Desktop Chrome / Edge / Opera, or Android Chrome.
No iOS, no Firefox, no Safari — they don't implement Web Bluetooth.
— Secure context. Serve over HTTPS, or run it from http://localhost.
— Local, not remote. Works only within Bluetooth range of the
Volcano. This is not remote control.
— One connection at a time. The Volcano allows a single BLE link.
If Home Assistant or the S&B app is connected, this page can't be —
disconnect that first (or vice-versa).
— It's a 230 °C heater. The page clamps 40–230 °C and confirms
before turning heat on, but don't walk away from a running unit.
The Volcano allows only one Bluetooth connection at a time. If Home Assistant or the Storz & Bickel app is connected, disconnect it first. Also check that Bluetooth is on, the unit is powered, and you're within a few metres.
Desktop Chrome, Edge, or Opera, and Chrome on Android. iOS, Firefox, and Safari don't implement Web Bluetooth, so they can't connect. The page must be served over HTTPS (localhost also works).
No — it's local only. The browser talks straight to the device over Bluetooth, so you have to be in range. Nothing is sent to any server.
No app, no account, no backend. Your presets, workflows and preferences are stored in your browser and never leave your machine. Clearing the browser's site data, or switching phones, loses them, so keep a copy: on the Workflows tab, ⤓ Backup downloads every saved workflow and your presets as one file, and ⤒ Restore brings them back (it adds the workflows, skipping any you already have, and replaces the presets).
No — the Volcano accepts only one connection. Disconnect one to use the other.
Yes: open the demo (or Try the demo at the top of the app). It connects straight away to a simulated Volcano and starts heating; ▶ Run a 3-bag session in its banner shows a whole session. The simulated Volcano heats, runs the pump and counts down like the real one, so you can try templates, the drawing, history and everything else. It works in any browser, including ones without Web Bluetooth. Speed in the demo banner runs it at 1×, 5× (the default) or 20×. What you save in the demo stays in that browser tab and never mixes with your real workflows; Exit demo goes back to the normal app.
Yes, on any tab while connected: − and + lower and raise the target (hold to keep going), H switches the heater, A the air (fan), and F starts or cancels a bag fill. They're ignored while you're typing in a field, such as the Console. Ctrl+Z undoes the latest delete.
A control panel laid out like the real one. The screen shows the current temperature (top) and the target (bottom), with a dot that lights while the heater is on. − and + change the target and send it to the Volcano a moment after your last press (tap the screen to type an exact target); HEAT and AIR switch the heater and fan, lighting up while they're on. Below it, choose Bags, Whip or All, pick a saved workflow or template and press ▶ Run; its progress and Stop buttons show right there. Under Fill bag, a graph shows the last 10 minutes: the chamber temperature as a solid line, the target dashed, and each fill shaded.
The run pauses and the banner shows "Connection lost — reconnecting". It keeps trying for up to a minute, then carries on from the step it was on (a bag that was filling counts as done). If it can't reconnect, it stops with a warning: the app can't turn the heater off without a connection, so the Volcano's own auto-off timer takes over. Check the device.
Yes. Settings → App → Theme has Amber (the default), Phosphor, Ice, Neon, Light and High contrast. The choice is saved in this browser and applies to the Help page too.
Settings has two switches. App units sets what this app shows: current and target temperature, presets and workflow progress. Device units sets the Volcano's own screen. The two are independent. Template names, the workflow editor and the ladder builder stay in °C, which is what the Volcano works in.
It's now a template: Vapesuvius 5-min Ladder (Workflows → Templates, or the Control tab's dropdown under Whip). It steps 179→230 °C and holds each rung for 5 minutes once reached. For a bag at every rung, run Vapesuvius Temp Step (8 bags). The console's ladder command still runs the original timed ladder.
A small editor for scripting your own sequences. Action types: Heat On (optionally set a target), Heat Off, Fan On for N seconds (or "background", which doesn't block the next step), Wait, Set LED, Conditional Temp Set, Exit When Temp Reached, and Loop From Beginning. Conditional Temp Set is a temperature ladder stored as data. It reads the current target, matches it to a rung and moves up to the next one. It then waits for the chamber to get there, heating up or cooling down (if the chamber is well above it), before its hold timer starts. Exit When Temp Reached can compare against the target (as Project Onyx does), the chamber reading, or either one. Use target for looping ladders, so a hot start or a bag fill can't throw it off. Use chamber to wait until the chamber really gets there. Save as many workflows as you like and run them over the live connection. The action model is inspired by Project Onyx.
Yes. On the Workflows tab, click 📋 Templates. Press ▶ on one to run it straight away, or + Save to keep an editable copy under My workflows (the row then shows ✓ Saved · Show, which jumps to it). While anything runs, a banner at the top shows its progress, with ■ Stop (leaves the heater as it is) and ■ Stop & heat off. The screen stays on while something runs, so a phone doesn't sleep and drop the connection mid-session. With 🔔 Sound & vibration cues ticked, it beeps (and vibrates on Android) when it's time to fit a fresh bag, and again when the bag is full. Every template runs start to finish on one press. It always starts at its first rung, and it turns the heat off at the end.
Temperature ladders come in two versions, each with its own button:
From Project Onyx's premade set, with step temperatures from Vapesuvius' chart:
magikh0e created, using the boiling-point guide below. Ladders (bags or whip):
And single-purpose ones:
Filters: the buttons above the list narrow it to Bags, Whip, Single bag or Utility. Under Bags or Whip, ladder rows show only that version's button.
🪜 Build your own ladder: at the top of the Templates panel. Set a start, an end and a step (°C), then choose Bags (with the time to fit each bag and the fill length) or Whip (with the hold at each rung). The preview lists every rung and the bag count; then ▶ Run ladder runs it now, or + Save ladder keeps it. If the step doesn't land exactly on the end, the end is still the last rung. Start above the end to step down; it waits for the chamber to cool between rungs.
A template you save is an ordinary workflow, so you can edit it however you like. Starting a ladder with the chamber still hot from an earlier session means it waits for the chamber to cool to the first rung.
Yes. Tap ☆ next to a template's name (Workflows → Templates), or next to the dropdown under the Volcano drawing when a template is selected. Favourites come first in that dropdown, under ★ Favourites, and the ★ Favourites filter shows just them. Tap ★ again to remove one. They're saved in this browser and included in ⤓ Backup.
Yes. On the Workflows tab, 📜 Session history lists each workflow or template you've run: when, how long, how many bags, and whether it finished, was stopped or hit an error. ✎ on a row adds a note and a 1–5 star rating (the strain, how it hit), kept with the entry and in backups. When a session ends, a bar at the bottom sums it up (“Done: … 3 bags in 12:40”) with ✎ Add a note, which opens that entry's note. ↻ on a row runs that session again (the saved workflow, the template in the same mode, or the ladder you built). It's stored in this browser (the latest 200) and included in ⤓ Backup. To tweak a saved workflow without losing the original, use ⧉ on its card to duplicate it. ▲ and ▼ move a saved workflow up or down, which also sets its place in the dropdown under the drawing.
Press Undo in the bar at the bottom of the screen (or Ctrl+Z) within about 8 seconds. That works for a deleted workflow, action or condition, a removed preset, and a cleared session history. Only the latest delete can be undone. After that, ⤒ Restore from a backup brings back workflows and history.
Click Reconnect (it appears after a drop) to reconnect to the same unit without picking it again. If that fails, use Connect.
Yes. Tick 📣 Notify in background on the Workflows tab and allow notifications when the browser asks. While a session runs and the app isn't on screen, you get a notification to fit a fresh bag, when the bag is full, and when the session ends (or stops on an error). Tapping one brings the app back. Nothing is sent while you're looking at the app; the beeps cover that. The browser has to stay open in the background for the session to keep running.
Yes — it's a PWA. Your browser will offer to install it (or use Settings → App → Install app), and it works offline after the first load. The Bluetooth link still needs the device in range. When a new version is out, a banner offers Reload; it waits until any running session ends. After an update, a What's new card at the top lists what changed since the version you last used; Got it closes it.
Report a problem (also at the bottom of the app) opens a bug report on GitHub with the app version, your browser and system, and the Volcano's firmware already filled in; describe what happened and add a screenshot if you can. For a feature or a new session template, use the other forms. Problems with the Volcano in Home Assistant belong with SavageNL's integration. A GitHub account is needed to post.
It's a 230 °C heater. The page clamps the range to 40–230 °C and asks before turning heat on, and the device's own auto-off timer still applies — but don't walk away from a running unit.
Nothing it does is permanent or irreversible. It only uses the Volcano's own Bluetooth controls — the same ones the device buttons and the Storz & Bickel app use — so nothing is flashed, reset, or recalibrated. The device preferences on the Settings tab (units, cooling display, vibration, LED brightness, auto-off) are stored on the unit and stay as you leave them; you can switch any of them back at any time, here or on the device.
The Vapesuvius templates climb the eight Vapesuvius rungs (179→230 °C); as the target rises, progressively higher-boiling compounds come off. Roughly what volatilizes where — set a target for the effect you want. These are compound boiling points; the Volcano reads a touch low, so nudge the target up 1–2 °C to fully reach one. The Control panel always shows °C (flip the device to °F in Settings if you prefer).
°C compound type 157 THC cannabinoid 166 β-Pinene terpene 167 β-Myrcene terpene 168 α-Humulene terpene 169 δ-3-carene terpene 177 1,8-Cineole terpene 178 p-Cymene terpene 178 D-Limonene terpene 178 Δ8-THC cannabinoid 180 CBD cannabinoid 182 cannflavin A flavonoid 185 CBN cannabinoid 200 linalool terpene 212 (+)-Terpinen-4-ol terpene 213 borneol terpene 219 α-Terpineol terpene 220 CBC cannabinoid 220 THCV cannabinoid 224 pulegone terpene 230 geraniol terpene
Dosing: for edibles made from already-vaped bud, run only the even ladder steps (2 / 4 / 6 / 8) and skip the odd ones — you leave more actives behind for the capsule. Comfort: above ~205 °C (rung 5) the vapor runs warm; a waterpipe helps. Source: Vapesuvius Temp Step Guide, 3rd ed.
The Console tab is a command line for the Volcano. Type help for the list; chain commands with ; to run them in sequence, or run <name> to run a workflow built on the Workflows tab.
help list commands status connection + temperature state connect / disconnect open or close the BLE link temp <40-230> set target (°C) heat on | off heater on / off fan on | off | <s> pump on/off, or <s> secs bag fill a bag (41 s) led <0-100> LED brightness units c | f device display units ladder timed Vapesuvius ladder wait <s> pause <s> seconds ls list saved workflows run <name> run a saved workflow stop cancel a running script clear wipe the screen Scripts chain with ';' and run in order — a workflow from the command line: heat on; wait 300; temp 220; wait 120; bag Up / down arrows recall history, and everything the app does is logged here.
The GATT it uses, all under service10110000-5354-4f52-5a26-4249434b454c(the tail spellsSTORZ&BICKELin ASCII): current temp…0001read / notify, uint16 LE ÷ 10 set temp…0003write (target × 10), uint16 LE heat on / off…000f/…0010write [1] / [0] fan on / off…0013/…0014write [1] / [0] status regs service10100000…, PRJSTAT1 masks (heat 32, pump 8192) setting regs PRJSTAT2…000d(°F0x200, cooling-display0x1000), PRJSTAT3…000e(vibration0x400) Heat and fan state are read back from the PRJSTAT1 register every couple of seconds, so the indicators reflect the device, not just what you clicked. Units, cooling-display, and vibration are active-low bits in PRJSTAT2/3: write the mask alone to clear a bit (feature on), or0x10000 | maskto set it (off). They change the Volcano's own display and buzzer, not this panel. Fill bag runs the pump for 41 s with a countdown (standard S&B Easy Valve) — heat to your target first, and give XL bags 75–100 s. `ladder` turns heat on and walks 179→230 °C, one rung every 5 min (~35 min total) with a live countdown.
← back to the controller · BLE protocol reverse-engineered by SavageNL/home-assistant-volcano-hybrid. Not affiliated with Storz & Bickel. — by magikh0e · Changelog · Report a problem
Free and open source. If it's handy, support it on Patreon or buy me weed.