# ============================================================================== # Volcano Hybrid — Session Dashboard # ------------------------------------------------------------------------------ # Session-focused Lovelace dashboard combining the four most-used pieces of # the Volcano pack: # # 1. Default functionality — thermostat slider + fan controls # 2. Vapesuvius temperature ladder — 5 direct-jump buttons (steps 1–5) # 3. Auto-progress automation — toggle + live "next step in X min" countdown # 4. Fill-a-bag script — confirmation-guarded primary CTA # # Difference vs the original volcanoHybridLovelace.yaml.txt: that one is a # compact ±step "control surface" with the dimmer-remote scripts. THIS one # is the "I'm starting a session right now" dashboard — full ladder visible # as five buttons (so you can see where you are and where you're going at a # glance), and the auto-progress card shows how long until the next rung. # # Stock Lovelace cards only — no HACS required. # Drop it into a Lovelace dashboard via: # Dashboard → ⋮ Edit dashboard → ⋮ Raw configuration editor → paste under views[].cards[] # Or: + ADD CARD → "Manual" → paste. # # Companion files (none required — this card stands alone with the SavageNL # integration, but these unlock individual buttons): # - volcanoHybridProgress.yaml.txt (auto-progress automation — only needed # if you want the auto-progress toggle row) # - volcanoHybridFillBag.yaml.txt (defines script.volcano_fill_bag) # # Prerequisites: # - SavageNL/home-assistant-volcano-hybrid integration installed and exposing: # climate.volcano_hybrid — climate entity # sensor.volcano_hybrid_current_on_time — runtime counter in minutes # - script.volcano_fill_bag defined (optional — only needed if you want the # Fill-a-bag button to do anything) # - automation.volcano_progress defined (optional — for the auto-progress # toggle + countdown) # ============================================================================== type: vertical-stack title: Volcano Session cards: # ---------- Status header — at-a-glance state ---------- # Combines current/target temp, heating state, fan state, runtime, and # — if auto-progress is on — the time until the next ladder step. # Reads temperature_unit from the climate entity so this renders # correctly on both °C and °F installs without edits. - type: markdown content: | ### Volcano Session {% set t = state_attr('climate.volcano_hybrid', 'temperature') %} {% set c = state_attr('climate.volcano_hybrid', 'current_temperature') %} {% set unit = state_attr('climate.volcano_hybrid', 'temperature_unit') | default('deg') %} {% set runtime = states('sensor.volcano_hybrid_current_on_time') | int(0) %} {% set heat = is_state('climate.volcano_hybrid', 'heat') %} {% set fan = state_attr('climate.volcano_hybrid', 'fan_mode') %} {% set ap_on = is_state('automation.volcano_progress', 'on') %} **Current:** {{ c | default('--') }}{{ unit }}   **Target:** {{ t | default('--') }}{{ unit }} Heater: **{{ 'ON' if heat else 'idle' }}**  |  Fan: **{{ 'ON' if fan == 'on' else 'off' }}**  |  Runtime: **{{ runtime if runtime > 0 else '--' }}** min {%- if ap_on %} {%- set rungs = [0, 5, 10, 15, 20] %} {%- set next = rungs | select('gt', runtime) | list | first %} {%- if next is not none %} Auto-progress: **next step in {{ next - runtime }} min** {%- else %} Auto-progress: **ladder complete (step 5, 205{{ unit }})** {%- endif %} {%- endif %} # ---------- Default functionality — built-in thermostat slider ---------- # Stock card; lets you fine-tune off-ladder if needed. - type: thermostat entity: climate.volcano_hybrid name: Temperature # ---------- Vapesuvius temperature ladder ---------- # Five direct-jump buttons covering the published ladder. Each sets the # target temp directly via climate.set_temperature — no companion scripts # needed. The active rung gets a highlight via tap_action: more-info on # the matching rung; pressing one immediately commits. # # Steps 6–8 (211/217/230) are commented at the bottom; uncomment to extend. - type: markdown content: | **Vapesuvius ladder**   —   tap a rung to jump there directly. - type: horizontal-stack cards: - type: button name: "1 · 179°" icon: mdi:thermometer-low show_state: false tap_action: action: perform-action perform_action: climate.set_temperature target: entity_id: climate.volcano_hybrid data: temperature: 179 - type: button name: "2 · 185°" icon: mdi:thermometer show_state: false tap_action: action: perform-action perform_action: climate.set_temperature target: entity_id: climate.volcano_hybrid data: temperature: 185 - type: button name: "3 · 191°" icon: mdi:thermometer show_state: false tap_action: action: perform-action perform_action: climate.set_temperature target: entity_id: climate.volcano_hybrid data: temperature: 191 - type: button name: "4 · 199°" icon: mdi:thermometer-high show_state: false tap_action: action: perform-action perform_action: climate.set_temperature target: entity_id: climate.volcano_hybrid data: temperature: 199 - type: button name: "5 · 205°" icon: mdi:thermometer-alert show_state: false tap_action: action: perform-action perform_action: climate.set_temperature target: entity_id: climate.volcano_hybrid data: temperature: 205 # ---------- Auto-progress automation row ---------- # Toggle the runtime-driven ladder on/off. The runtime sensor below it # gives you the "where am I in the ladder?" data behind the header # countdown. - type: entities title: Auto-progress show_header_toggle: false entities: - entity: automation.volcano_progress name: Auto temperature progression icon: mdi:stairs-up secondary_info: last-changed - entity: sensor.volcano_hybrid_current_on_time name: Current runtime icon: mdi:timer-outline # ---------- Auto-progress visual gauge ---------- # Shows runtime progress along the 0–20 min ladder window at a glance. # Reads in minutes; severity bands match the rung-step boundaries. - type: gauge entity: sensor.volcano_hybrid_current_on_time name: Ladder progress unit: min min: 0 max: 25 needle: true severity: green: 0 yellow: 10 red: 18 # ---------- Big "Fill a bag" — primary session action ---------- # Tall + iconic so it reads as the marquee action of the dashboard. # Confirmation guard prevents accidental triggers when the dashboard is # on a wall-mounted tablet within toddler / dog reach. - type: button name: Fill a bag icon: mdi:bag-personal show_state: false icon_height: 56px tap_action: action: perform-action perform_action: script.volcano_fill_bag confirmation: text: "Run the full bag-fill sequence (~60s)?" # ---------- Fan on / fan off pair ---------- # Default Volcano functionality — manual fan control alongside the # script-driven bag-fill. Useful for purging the chamber between bags. - type: horizontal-stack cards: - type: button name: Fan on icon: mdi:fan show_state: false tap_action: action: perform-action perform_action: climate.set_fan_mode target: entity_id: climate.volcano_hybrid data: fan_mode: "on" - type: button name: Fan off icon: mdi:fan-off show_state: false tap_action: action: perform-action perform_action: climate.set_fan_mode target: entity_id: climate.volcano_hybrid data: fan_mode: "off" # ============================================================================== # Optional — extension rungs (6–8) for a longer session # ------------------------------------------------------------------------------ # Vapesuvius steps 6–8 (211/217/230 °C) for users who want to push past the # default 5-step ladder. Drop these into the horizontal-stack above — # Lovelace will overflow to a second row gracefully on narrow screens. # ============================================================================== # # - type: button # name: "6 · 211°" # icon: mdi:thermometer-alert # show_state: false # tap_action: # action: perform-action # perform_action: climate.set_temperature # target: # entity_id: climate.volcano_hybrid # data: # temperature: 211 # - type: button # name: "7 · 217°" # icon: mdi:thermometer-alert # show_state: false # tap_action: # action: perform-action # perform_action: climate.set_temperature # target: # entity_id: climate.volcano_hybrid # data: # temperature: 217 # - type: button # name: "8 · 230°" # icon: mdi:thermometer-alert # show_state: false # tap_action: # action: perform-action # perform_action: climate.set_temperature # target: # entity_id: climate.volcano_hybrid # data: # temperature: 230