Home Assistant integration for controlling Storz & Bickel vaporizers (Volcano Hybrid, Venty, Veazy, and Crafty/Crafty+) via Bluetooth Low Energy (BLE).
- Full Device Support: Control Volcano Hybrid, Venty, Veazy, and Crafty/Crafty+ devices (one Bluetooth device per config entry)
- Climate Control: Set target temperature and control heater
- Temperature Monitoring: Real-time current temperature sensor
- Battery Monitoring: Battery level sensor for portable devices (Crafty/Crafty+, Venty)
- Air Pump Control: Switch for Volcano Hybrid air pump
- Boost Mode: Button to activate boost mode on supported devices
- Connection Tools: Reconnect and refresh buttons for quick recovery without reloading the integration
- Auto-Discovery: Automatic device discovery via Bluetooth
| Device | Temperature Control | Heater Control | Battery | Air Pump | Boost Mode |
|---|---|---|---|---|---|
| Volcano Hybrid | ✅ | ✅ | ❌ | ✅ | ❌ |
| Venty | ✅ | ✅ | ✅ | ❌ | ✅ |
| Veazy | ✅ | ✅ | ✅ | ❌ | ✅ |
| Crafty/Crafty+ | ✅ | ✅ | ✅ | ❌ | ✅ |
- 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 will be created:
- Temperature Control: Set target temperature (40-230°C)
- Heater Control: Turn heater on/off
- Current Temperature: Real-time temperature reading
- Current Temperature: Current device temperature
- Battery Level: Battery percentage (Crafty/Crafty+, Venty, Veazy)
- Connection State:
connected/disconnecteddiagnostic state - Signal Strength: BLE RSSI (when provided by the device library)
- Air Pump: Control air pump (Volcano Hybrid only)
- Boost Mode: Activate boost mode (Crafty/Crafty+, Venty, Veazy)
- Reconnect: Force a disconnect/connect cycle and immediate refresh
- Refresh: Trigger an on-demand coordinator refresh
- Brightness (1–9): Venty, Veazy
- Boost temperature: Crafty/Crafty+
- Workflow preset: Volcano Hybrid (runs device workflow preset)
- Vibration, Boost timeout disabled: Venty, Veazy
- 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"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 flow teststests/test_coordinator.py- Data coordinator teststests/test_climate.py- Climate entity teststests/test_sensor.py- Sensor entity teststests/test_switch.py- Switch entity teststests/test_button.py- Button entity teststests/test_integration.py- Integration setup/teardown tests
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.