Customising the BOM Weather and lovelace - now in HACS

I just updated to the latest version and set the new default margins. Double checked that they are what you wrote, but ended up with this after a cache reload:

I think it’s this setting:
current_data_top_margin: 10em #default 10em px or em pre-0.109.x default was 7em

EDIT: Or maybe I don’t know what I’m doing. Changed it back to 7em and it ended up being way to high and interfering with the summary. So I incrementally increased it and ended up back at 10em :thinking:

EDIT 2: Now the ipad view has all the data stacked in one column and interfering with the summary:

EDIT3: All sorted.

Screenshot_2020-05-03 Overview - Home Assistant(1)

Not sure why but these settings I ended up using are slightly different to yours:

summary_top_padding: 1em
current_text_top_margin: 3em

The second one looks like an odd column width to me… how many columns are you displaying?

Actually Tom… weren’t you also using card-mod on this card?

Yes, just to create the border.

style: |
  ha-card {
    border: solid 2px var(--primary-color);
  }

It’s all good now. On the desktop and ios. On my iPad I get 4 rather narrow columns automatically. This does stack the slots but they no longer interfere with the current condition / forecast or what ever it is called in the top centre.

assume you found the template sensor Jim?

Sorry mate had to scroll a few more line lol

1 Like

ok I do actually have an issue now :), update to 0.109 has set me back on just about every custom UI I have which is alot :). Anyways I’m not getting any love from your weather card (first time install)

Presumably the card is not showing? Just the error? This is normally because you are parsing an entity to the card in Lovelace that doesn’t exist… so make sure all the entities are in states (dev-tools)

1 Like

I have checked all entities exist. You are correct card is not showing along with this error

Can you show your lovelace config for the cards and the configuration for the FTP component.
Did you create the template sensors?
I guarantee it’s because an entity is missing.

Lovelace

#################################################################
#                                                               #
#                         AirVisual Card                        #
#                                                               #
#################################################################

- type: horizontal-stack
  cards:
    - type: custom:gap-card

    - type: custom:air-visual-card
      air_pollution_level: sensor.chinese_air_pollution_level
      air_quality_index: sensor.chinese_air_quality_index
      main_pollutant: sensor.chinese_main_pollutant
      temp: "{{ (data | fromjson)['temp'] }}"
      city: 'Burleigh Waters'
      style: |
        ha-card  {
          border-radius: 5px;
        }

#################################################################
#                                                               #
#                        BOM Weather Card                       #
#                                                               #
#################################################################

    - type: custom:bom-weather-card
      title: BOM Weather
      entity_current_conditions: sensor.bom_gc_forecast_icon_0
      entity_temperature: sensor.bom_gc_air_temp_c
      entity_forecast_high_temp_1: sensor.bom_gc_forecast_max_temp_c_1
      entity_forecast_high_temp_2: sensor.bom_gc_forecast_max_temp_c_2
      entity_forecast_high_temp_3: sensor.bom_gc_forecast_max_temp_c_3
      entity_forecast_high_temp_4: sensor.bom_gc_forecast_max_temp_c_4
      entity_forecast_high_temp_5: sensor.bom_gc_forecast_max_temp_c_5
      entity_forecast_icon_1: sensor.bom_gc_forecast_icon_1
      entity_forecast_icon_2: sensor.bom_gc_forecast_icon_2
      entity_forecast_icon_3: sensor.bom_gc_forecast_icon_3
      entity_forecast_icon_4: sensor.bom_gc_forecast_icon_4
      entity_forecast_icon_5: sensor.bom_gc_forecast_icon_5
      entity_forecast_low_temp_1: sensor.bom_gc_forecast_min_temp_c_1
      entity_forecast_low_temp_2: sensor.bom_gc_forecast_min_temp_c_2
      entity_forecast_low_temp_3: sensor.bom_gc_forecast_min_temp_c_3
      entity_forecast_low_temp_4: sensor.bom_gc_forecast_min_temp_c_4
      entity_forecast_low_temp_5: sensor.bom_gc_forecast_min_temp_c_5
      entity_summary_1: sensor.bom_gc_forecast_summary_1
      entity_summary_2: sensor.bom_gc_forecast_summary_2
      entity_summary_3: sensor.bom_gc_forecast_summary_3
      entity_summary_4: sensor.bom_gc_forecast_summary_4
      entity_summary_5: sensor.bom_gc_forecast_summary_5
      entity_sun: sun.sun
      # entity_visibility: sensor.dark_sky_visibility
      entity_daytime_high: sensor.bom_gc_forecast_max_temp_c_0
      entity_daytime_low: sensor.bom_gc_forecast_min_temp_c_1
      entity_wind_bearing: sensor.bom_gc_wind_direction
      entity_wind_speed: sensor.bom_gc_wind_speed_kmh
      entity_humidity: sensor.bom_gc_relative_humidity
      # entity_pressure: sensor.dark_sky_pressure
      entity_apparent_temp: sensor.bom_gc_feels_like_c
      entity_daily_summary: sensor.bom_gc_forecast_detailed_summary_0
      entity_pop: sensor.bom_gc_forecast_chance_of_rain_0
      entity_pop_intensity: sensor.bom_gc_rain_today
      entity_possible_today: sensor.bom_gc_forecast_possible_rainfall_0
      entity_pos_1: sensor.bom_gc_forecast_possible_rainfall_1
      entity_pos_2: sensor.bom_gc_forecast_possible_rainfall_2
      entity_pos_3: sensor.bom_gc_forecast_possible_rainfall_3
      entity_pos_4: sensor.bom_gc_forecast_possible_rainfall_4
      entity_pos_5: sensor.bom_gc_forecast_possible_rainfall_5
      entity_pop_1: sensor.bom_gc_forecast_chance_of_rain_1
      entity_pop_2: sensor.bom_gc_forecast_chance_of_rain_2
      entity_pop_3: sensor.bom_gc_forecast_chance_of_rain_3
      entity_pop_4: sensor.bom_gc_forecast_chance_of_rain_4
      entity_pop_5: sensor.bom_gc_forecast_chance_of_rain_5
      entity_current_text: sensor.bom_current_text
      entity_uv_alert: sensor.bom_uv_alert
      entity_fire_danger: sensor.bom_fire_danger
      entity_uv_alert_summary: sensor.bom_uv_alert_summary
      entity_fire_danger_summary: sensor.bom_fire_danger_summary
      locale: en
      sunset: true
      static_icons: false
      # old_icon: "true"
      tooltip_bg_color: 'rgb( 75,155,239)'
      tooltip_border_color: 'rgb(255,161,0)'
      tooltip_border_width: 1
      tooltip_caret_size: 5
      tooltip_fg_color: '#fff'
      tooltip_left_offset: -12
      tooltip_width: 110
      tooltips: true
      old_daily_format: false
      time_format: 12
      show_beaufort: false
      refresh_interval: 60
      show_separator: false
      temp_top_margin: 0px            #default 0px px or em Note: pre-0.109.x default was -0.3em
      temp_font_weight: 300           #default 300 numeric
      temp_font_size: 4em             #default 4em em
      temp_right_pos: 0.85em          #default 0.85em px or em
      temp_uom_top_margin: -12px      #default -12px px or em Note: pre-0.109.x default was -9px
      temp_uom_right_margin: 7px      #default 7px px or em
      apparent_top_margin: 45px       #default 45px px or em
      apparent_right_pos: 1em         #default 1em px or em
      apparent_right_margin: 1em      #default 1em px or em
      current_text_top_margin: 4.5em  #default 4.5em px or em pre-0.109.x default was 39px
      current_text_left_pos: 0px      #default 0px px or em pre-0.109.x default was 5em
      current_text_font_size: 1.5em   #default 1.5em em
      current_text_alignment: center  #default center
      current_text_width: 100%        #default 100%
      current_data_top_margin: 10em   #default 10em px or em pre-0.109.x default was 7em
      large_icon_top_margin: -3.2em   #default -3.2em px or em Note: pre-0.109.x default was -3.5em
      large_icon_left_position: 0px   #default 0px px or em
      separator_top_margin: 6em       #default 6em px or em
      summary_top_padding: 2em        #default 2em px or em pre-0.109.x default was 1em
      summary_font_size: 0.8em        #default 0.8em px or em
      slot_l1: daytime_high           #daytime_high
      slot_l2: daytime_low            #daytime_low
      slot_l3: wind                   #wind
      slot_l4: pressure               #pressure
      slot_l5: sun_next               #sun_next
      slot_r1: pop                    #pop
      slot_r2: humidity               #humidity
      slot_r3: uv_alert               #uv_alert
      slot_r4: fire_danger            #fire_danger
      slot_r5: sun_following          #sun_following

weather package

sensor:

####################################################
#                                                  #
#                   Sensor - BOM                   #
#                                                  #
####################################################

  - platform: bom
    station: IDQ60801.94592
    name: GC
    monitored_conditions:
      - apparent_t
      - delta_t
      - gust_kmh
      - gust_kt
      - air_temp
      - dewpt
      - rain_trace
      - rel_hum
      - wind_dir
      - wind_spd_kmh
      - wind_spd_kt
      
####################################################
#                                                  #
#               Sensor - BOM Forecast              #
#                                                  #
####################################################
      
## BOM Forecast
  - platform: bom_forecast
    product_id: IDQ10610
    name: GC Forecast
    forecast_days: 6
    rest_of_today: true
    friendly: false
    friendly_state_format: '{max}, {summary}'
    monitored_conditions:
      - 'max'
      - 'min'
      - 'chance_of_rain'
      - 'possible_rainfall'
      - 'summary'
      - 'detailed_summary'
      - 'icon'
      - 'uv_alert'
      - 'fire_danger'

####################################################
#                                                  #
#                 Sensor - Template                #
#                                                  #
####################################################
      
  - platform: template
    sensors:

      bom_current_text:
        value_template: >
            {% set val = states('sensor.bom_gc_forecast_summary_0').split('.')[0] %} 
            {{ val | title }}

      bom_uv_alert:
        value_template: >
            {%- if states('sensor.bom_gc_forecast_uv_alert_0') == '##' -%}
            UV Today: No Data
            {%- elif states('sensor.bom_gc_forecast_uv_alert_0') != 'n/a' -%} 
            UV Today: {{ states('sensor.bom_gc_forecast_uv_alert_0') }}
            {%- elif states('sensor.bom_gc_forecast_uv_alert_1') == '##' -%}
            UV Tomorrow: No Data
            {%- else -%}
            UV Tomorrow: {{ states('sensor.bom_gc_forecast_uv_alert_1') }}
            {%- endif -%}

      bom_uv_alert_summary:
        value_template: >
            {%- if states('sensor.bom_gc_forecast_uv_alert_0') == '##' -%} 
            {% set val = 'No Data' %}
            {%- elif states('sensor.bom_gc_forecast_uv_alert_0') != 'n/a' -%} 
            {% set val = states('sensor.bom_gc_forecast_uv_alert_0').split('[')[1].split(']')[0] %}
            {%- elif states('sensor.bom_gc_forecast_uv_alert_1') == '##' -%} 
            {% set val = 'No Data' %}
            {%- elif states('sensor.bom_gc_forecast_uv_alert_1') != 'n/a' -%} 
            {% set val = states('sensor.bom_gc_forecast_uv_alert_1').split('[')[1].split(']')[0] %}
            {%- else -%}
            {%- set val = 'No Data' -%}
            {%- endif -%}
            {{ val | title }} 

      bom_fire_danger:
        value_template: >
            {%- if states('sensor.bom_gc_forecast_fire_danger_0') == '##' -%}
            Fire Danger Today: No Data
            {%- elif states('sensor.bom_gc_forecast_fire_danger_0') != 'n/a' -%} 
            Fire Danger Today: {{ states('sensor.bom_gc_forecast_fire_danger_0') }}
            {%- elif states('sensor.bom_gc_forecast_fire_danger_1') == '##' -%}
            Fire Danger Tomorrow: No Data
            {%- else -%}
            Fire Danger Tomorrow: {{ states('sensor.bom_gc_forecast_fire_danger_1') }}
            {%- endif -%}

      bom_fire_danger_summary:
        value_template: >
            {%- if states('sensor.bom_gc_forecast_fire_danger_0') == '##' -%}
            No Data
            {%- elif states('sensor.bom_gc_forecast_fire_danger_0') != 'n/a' -%} 
            {{ states('sensor.bom_gc_forecast_fire_danger_0') }}
            {%- elif states('sensor.bom_gc_forecast_fire_danger_1') == '##' -%}
            No Data
            {%- else -%}
            {{ states('sensor.bom_gc_forecast_fire_danger_1') }}
            {%- endif -%}

      bom_forecast_0:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_0
          - sensor.bom_gc_forecast_min_temp_c_1
          - sensor.bom_gc_forecast_chance_of_rain_0
          - sensor.bom_gosford_icon_0
        friendly_name: "Today"
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_0')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_1')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_0')|round(0)}}%
        entity_picture_template: >-
          {%- if states('sun.sun') == 'below_horizon' and (states('sensor.bom_gosford_icon_0') == 'fog' or states('sensor.bom_gosford_icon_0') == 'haze' or states('sensor.bom_gosford_icon_0') == 'light-showers' or states('sensor.bom_gosford_icon_0') == 'partly-cloudy' or states('sensor.bom_gosford_icon_0') == 'showers') -%}
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_0') ~ '-night.png' }}
          {%- else -%}
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_0') ~ '.png' }}
          {%- endif -%}
      bom_forecast_1:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_1
          - sensor.bom_gc_forecast_min_temp_c_1
          - sensor.bom_gc_forecast_chance_of_rain_1
          - sensor.bom_gosford_icon_1
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (1 * 86400 ) -%}
          {{ date | timestamp_custom('Tomorrow (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_1')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_1')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_1')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_1') ~ '.png' }}
      bom_forecast_2:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_2
          - sensor.bom_gc_forecast_min_temp_c_2
          - sensor.bom_gc_forecast_chance_of_rain_2
          - sensor.bom_gosford_icon_2
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (2 * 86400 ) -%}
          {{ date | timestamp_custom('%A (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_2')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_2')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_2')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_2') ~ '.png' }}
      bom_forecast_3:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_3
          - sensor.bom_gc_forecast_min_temp_c_3
          - sensor.bom_gc_forecast_chance_of_rain_3
          - sensor.bom_gosford_icon_3
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (3 * 86400 ) -%}
          {{ date | timestamp_custom('%A (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_3')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_3')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_3')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_3') ~ '.png' }}
      bom_forecast_4:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_4
          - sensor.bom_gc_forecast_min_temp_c_4
          - sensor.bom_gc_forecast_chance_of_rain_4
          - sensor.bom_gosford_icon_4
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (4 * 86400 ) -%}
          {{ date | timestamp_custom('%A (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_4')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_4')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_4')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_4') ~ '.png' }}
      bom_forecast_5:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_5
          - sensor.bom_gc_forecast_min_temp_c_5
          - sensor.bom_gc_forecast_chance_of_rain_5
          - sensor.bom_gosford_icon_5
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (5 * 86400 ) -%}
          {{ date | timestamp_custom('%A (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_5')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_5')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_5')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_5') ~ '.png' }}
      bom_forecast_6:
        entity_id:
          - sensor.bom_gc_forecast_max_temp_c_6
          - sensor.bom_gc_forecast_min_temp_c_6
          - sensor.bom_gc_forecast_chance_of_rain_6
          - sensor.bom_gosford_icon_6
        friendly_name_template: >
          {%- set date = as_timestamp(now()) + (6 * 86400 ) -%}
          {{ date | timestamp_custom('%A (%-d/%-m)') }}
        value_template: >
          {{states('sensor.bom_gc_forecast_max_temp_c_6')|round(0)}}°/{{states('sensor.bom_gc_forecast_min_temp_c_6')|round(0)}}°/{{states('sensor.bom_gc_forecast_chance_of_rain_6')|round(0)}}%
        entity_picture_template: >-
          {{ '/local/icons/bom_icons/' ~ states('sensor.bom_gosford_icon_6') ~ '.png' }}


#################################################################
#                                                               #
#                              Sun                              #
#                                                               #
#################################################################

sun:

Pressure. You have defined a slot for pressure but not parsing any entity to it. (Lots of BOM stations don’t have pressure so I am parsing one of my BME280 sensors through to it instead)
Also just FYI, BOM will show n/a for minimum and maximum during the day. The minimum generally disappears early in the morning and the maximum after around 2pm - seems once the min/max for the day is reached it is removed. That’s why I use a template sensor with the statistics sensor. (Actually I use the custom average component which lets me get the low/high since midnight)

and so it is well spotted thanks @DavidFW1960

How do you get the still image for your bom radar image?
Also do you think you could squeeze the AirVisual AQI entity in there somewhere?

There is a core component for that. I think my config is in the weather package no?

camera:
  - platform: generic
    name: BOM Satellite
    still_image_url: http://www.bom.gov.au/gms/IDE00135.jpg
  - platform: bom
    name: Sydney
    id: 714   
    frames: 6
    delta: 360
  - platform: bom
    name: Newcastle
    id: '043'
    frames: 6
    delta: 360

Then in Lovelace to display

      - type: vertical-stack
        cards:
          - type: picture-entity
            title: BOM Satellite
            entity: camera.bom_satellite
            tap_action:
              action: more-info
            hold_action:
              action: more-info
          - type: picture-entity
            title: BOM Radar Sydney
            entity: camera.sydney
            tap_action:
              action: more-info
            hold_action:
              action: more-info
          - type: picture-entity
            title: BOM Radar Newcastle
            entity: camera.newcastle
            tap_action:
              action: more-info
            hold_action:
              action: more-info

Is that provided by BOM?
I could make a slot for it. I don’t have it on mine.
You could use the visibility slot and parse the correct entity as visibility too.

I was more referring to the still_image_url: http://www.bom.gov.au/gms/IDE00135.jpg section

its not native to BOM no it is a seperate sensor AirVisual provides air quality index for your region. I could do that good idea.

I don’t understand?
On the BOM site if you open the map that is the URL of the map
go to http://www.bom.gov.au/australia/satellite/?ref=ftr
then right click the map and you get a full screen of the image.
http://www.bom.gov.au/gms/IDE00135.202005072230.jpg
But someone must have told me if you leave out the ‘date’ bit it shows the latest.
http://www.bom.gov.au/gms/IDE00135.jpg

New Version 0.68 that includes wind gust.


Need to add to lovelace configuration

entity_wind_gust: sensor.bom_gosford_wind_gust_kmh
1 Like

Righto works well with my conditional cards



1 Like

Today’s high showing as NaN… template not working?