Home Assistant integration for controlling Storz & Bickel vaporizers (Volcano Hybrid, Venty, Veazy, and Crafty/Crafty+) via Bluetooth Low Energy (BLE).
- All devices: Volcano Hybrid, Venty, Veazy, and Crafty/Crafty+ (one Bluetooth device per config entry), with automatic Bluetooth discovery.
- Climate control: target temperature, heater on/off, and real-time current-temperature reporting.
- Full settings surface: LED/display brightness, auto-off timers, vibration, boost/superboost offsets, ECO charging modes, display-on-cooling, charge-LED and permanent-Bluetooth, and more — exposed as numbers, switches, and selects per device.
- Volcano workflows: built-in presets (balloon / flow 1–3) plus a custom workflow action for your own timed heat-and-pump sequences.
- Diagnostics action: on-demand
run_analysisthat returns device status, detected error flags, and raw registers as action response data. - Status sensors: temperature, battery, charging, "ready" (at-temperature), usage time, connection state, and signal strength.
- Recovery tools: reconnect/refresh buttons plus connection backoff, so a device that's off or out of range doesn't spam the Bluetooth proxy.
| Device | Climate | Battery | Charging sensor | Air pump | Boost / Superboost | Workflows | Diagnostics |
|---|---|---|---|---|---|---|---|
| Volcano Hybrid | ✅ | — | — | ✅ | — | ✅ presets + custom | ✅ |
| Venty | ✅ | ✅ | ✅ | — | ✅ offsets + heater mode | — | ✅ |
| Veazy | ✅ | ✅ | ✅ | — | ✅ offsets + heater mode | — | ✅ |
| Crafty/Crafty+ | ✅ | ✅ | — (LED only) | — | ✅ boost button | — | ✅ |
Entity availability is per-device — see Entities below for the full list.
- Open HACS in Home Assistant
- Go to Integrations
- Click the three dots menu (⋮) in the top right
- Select "Custom repositories"
- Add this repository URL:
https://github.com/lorek123/ha-snb - Select category: "Integration"
- Click "Add"
- Search for "Storz & Bickel" in HACS
- Click "Download"
- Restart Home Assistant
- Copy the
custom_components/storzandbickelfolder to your Home Assistantcustom_componentsdirectory - Restart Home Assistant
- Add the integration via Settings → Devices & Services → Add Integration
- Go to Settings → Devices & Services
- Click Add Integration
- Search for Storz & Bickel
- The integration will scan for available devices
- Select your device from the list
- The device will be automatically configured
- A Bluetooth adapter with BLE support
- Bluetooth must be enabled in Home Assistant
- The device must be powered on and in range
After setup the following entities are created. Availability is per-device — the applicable device(s) are shown in parentheses.
- Temperature / heater — set target temperature and turn the heater on/off (all).
- Current temperature (all)
- Battery level (Crafty/Crafty+, Venty, Veazy)
- Usage / heating time (Crafty/Crafty+, Volcano)
- Connection state —
connected/disconnected(all, diagnostic) - Signal strength — BLE RSSI when provided (all, diagnostic)
- Charging (Venty, Veazy)
- Ready — setpoint reached / at temperature (Crafty/Crafty+, Venty, Veazy)
- Brightness 1–9 (Venty, Veazy)
- Boost offset, Superboost offset — degrees above base (Venty, Veazy)
- Boost temperature (Crafty/Crafty+)
- LED brightness — 0–100 (Crafty/Crafty+), 1–9 (Volcano)
- Auto-off time (Crafty/Crafty+, Volcano)
- Air pump (Volcano)
- Vibration (Crafty/Crafty+, Venty, Veazy)
- Superboost (Crafty/Crafty+)
- Charge LED, Permanent Bluetooth (Crafty/Crafty+)
- Boost timeout disabled, ECO charge optimization, ECO charge limit (Venty, Veazy)
- Boost visualization (Venty)
- Display on cooling, Vibration on ready (Volcano)
- Heater mode — normal / boost / superboost (Venty, Veazy)
- Workflow preset — balloon / flow 1–3 (Volcano)
- Reconnect, Refresh (all)
- Find device (Crafty/Crafty+, Venty, Veazy)
- Boost mode (Crafty/Crafty+)
Runs the device's on-board diagnostics and returns a report (overall status, heuristic warnings, detected error flags, and raw register/history values) as action response data. Per-bit error meanings are decoded by Storz & Bickel's servers, so the report flags which error bits are set rather than naming each cause.
action: storzandbickel.run_analysis
target:
entity_id: climate.my_device_temperature
response_variable: reportRuns a custom Volcano workflow — a sequence of timed heat-and-pump steps. Each step sets a temperature, optionally waits for it, holds for hold_seconds, then runs the pump for pump_seconds. Blocks until the sequence finishes (watch the climate and air-pump entities for progress). For the four built-in presets, use the Workflow preset select instead.
action: storzandbickel.run_workflow
target:
entity_id: climate.my_volcano_temperature
data:
steps:
- temperature: 185
hold_seconds: 10
pump_seconds: 8
- temperature: 200
pump_seconds: 12- Open Settings → Devices & services.
- Open the Storz & Bickel integration card.
- Use the three-dot menu on the device entry and choose Delete (or remove the integration and confirm).
Restart Home Assistant if you also removed the custom component files manually.
# Example automation
automation:
- alias: "Set Venty to 190°C"
trigger:
- platform: state
entity_id: input_boolean.venty_session
to: "on"
action:
- service: climate.set_temperature
target:
entity_id: climate.venty_temperature
data:
temperature: 190
- service: climate.set_hvac_mode
target:
entity_id: climate.venty_temperature
data:
hvac_mode: heat# Example sensor template
sensor:
- platform: template
sensors:
venty_temp:
friendly_name: "Venty Temperature"
value_template: "{{ states('sensor.venty_current_temperature') }}°C"For most cases the storzandbickel.run_workflow action (see Actions above) is simpler. If you'd rather orchestrate it yourself with the raw entities — e.g. to add conditions or notifications — this works too:
script:
volcano_fill_bag:
alias: "Volcano fill bag"
sequence:
- action: climate.set_hvac_mode
target:
entity_id: climate.my_device_temperature
data:
hvac_mode: heat
- wait_template: >
{{ state_attr('climate.my_device_temperature', 'current_temperature') | float(0)
>= state_attr('climate.my_device_temperature', 'temperature') | float(0) }}
timeout: "00:10:00"
continue_on_timeout: true
- action: switch.turn_on
target:
entity_id: switch.my_device_air_pump
- delay: "00:00:40"
- action: switch.turn_off
target:
entity_id: switch.my_device_air_pumpReady-made cards are in examples/lovelace-storzandbickel.yaml: a full masonry view with a thermostat card, entity groups for status and controls, and a small button row for heat / off / boost. Replace the placeholder prefix (my_device) with your real entity slug from Developer tools → States, and delete rows for entities your hardware does not provide (e.g. no battery on Volcano, no brightness on Crafty).
- Ensure Bluetooth is enabled in Home Assistant
- Make sure the device is powered on and in range
- Try restarting Home Assistant
- Check that the device is not connected to another app
- Ensure the device is within Bluetooth range
- Try disconnecting from other apps (official Storz & Bickel app)
- Restart the device
- Check Home Assistant logs for errors
- The integration polls the device every 5 seconds
- If updates stop, try restarting the integration
- Check device battery level (for portable devices)
This integration uses the storzandbickel-ble Python library.
Use uv so dependencies match CI and Home Assistant can resolve custom_components from the repo (avoid pip install -e ., which can break loader discovery on Python 3.14+ setuptools editables):
uv sync --extra test --extra dev --no-install-project
PYTHONPATH=. uv run pytestCoverage (same as CI):
PYTHONPATH=. uv run pytest --cov=custom_components/storzandbickel --cov-report=htmlPySerial is not used: HA’s usb import path is satisfied in tests by the serial.* stubs in tests/conftest.py.
Typecheck (CI runs this after install):
uv run pyright custom_components/storzandbickeltests/test_config_flow.py— configuration flowtests/test_coordinator.py— data coordinator (connect/poll/backoff)tests/test_climate.py— climate entity +run_analysis/run_workflowactionstests/test_sensor.py,tests/test_binary_sensor.py— sensorstests/test_number.py,tests/test_switch.py,tests/test_select.py,tests/test_button.py— controlstests/test_platform_setup.py— per-device entity gatingtests/test_diagnostics.py,tests/test_const.py— diagnostics + helperstests/test_integration.py— integration setup/teardown
This repo targets common Home Assistant integration quality scale practices where they apply to a HACS integration. Core-only items (e.g. official branding repo) may not apply. Inject websession is not relevant (no HTTP client integration dependency). Strict typing is checked with pyright in CI and via the dev dependency group in pyproject.toml.
This integration is based on reverse engineering and is not officially supported by Storz & Bickel. Use at your own risk. The authors are not responsible for any damage to devices.
MIT License
For issues, feature requests, or contributions, please visit the GitHub repository.