Australia - Mt Buller Snow Report

We are near the Mt Buller ski fields, so I wanted to bring some at-a-glance info onto the dashboard as the season is about to start.

It looks like this in the new section view, and the snow cam is a live feed:

The section only shows during winter, and then auto-hides the rest of the year.

Now we just need some proper snow!

User interface YAML:

title: ❄️ Snow
type: grid
visibility:
  - condition: state
    entity: sensor.season
    state: winter
cards:
  - type: iframe
    url: https://www.youtube.com/embed/0OtVlfDj2w8?autoplay=1&mute=1
    aspect_ratio: 56%
  - type: tile
    entity: sensor.mt_buller_resort_rating
    name: Resort Rating
  - type: tile
    entity: sensor.mt_buller_last_snowfall_date
    name: Last Snowfall
  - type: tile
    entity: sensor.mt_buller_snow_average_natural
    name: Average Natural
  - type: tile
    entity: sensor.mt_buller_snow_average_made
    name: Average Made
  - type: tile
    entity: sensor.mt_buller_open_lifts_count
    name: Lifts Open
  - type: tile
    entity: sensor.mt_buller_open_trails_count
    name: Trails Open
  - type: tile
    entity: sensor.mt_buller_snow_last_72_hours
    name: Last 72 Hours
  - type: tile
    entity: sensor.mt_buller_snow_season_total
    name: Full Report
    hide_state: true
    tap_action:
      action: url
      url_path: https://www.mtbuller.com.au/winter/snow-weather/snow-report
    icon_tap_action:
      action: url
      url_path: https://www.mtbuller.com.au/winter/snow-weather/snow-report
    icon: mdi:link

Data source YAML:

rest:
  - resource: "https://api.mtbuller.com.au/api/weather/widget"
    scan_interval: 900
    sensor:

      - unique_id: mt_buller_resort_rating
        name: "Mt Buller Resort Rating"
        icon: mdi:snowflake
        value_template: "{{ value_json.snow_report.resort_rating }}"

      - unique_id: mt_buller_average_natural
        name: "Mt Buller Snow Average Natural"
        icon: mdi:snowflake
        availability: "{{ value_json.snow_report.average_natural is not none() }}"
        value_template: "{{ value_json.snow_report.average_natural | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_average_made
        name: "Mt Buller Snow Average Made"
        icon: mdi:snowflake-variant
        availability: "{{ value_json.snow_report.average_made is not none() }}"
        value_template: "{{ value_json.snow_report.average_made | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_snow_last_24_hours
        name: "Mt Buller Snow Last 24 Hours"
        icon: mdi:weather-snowy
        availability: "{{ value_json.snow_report.snow_last_24_hours is not none() }}"
        value_template: "{{ value_json.snow_report.snow_last_24_hours | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_snow_last_48_hours
        name: "Mt Buller Snow Last 48 Hours"
        icon: mdi:weather-snowy
        availability: "{{ value_json.snow_report.snow_last_48_hours is not none() }}"
        value_template: "{{ value_json.snow_report.snow_last_48_hours | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_snow_last_72_hours
        name: "Mt Buller Snow Last 72 Hours"
        icon: mdi:weather-snowy
        availability: "{{ value_json.snow_report.snow_last_72_hours is not none() }}"
        value_template: "{{ value_json.snow_report.snow_last_72_hours | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_snow_season_total
        name: "Mt Buller Snow Season Total"
        icon: mdi:weather-snowy-heavy
        availability: "{{ value_json.snow_report.snow_season_total is not none() }}"
        value_template: "{{ value_json.snow_report.snow_season_total | int(0) }}"
        device_class: distance
        unit_of_measurement: cm
        state_class: measurement

      - unique_id: mt_buller_last_snowfall_date
        name: "Mt Buller Last Snowfall Date"
        icon: mdi:snowflake-check
        availability: "{{ value_json.snow_report.last_snowfall_date is not none() }}"
        value_template: "{{ strptime(value_json.snow_report.last_snowfall_date, '%d %b %Y').date() }}"
        device_class: date

      - unique_id: mt_buller_open_trails_count
        name: "Mt Buller Open Trails Count"
        icon: mdi:ski
        availability: "{{ value_json.open_trails_count is not none() }}"
        value_template: "{{ value_json.open_trails_count | int(0) }}"
        state_class: measurement

      - unique_id: mt_buller_all_trails_count
        name: "Mt Buller All Trails Count"
        icon: mdi:ski
        availability: "{{ value_json.all_trails_count is not none() }}"
        value_template: "{{ value_json.all_trails_count | int(0) }}"
        state_class: measurement

      - unique_id: mt_buller_open_lifts_count
        name: "Mt Buller Open Lifts Count"
        icon: mdi:ski
        availability: "{{ value_json.open_lifts_count is not none() }}"
        value_template: "{{ value_json.open_lifts_count | int(0) }}"
        state_class: measurement

      - unique_id: mt_buller_all_lifts_count
        name: "Mt Buller All Lifts Count"
        icon: mdi:ski
        availability: "{{ value_json.all_lifts_count is not none() }}"
        value_template: "{{ value_json.all_lifts_count | int(0) }}"
        state_class: measurement

There’s lots of good data in both https://api.mtbuller.com.au/api/weather/widget and https://api.mtbuller.com.au/api/weather/forecast if you wanted to display other attributes.

1 Like

Do people ski in that?

No wonder we get so many Aussies over here.

It sounds like the season started a week early this year (traditionally starts on the June long weekend) - the snow is likely to come in the coming week

Not the most constructive comment.

A quick look at Remarkables in NZ suggests not much different right now.

Brilliant! I am currently setting up a Home Assistant service for our ski lodge at Smiggin Holes (NSW). A pity that Vail - Perisher do not offer a similar API.

This is brilliant thanks - I’ve used it on by DB with a simple copy paste - nice work!

This has been excellent - thank you. I found a couple of other APIs which are really useful including lift status:
https://api.mtbuller.com.au/api/lifts

I decided to capture the lift status details in two ways:

  1. create a sensor for each lift (and record its status e.g. open, closed)
  2. create a sensor for each status and record the lifts (e.g. list all the open lifts).

Here’s the YAML for that to add to your configuration.yaml file:

#### Mt Buller Lift Status ####
## By Lift ##

  - resource: "https://api.mtbuller.com.au/api/lifts"
    scan_interval: 900
    sensor:
      - unique_id: mt_buller_lift_status_wombat
        name: "Lift Status Wombat"
        icon: mdi:snowflake
        value_template: >
          {% set wombat_lift = value_json | selectattr('name', 'equalto', 'Wombat') | first %}
          {% if wombat_lift %}
            {{ wombat_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_bourke_street_express
        name: "Mt Buller Lift Status Bourke Street Express"
        icon: mdi:snowflake
        value_template: >
          {% set bourke_street_express_lift = value_json | selectattr('name', 'equalto', 'Bourke Street Express') | first %}
          {% if bourke_street_express_lift %}
            {{ bourke_street_express_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_bourke_street_carpet
        name: "Mt Buller Lift Status Bourke Street Carpet"
        icon: mdi:snowflake
        value_template: >
          {% set bourke_street_carpet_lift = value_json | selectattr('name', 'equalto', 'Bourke Street Carpet') | first %}
          {% if bourke_street_carpet_lift %}
            {{ bourke_street_carpet_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_bull_run
        name: "Mt Buller Lift Status Bull Run"
        icon: mdi:snowflake
        value_template: >
          {% set bull_run_lift = value_json | selectattr('name', 'equalto', 'Bull Run') | first %}
          {% if bull_run_lift %}
            {{ bull_run_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_canyon_tows
        name: "Mt Buller Lift Status Canyon Tows"
        icon: mdi:snowflake
        value_template: >
          {% set canyon_tows_lift = value_json | selectattr('name', 'equalto', 'Canyon Tows') | first %}
          {% if canyon_tows_lift %}
            {{ canyon_tows_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_lydia_lassila_chairlift
        name: "Mt Buller Lift Status Lydia Lassila Chairlift"
        icon: mdi:snowflake
        value_template: >
          {% set lydia_lassila_chairlift_lift = value_json | selectattr('name', 'equalto', 'Lydia Lassila Chairlift') | first %}
          {% if lydia_lassila_chairlift_lift %}
            {{ lydia_lassila_chairlift_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_shakey_knees
        name: "Mt Buller Lift Status Shakey Knees"
        icon: mdi:snowflake
        value_template: >
          {% set shakey_knees_lift = value_json | selectattr('name', 'equalto', 'Shakey Knees') | first %}
          {% if shakey_knees_lift %}
            {{ shakey_knees_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_federation
        name: "Mt Buller Lift Status Federation"
        icon: mdi:snowflake
        value_template: >
          {% set federation_lift = value_json | selectattr('name', 'equalto', 'Federation') | first %}
          {% if federation_lift %}
            {{ federation_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_grimus
        name: "Mt Buller Lift Status Grimus"
        icon: mdi:snowflake
        value_template: >
          {% set grimus_lift = value_json | selectattr('name', 'equalto', 'Grimus') | first %}
          {% if grimus_lift %}
            {{ grimus_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_abom_express
        name: "Mt Buller Lift Status ABOM Express"
        icon: mdi:snowflake
        value_template: >
          {% set abom_express_lift = value_json | selectattr('name', 'equalto', 'ABOM Express') | first %}
          {% if abom_express_lift %}
            {{ abom_express_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_northside_express
        name: "Mt Buller Lift Status Northside Express"
        icon: mdi:snowflake
        value_template: >
          {% set northside_express_lift = value_json | selectattr('name', 'equalto', 'Northside Express') | first %}
          {% if northside_express_lift %}
            {{ northside_express_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_howqua
        name: "Mt Buller Lift Status Howqua"
        icon: mdi:snowflake
        value_template: >
          {% set howqua_lift = value_json | selectattr('name', 'equalto', 'Howqua') | first %}
          {% if howqua_lift %}
            {{ howqua_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_koflers
        name: "Mt Buller Lift Status Koflers"
        icon: mdi:snowflake
        value_template: >
          {% set koflers_lift = value_json | selectattr('name', 'equalto', 'Koflers') | first %}
          {% if koflers_lift %}
            {{ koflers_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_skyline
        name: "Mt Buller Lift Status Skyline"
        icon: mdi:snowflake
        value_template: >
          {% set skyline_lift = value_json | selectattr('name', 'equalto', 'Skyline') | first %}
          {% if skyline_lift %}
            {{ skyline_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_southside
        name: "Mt Buller Lift Status Southside"
        icon: mdi:snowflake
        value_template: >
          {% set southside_lift = value_json | selectattr('name', 'equalto', 'Southside') | first %}
          {% if southside_lift %}
            {{ southside_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_gliders_carpet
        name: "Mt Buller Lift Status Gliders Carpet"
        icon: mdi:snowflake
        value_template: >
          {% set gliders_carpet_lift = value_json | selectattr('name', 'equalto', 'Gliders Carpet') | first %}
          {% if gliders_carpet_lift %}
            {{ gliders_carpet_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_summit
        name: "Mt Buller Lift Status Summit"
        icon: mdi:snowflake
        value_template: >
          {% set summit_lift = value_json | selectattr('name', 'equalto', 'Summit') | first %}
          {% if summit_lift %}
            {{ summit_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_tirol
        name: "Mt Buller Lift Status Tirol"
        icon: mdi:snowflake
        value_template: >
          {% set tirol_lift = value_json | selectattr('name', 'equalto', 'Tirol') | first %}
          {% if tirol_lift %}
            {{ tirol_lift.status }}
          {% else %}
            unknown
          {% endif %}

      - unique_id: mt_buller_lift_status_bonza
        name: "Mt Buller Lift Status Bonza"
        icon: mdi:snowflake
        value_template: >
          {% set bonza_lift = value_json | selectattr('name', 'equalto', 'Bonza') | first %}
          {% if bonza_lift %}
            {{ bonza_lift.status }}
          {% else %}
            unknown
          {% endif %}
## By Status ##
      # Open Lifts
      - unique_id: mt_buller_open_lifts
        name: "Mt Buller Open Lifts"
        value_template: >
          {% set open_lifts = value_json | selectattr('status', 'equalto', 'Open') | map(attribute='name') | list %}
          {% if open_lifts %}
            {{ open_lifts | join(', ') }}
          {% else %}
            No open lifts
          {% endif %}

      # Closed Lifts
      - unique_id: mt_buller_closed_lifts
        name: "Mt Buller Closed Lifts"
        value_template: >
          {% set closed_lifts = value_json | selectattr('status', 'equalto', 'Closed') | map(attribute='name') | list %}
          {% if closed_lifts %}
            {{ closed_lifts | join(', ') }}
          {% else %}
            No closed lifts
          {% endif %}

      # Standby Lifts
      - unique_id: mt_buller_standby_lifts
        name: "Mt Buller Standby Lifts"
        value_template: >
          {% set standby_lifts = value_json | selectattr('status', 'equalto', 'Standby') | map(attribute='name') | list %}
          {% if standby_lifts %}
            {{ standby_lifts | join(', ') }}
          {% else %}
            No standby lifts
          {% endif %}

here’s what the dashboad looks:

And here’s the YAML for the lifts by status (right hand column)

type: vertical-stack
cards:
  - type: markdown
    title: 🚡 Open Lifts
    content: |
      {% set open_lifts = states('sensor.open_lifts') %}
      {% if open_lifts %}
        <pre>{% for lift in open_lifts.split(',') %}
          {{ lift | trim }}
        {% endfor %}</pre>
      {% else %}
        No open lifts currently.
      {% endif %}
  - type: markdown
    title: 🚫 Closed Lifts
    content: |
      {% set closed_lifts = states('sensor.closed_lifts') %}
      {% if closed_lifts %}
        <pre>{% for lift in closed_lifts.split(',') %}
          {{ lift | trim }}
        {% endfor %}</pre>
      {% else %}
        No closed lifts currently.
      {% endif %}
  - type: markdown
    title: ⏳ Standby Lifts
    content: |
      {% set standby_lifts = states('sensor.standby_lifts') %}
      {% if standby_lifts %}
        <pre>{% for lift in standby_lifts.split(',') %}
          {{ lift | trim }}
        {% endfor %}</pre>
      {% else %}
        No standby lifts currently.
      {% endif %}