[SOLVED] Australian Bureau of Meteorology Weather Forecast Binding

Hi all,

I have released a binding for Australian BOM. For those who are interested please go to the following link for details https://github.com/tomitan100/org.openhab.binding.bom/blob/master/README.md

To install this binding you will need to install Eclipse IoT Market add-on first under MISC in Paper UI. The binding, called “Australian BOM Weather Forecast Binding”, should then appear in Bindings page for you to install.

Items mapping with channel linking attached for easier configuration. You will need to name your BOM Thing ID as “default” or rename in the file accordingly.

https://github.com/tomitan100/org.openhab.binding.bom/raw/master/doc/bom.items

Linked below is the sitemap:

https://github.com/tomitan100/org.openhab.binding.bom/raw/master/doc/bom.sitemap

Let me know if there is any issue.

Change log

23/04/2019

  • BOM Image: Added support for high-definition Himawari-8 satellite images.

20/04/2019

  • BOM Image: Read timestamp from image filename instead of file.
  • BOM Image: Added optional adjust-timestamp property to local timestamp configuration.
  • BOM Image: Removed hard-coded timestamp adjustment as this is not applicable to other image products.

18/04/2019

  • BOM Image: Fixed chaining of image manipulation operation.

17/04/2019

  • BOM Image: Added regular expression file matching.
  • BOM Image: Added date time range filter.

15/04/2019

  • BOM Image: Added timestamp option.
  • BOM Image: Fixed sourcing of images from external sources.

14/04/2019

  • Added retain min/max temperatures for today.
  • Added BOM radar/rainfall image generation. See documentation.

08/03/2019

  • Fixed icon mapping for light rain.

03/03/2019

  • Fixed apparent vs air temperature mix up.
  • Fixed today’s min/max temperature.

26/02/2019

  • Added 24 hour rainfall channel.
  • Added minimum and maximum precipitation.

18/02/2019

  • Added weather station channel and additional logging.

17/02/2019

  • Updated channel label names.

16/02/2019

  • Added apparent temperature from observation.

14/02/2019

  • Added support for city/town and district forecast data.
  • Handled NaN values from data.

13/02/2019

  • Updated forecast date and time label.

12/02/2019

  • Initial release.

Example Screenshots

Screenshots below are based on “Matrix Theme” by Patrick (@pmpkk). See Matrix Theme for HABPanel for details.

Regards,
Tom

5 Likes

Hey @tomitan
Thanks for this, it works well.
Hey do I update to latest version?
Cheers!

Hi Mark,

You will have to uninstall the binding and the reinstall. If you are still not getting new fields, etc then you may have to remove your Thing and add again.

Cheers,
Tom

G’day @tomitan, thanks for this.

What is the actual name of the binding, I hand edit the text files and never use PaperUI for that? I’ve tried all parts of “market:binding-4491519” which PaperUI lists it as, also tried market:bom, but none seem to work.

EDIT: And how would the thing be configured in the .things text file, field names etc. ?

EDIT2: OK, worked out the things fields by inspecting the json files, so that works now, just need the binding name now.

Hi, should be just “bom”. Let me know how you go.

If you have tried that please pass me the file(s) you edited and error log.

Thanks Tom, tried ‘bom’ and had no luck. There’s no error log, it just doesn’t activate the binding.

Only two files worth looking at, the things definition (which works):

Bridge bom:weather:default "BOM" @ "Mackay" [ftpPath="ftp://ftp.bom.gov.au/anon/gen/fwo", observationProductId="IDQ60920", weatherStationId="94367", precisForecastProductId="IDQ11295", areaId="QLD_PT016", cityTownForecastProductId="IDQ10914", observationRefreshInterval=15, forecastRefreshInterval=30]

and addons file bindings definition (doesn’t work):

binding = bom,mqtt,espmilighthub,networkhealth,ntp,exec,cups,pulseaudio,systeminfo,weather,ipcamera,zoneminder

BTW: I have a ton of items and sitemap definitions defined, but that all works if I install the binding from PaperUI, it’s just I don’t do things that way, I hate the abstraction and often delete the config, chache, jasondb and tmp directories to flush out dead wood. Much, much prefer the more direct direct editing approach. Makes it easier to backup that way too.

Found a solution, a bit of a kludge, but it works thanks to another Tom in this post.

My marketbindings.sh:

#!/bin/bash

# Australian BOM Binding
curl -X POST -H "Content-Type: text/plain" --data "id=market:binding-4491519" http://192.168.10.100:8080/rest/extensions/market:binding-4491519/install

The startup rule (relevant bits anyway):

rule "Startup Rules"
    when
        System started
    then
        Thread::sleep(30000)
        executeCommandLine("/etc/openhab2/services/marketbindings.sh")
end

Hope this helps others and thanks to you Tom and the other Tom for the idea.

1 Like

Hi @tomitan - do you have a sitemap you can share of every item like you did the items file?

Are you planning this to go in as an official binding which would remove the whole install thing?

Hi Andrew,

No I don’t have a need for a sitemap but I’ll create one.

Yes I’m planning to get it reviewed and released as an official binding.

Regards,
Tom

2 Likes

@Andrew_Pawelski, here’s a plain sitemap, the commented lines are just one’s I don’t care to see:

        Group item=wForecast {
                Frame label="Currently" {
                        Text    item=BOM_Day1_WeatherStation
                        Text    item=BOM_Day1_ObservationDateAndTime
                        Text    item=BOM_Day1_AirTemperature
                        Text    item=BOM_Day1_ApparentTemperature
                        Text    item=BOM_Day1_RelativeHumidityPercentage
                        Text    item=BOM_Day1_AtmosphericPressureHPa
                        Text    item=BOM_Day1_DewPoint
                        Text    item=BOM_Day1_WindDirection
                        Text    item=BOM_Day1_WindDirectionDegrees
//                      Text    item=BOM_Day1_WindSpeedKnots
                        Text    item=BOM_Day1_WindSpeedKmH
                }
                Frame {
                        Text    item=BOM_Day1_ForecastDateAndTime
//                      Text    item=BOM_Day1_ForecastIcon
                        Text    item=BOM_Day1_ForecastPrecis
//                      Text    item=BOM_Day1_ForecastDescription
//                      Text    item=BOM_Day1_MinimumTemperature
                        Text    item=BOM_Day1_MaximumTemperature
                        Text    item=BOM_Day1_ProbabilityOfPrecipitation
                        Text    item=BOM_Day1_CurrentRainfallMm
                        Text    item=BOM_Day1_Rainfall24HourMm
//                      Text    item=BOM_Day1_MinimumPrecipitation
//                      Text    item=BOM_Day1_MaximumPrecipitation
//                      Text    item=BOM_Day1_UVAlert
                }
                Frame {
                        Text    item=BOM_Day2_ForecastDateAndTime
//                      Text    item=BOM_Day2_ForecastIcon
                        Text    item=BOM_Day2_ForecastPrecis
//                      Text    item=BOM_Day2_ForecastDescription
                        Text    item=BOM_Day2_MaximumTemperature
                        Text    item=BOM_Day2_MinimumTemperature
                        Text    item=BOM_Day2_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day2_MinimumPrecipitation
                        Text    item=BOM_Day2_MaximumPrecipitation
//                      Text    item=BOM_Day2_UVAlert
                }
                Frame {
                        Text    item=BOM_Day3_ForecastDateAndTime
//                      Text    item=BOM_Day3_ForecastIcon
                        Text    item=BOM_Day3_ForecastPrecis
//                      Text    item=BOM_Day3_ForecastDescription
                        Text    item=BOM_Day3_MaximumTemperature
                        Text    item=BOM_Day3_MinimumTemperature
                        Text    item=BOM_Day3_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day3_MinimumPrecipitation
                        Text    item=BOM_Day3_MaximumPrecipitation
//                      Text    item=BOM_Day3_UVAlert
                }

............ REAPEAT DAY 2 UP UNTIL DAY 8

                Frame {
                        Text    item=BOM_Day8_ForecastDateAndTime
//                      Text    item=BOM_Day8_ForecastIcon
                        Text    item=BOM_Day8_ForecastPrecis
//                      Text    item=BOM_Day8_ForecastDescription
                        Text    item=BOM_Day8_MaximumTemperature
                        Text    item=BOM_Day8_MinimumTemperature
                        Text    item=BOM_Day8_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day8_MinimumPrecipitation
                        Text    item=BOM_Day8_MaximumPrecipitation
//                      Text    item=BOM_Day8_UVAlert
                }
        }

Here’s a fancier sitemap that used the “ForecastIcon” item as the icon for that forecast’s “ForecastDateAndTime”:

        Group item=wForecast {
                Frame label="Currently" {
                        Text    item=BOM_Day1_WeatherStation
                        Text    item=BOM_Day1_ObservationDateAndTime
                        Text    item=BOM_Day1_AirTemperature
                        Text    item=BOM_Day1_ApparentTemperature
                        Text    item=BOM_Day1_RelativeHumidityPercentage
                        Text    item=BOM_Day1_AtmosphericPressureHPa
                        Text    item=BOM_Day1_DewPoint
                        Text    item=BOM_Day1_WindDirection
                        Text    item=BOM_Day1_WindDirectionDegrees
//                      Text    item=BOM_Day1_WindSpeedKnots
                        Text    item=BOM_Day1_WindSpeedKmH
                }
                Frame {
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_sunny_32" visibility=[BOM_Day1_ForecastIcon=="sunny"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_clear_32" visibility=[BOM_Day1_ForecastIcon=="clear"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_mostly_sunny_32" visibility=[BOM_Day1_ForecastIcon=="mostly-sunny"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_cloudy_32" visibility=[BOM_Day1_ForecastIcon=="cloudy"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_hazy_32" visibility=[BOM_Day1_ForecastIcon=="hazy"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_light_rain_32" visibility=[BOM_Day1_ForecastIcon=="light-rain"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_windy_32" visibility=[BOM_Day1_ForecastIcon=="windy"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_fog_32" visibility=[BOM_Day1_ForecastIcon=="fog"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_shower_32" visibility=[BOM_Day1_ForecastIcon=="shower"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_rain_32" visibility=[BOM_Day1_ForecastIcon=="rain"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_dusty_32" visibility=[BOM_Day1_ForecastIcon=="dusty"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_frost_32" visibility=[BOM_Day1_ForecastIcon=="frost"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_snow_32" visibility=[BOM_Day1_ForecastIcon=="snow"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_storm_32" visibility=[BOM_Day1_ForecastIcon=="storm"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_light_shower_32" visibility=[BOM_Day1_ForecastIcon=="light-shower"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_heavy_shower_32" visibility=[BOM_Day1_ForecastIcon=="heavy-shower"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_cyclone_32" visibility=[BOM_Day1_ForecastIcon=="cyclone"]
                        Text    item=BOM_Day1_ForecastDateAndTime icon="weather_na_32" visibility=[BOM_Day1_ForecastIcon==""]
//                      Text    item=BOM_Day1_ForecastIcon
                        Text    item=BOM_Day1_ForecastPrecis
//                      Text    item=BOM_Day1_ForecastDescription
//                      Text    item=BOM_Day1_MinimumTemperature
                        Text    item=BOM_Day1_MaximumTemperature
                        Text    item=BOM_Day1_ProbabilityOfPrecipitation
                        Text    item=BOM_Day1_CurrentRainfallMm
                        Text    item=BOM_Day1_Rainfall24HourMm
//                      Text    item=BOM_Day1_MinimumPrecipitation
//                      Text    item=BOM_Day1_MaximumPrecipitation
//                      Text    item=BOM_Day1_UVAlert
                }
                Frame {
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_sunny_32" visibility=[BOM_Day2_ForecastIcon=="sunny"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_clear_32" visibility=[BOM_Day2_ForecastIcon=="clear"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_mostly_sunny_32" visibility=[BOM_Day2_ForecastIcon=="mostly-sunny"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_cloudy_32" visibility=[BOM_Day2_ForecastIcon=="cloudy"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_hazy_32" visibility=[BOM_Day2_ForecastIcon=="hazy"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_light_rain_32" visibility=[BOM_Day2_ForecastIcon=="light-rain"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_windy_32" visibility=[BOM_Day2_ForecastIcon=="windy"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_fog_32" visibility=[BOM_Day2_ForecastIcon=="fog"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_shower_32" visibility=[BOM_Day2_ForecastIcon=="shower"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_rain_32" visibility=[BOM_Day2_ForecastIcon=="rain"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_dusty_32" visibility=[BOM_Day2_ForecastIcon=="dusty"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_frost_32" visibility=[BOM_Day2_ForecastIcon=="frost"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_snow_32" visibility=[BOM_Day2_ForecastIcon=="snow"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_storm_32" visibility=[BOM_Day2_ForecastIcon=="storm"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_light_shower_32" visibility=[BOM_Day2_ForecastIcon=="light-shower"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_heavy_shower_32" visibility=[BOM_Day2_ForecastIcon=="heavy-shower"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_cyclone_32" visibility=[BOM_Day2_ForecastIcon=="cyclone"]
                        Text    item=BOM_Day2_ForecastDateAndTime icon="weather_na_32" visibility=[BOM_Day2_ForecastIcon==""]
//                      Text    item=BOM_Day2_ForecastIcon
                        Text    item=BOM_Day2_ForecastPrecis
//                      Text    item=BOM_Day2_ForecastDescription
                        Text    item=BOM_Day2_MaximumTemperature
                        Text    item=BOM_Day2_MinimumTemperature
                        Text    item=BOM_Day2_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day2_MinimumPrecipitation
                        Text    item=BOM_Day2_MaximumPrecipitation
//                      Text    item=BOM_Day2_UVAlert
                }
                Frame {
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_sunny_32" visibility=[BOM_Day3_ForecastIcon=="sunny"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_clear_32" visibility=[BOM_Day3_ForecastIcon=="clear"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_mostly_sunny_32" visibility=[BOM_Day3_ForecastIcon=="mostly-sunny"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_cloudy_32" visibility=[BOM_Day3_ForecastIcon=="cloudy"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_hazy_32" visibility=[BOM_Day3_ForecastIcon=="hazy"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_light_rain_32" visibility=[BOM_Day3_ForecastIcon=="light-rain"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_windy_32" visibility=[BOM_Day3_ForecastIcon=="windy"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_fog_32" visibility=[BOM_Day3_ForecastIcon=="fog"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_shower_32" visibility=[BOM_Day3_ForecastIcon=="shower"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_rain_32" visibility=[BOM_Day3_ForecastIcon=="rain"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_dusty_32" visibility=[BOM_Day3_ForecastIcon=="dusty"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_frost_32" visibility=[BOM_Day3_ForecastIcon=="frost"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_snow_32" visibility=[BOM_Day3_ForecastIcon=="snow"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_storm_32" visibility=[BOM_Day3_ForecastIcon=="storm"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_light_shower_32" visibility=[BOM_Day3_ForecastIcon=="light-shower"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_heavy_shower_32" visibility=[BOM_Day3_ForecastIcon=="heavy-shower"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_cyclone_32" visibility=[BOM_Day3_ForecastIcon=="cyclone"]
                        Text    item=BOM_Day3_ForecastDateAndTime icon="weather_na_32" visibility=[BOM_Day3_ForecastIcon==""]
//                      Text    item=BOM_Day3_ForecastIcon
                        Text    item=BOM_Day3_ForecastPrecis
//                      Text    item=BOM_Day3_ForecastDescription
                        Text    item=BOM_Day3_MaximumTemperature
                        Text    item=BOM_Day3_MinimumTemperature
                        Text    item=BOM_Day3_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day3_MinimumPrecipitation
                        Text    item=BOM_Day3_MaximumPrecipitation
//                      Text    item=BOM_Day3_UVAlert
                }

............ REAPEAT DAY 2 UP UNTIL DAY 8

                Frame {
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_sunny_32" visibility=[BOM_Day4_ForecastIcon=="sunny"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_clear_32" visibility=[BOM_Day4_ForecastIcon=="clear"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_mostly_sunny_32" visibility=[BOM_Day4_ForecastIcon=="mostly-sunny"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_cloudy_32" visibility=[BOM_Day4_ForecastIcon=="cloudy"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_hazy_32" visibility=[BOM_Day4_ForecastIcon=="hazy"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_light_rain_32" visibility=[BOM_Day4_ForecastIcon=="light-rain"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_windy_32" visibility=[BOM_Day4_ForecastIcon=="windy"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_fog_32" visibility=[BOM_Day4_ForecastIcon=="fog"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_shower_32" visibility=[BOM_Day4_ForecastIcon=="shower"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_rain_32" visibility=[BOM_Day4_ForecastIcon=="rain"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_dusty_32" visibility=[BOM_Day4_ForecastIcon=="dusty"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_frost_32" visibility=[BOM_Day4_ForecastIcon=="frost"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_snow_32" visibility=[BOM_Day4_ForecastIcon=="snow"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_storm_32" visibility=[BOM_Day4_ForecastIcon=="storm"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_light_shower_32" visibility=[BOM_Day4_ForecastIcon=="light-shower"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_heavy_shower_32" visibility=[BOM_Day4_ForecastIcon=="heavy-shower"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_cyclone_32" visibility=[BOM_Day4_ForecastIcon=="cyclone"]
                        Text    item=BOM_Day8_ForecastDateAndTime icon="weather_na_32" visibility=[BOM_Day4_ForecastIcon==""]
//                      Text    item=BOM_Day8_ForecastIcon
                        Text    item=BOM_Day8_ForecastPrecis
//                      Text    item=BOM_Day8_ForecastDescription
                        Text    item=BOM_Day8_MaximumTemperature
                        Text    item=BOM_Day8_MinimumTemperature
                        Text    item=BOM_Day8_ProbabilityOfPrecipitation
//                      Text    item=BOM_Day8_MinimumPrecipitation
                        Text    item=BOM_Day8_MaximumPrecipitation
//                      Text    item=BOM_Day8_UVAlert
                }
        }

The second one diplays like this in Basic UI:

Of course you’ll need 18 icons to cover all ForecastIcon scenarios. My iconset consists of:
weather_clear_32.png
weather_cloudy_32.png
weather_cyclone_32.png
weather_dusty_32.png
weather_fog_32.png
weather_frost_32.png
weather_hazy_32.png
weather_heavy_shower_32.png
weather_light_rain_32.png
weather_light_shower_32.png
weather_mostly_sunny_32.png
weather_na_32.png
weather_rain_32.png
weather_shower_32.png
weather_snow_32.png
weather_storm_32.png
weather_sunny_32.png
weather_windy_32.png

Hope this helps.

Thanks Rob! Saves me time in creating one myself :grinning:

No problems Tom, glad to help. You’re doing all the hard work though, for which I’m very grateful.

1 Like

Anyone having the problem their max and mins “disappear” for the current day after a while - its not in the XML

That’s strange Andrew, not a problem here, I’m using the Mackay forecast. What city/town forecast are you subscribed to ?

Adelaide

Thanks
Andrew

You’d expect Adelaide to keep their records up to date, the reason I asked is maybe some of the country towns might be a little lax in updating the records. If it’s not in the xml files, not sure what’s happening, hopefully Tom will have some ideas.

I’ve been annoyed with Bankstown/Liverpool in NSW having the maximum but not the minimum and these are big city centres

Aha not just Adelaide then - I have been using a python script to do what this binding is doing and use the last reported minimum if there isnt one but would prefer to go with this binding

I checked the XML quite thoroughly (I think). In my case the min temp data doesn’t seem to ever be there but yeah I noticed over the course of the day even the max drops off

The data on the BOM website must get the data from somewhere but I just don’t know where from

I have never seen min temp available in Perth myself. Max temp usually drops off at night (after 9pm? not sure). After this time the website/app displays tomorrow’s min and max. For the rest of the new day I think the min temp is retained from the switch over.

I can mimic the logic as implemented on the website if you guys want. What do you think? Or do you prefer the real min temp as encountered during the day? Or whichever one of the two is lowest?