A Storz & Bickel Volcano Hybrid integration for Home Assistant using Bluetooth. Allows controlling core features via a single climate entity.
Install using HACS (click the button below if you have it installed), or download the repository and put the folder from custom-components
in your config/custom_components
folder.
- Add the integration
- Power on your Volcano Hybrid
- If you have BLE adapters configured the device should be discovered automatically
- Add it when it's found and start using the
climate.volcano_hybrid
entity.
This integration adds a climate
entity to control the Volcano Hybrid:
It shows the following information and allows these controls:
- Current temperature (read-only)
- Target temperature
- Set directly or increase value in 1 degree steps
- Enable/disable heating
- Enable/disable fan
Additionally, there are the following configuration/diagnostic entities:
- The auto off time setting (configurable)
- Led brightness (configurable)
- Whether the device is showing temperature in Celsius or Fahrenheit (configurable)
- Whether vibration is enabled (configurable)
- The total heating time
- Whether the auto off timer is enabled (this is essentially the same as the heating state)
- The device connected state
- A reconnect button
- The rssi from the last ble message
That being said, there are some safety measures:
- Temperature commands WILL be retried every second (while the device is on) when they don't appear to get set
- On-commands (fan-on, heater-on) WON'T be retried. If they fail, they fail.
- Off-commands WILL be retried (as long as the device is on, but if they fail, it will be on)
This will however not protect you from losing control when bluetooth fails, so do not leave the device unattended while using the integration.
This integration will connect to the Volcano as soon as it finds one (after it has been setup). This means that updates from the device will trigger updates in Home Assistant instantly, but also that no other bluetooth devices will be able to control the Volcano.
I might make that configurable at some point (if anyone wants it and asks for it, possibly).
- Dashboard grid with shut-off timer and current states
- Dashboard button card for pre-selected temperatures
- Automation to automatically progress temperature over time
- Example service calls to increase/decrease temperature by Vapesuvius temp guide steps
- Script to fill a bag
An example grid with a header and a thermostat entity (both standard Home Assistant components).
type: grid
cards:
- type: heading
heading: Volcano Hybrid
heading_style: title
icon: mdi:volcano-outline
badges:
- type: entity
show_state: true
show_icon: true
entity: sensor.volcano_hybrid_auto_off_time
- type: thermostat
entity: climate.volcano_hybrid
features:
- style: icons
type: climate-hvac-modes
- style: icons
type: climate-fan-modes
show_current_as_primary: true
name: " "
Example grid using Button Card to easily set pre-defined temperatures.
type: grid
cards:
- type: heading
heading: Temperature
heading_style: title
icon: mdi:temperature-celsius
- type: custom:button-card
name: 179
tap_action:
action: call-service
service: climate.set_temperature
data:
hvac_mode: heat
temperature: 179
target:
entity_id: climate.volcano_hybrid
- type: custom:button-card
name: 185
tap_action:
action: call-service
service: climate.set_temperature
data:
hvac_mode: heat
temperature: 185
target:
entity_id: climate.volcano_hybrid
- type: custom:button-card
name: 191
tap_action:
action: call-service
service: climate.set_temperature
data:
hvac_mode: heat
temperature: 191
target:
entity_id: climate.volcano_hybrid
- type: custom:button-card
name: 199
tap_action:
action: call-service
service: climate.set_temperature
data:
hvac_mode: heat
temperature: 199
target:
entity_id: climate.volcano_hybrid
- type: custom:button-card
name: 209
tap_action:
action: call-service
service: climate.set_temperature
data:
hvac_mode: heat
temperature: 209
target:
entity_id: climate.volcano_hybrid
- type: tile
entity: automation.volcano_progress
features_position: bottom
vertical: false
name: Volcano auto temp
grid_options:
columns: full
tap_action:
action: toggle
This is an example automation that will automatically increase the temperature in 5-minute intervals. Follows the Vapesuvius temp guide (for temp, not time)
alias: Volcano progress
description: ""
triggers:
- trigger: numeric_state
entity_id:
- sensor.volcano_hybrid_current_on_time
above: 0
id: "179"
alias: 0 => 179
- trigger: numeric_state
entity_id:
- sensor.volcano_hybrid_current_on_time
above: 5
id: "185"
alias: 5 => 185
- trigger: numeric_state
entity_id:
- sensor.volcano_hybrid_current_on_time
above: 10
id: "191"
alias: 10 => 191
- trigger: numeric_state
entity_id:
- sensor.volcano_hybrid_current_on_time
above: 15
id: "199"
alias: 15 => 199
- trigger: numeric_state
entity_id:
- sensor.volcano_hybrid_current_on_time
above: 20
id: "205"
alias: 20 => 205
conditions:
- alias: Don't trigger when device reconnects
condition: and
conditions:
- condition: template
value_template: >-
{{ trigger.from_state.state not in ['unknown','unavailable'] and
trigger.to_state.state not in ['unknown','unavailable'] }}
alias: from_state or to_state was unknown or unavailable
actions:
- action: climate.set_temperature
metadata: {}
data:
temperature: "{{ trigger.id }}"
target:
entity_id: climate.volcano_hybrid
mode: single
I use these, combined with a dimmer switch.
- Long press on: Turn on heating
- Long press off: Turn off heating
- Short press on: Turn on fan
- Short press off: Turn off fan
- Up: Increase temperature using these actions
- Down: Decrease temperature using these actions
- action: climate.set_temperature
metadata: {}
data:
temperature: >
{%set temp = state_attr('climate.volcano_hybrid', 'temperature')%}
{%if temp < 179 %}179{%elif temp < 185 %}185{%elif temp < 191
%}191{%elif temp < 199 %}199{%else %}205{%endif%}
target:
entity_id:
- climate.volcano_hybrid
alias: Inc temp
- action: climate.set_temperature
metadata: {}
data:
temperature: >
{%set temp = state_attr('climate.volcano_hybrid', 'temperature')%}
{%if temp > 205 %}205{%elif temp > 199 %}199{%elif temp > 191
%}191{%elif temp > 185 %}185{%else %}179{%endif%}
target:
entity_id:
- climate.volcano_hybrid
alias: Dec temp
This is an example script that will:
- Turn on the Volcano
- Wait for the device to heat up, and then 10s more
- Turn on the fan
- Wait for 40s (that's how long it takes to nearly fill up my standard bags, adjust to yours accordingly)
- Turns off the fan
- Waits 10 more seconds (this gives you time to turn the fan on to fill the bag completely)
- Turns off the Volcano
sequence:
- action: climate.turn_on
metadata: {}
data: {}
target:
entity_id: climate.volcano_hybrid
- wait_template: >-
{{state_attr('climate.volcano_hybrid', 'temperature') ==
state_attr('climate.volcano_hybrid', 'current_temperature')}}
continue_on_timeout: true
alias: Wait for heatup
- alias: Wait a little bit more
delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- action: climate.set_fan_mode
metadata: {}
data:
fan_mode: "on"
target:
entity_id: climate.volcano_hybrid
- alias: Wait for the bag to fill (40s)
delay:
hours: 0
minutes: 0
seconds: 41
milliseconds: 0
- action: climate.set_fan_mode
metadata: {}
data:
fan_mode: "off"
target:
entity_id: climate.volcano_hybrid
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
alias: Wait a little bit more
- action: climate.turn_off
metadata: {}
data: {}
target:
entity_id: climate.volcano_hybrid
alias: Volcano fill bag
description: ""