For a full list of BASHing data blog posts see the index page.
Scripting a temperature notifier
My wife and I go for an early morning walk by a nearby river every day. I like to know in advance how cold it's been overnight, so I can wear suitably warm clothing. There's no local weather station recording the riverside temperature, but a fair approximation is the minimum overnight temperature at Devonport Airport here in northwest Tasmania. The airport reports its temperature data to the Bureau of Meterorology (BOM; Australia).
Previously, to get the minimum and current temperature I would open a browser, go to the BOM website page with Tasmanian observations, then look for the Devonport Airport figures: see screenshot.
This seemed like too much work to get a few numbers, so I scripted a desktop notifier:
#!/bin/bash
code=$(links -source http://www.bom.gov.au/tas/observations/tasall.shtml?ref=hdr)
temps=$(grep -A1 "lowtmp tNWC-station-devonport-airport" <<<"$code" | awk -F"[<>]" 'NR==1 {print "Low: "$3" at "$7} NR==2 {print "High: "$3" at "$7}')
printf "Devonport Airport\n$temps" | yad --text-info --geometry="250x75+1600+600" --timeout="5" --no-buttons --undecorated --justify="center"
exit 0
The script uses the links command-line browser to go to the relevant BOM page and grab its source code with the links -source option. If I use curl the BOM will tell me firmly and politely:
Your access is blocked due to the detection of a potential automated access request. The Bureau of Meteorology website does not support web scraping: if you are trying to access Bureau data through automated means, you should stop.
The relevant lines in the page code are shown here:
I retrieve the lines with grep -A1, which grabs both the "lowtmp" line and the "hightmp" line after it. I process each line with AWK to print the temperature, " at " and the recording time, plus an appropriate introduction (e.g. "Low: "); the AWK output is stored in a shell variable. The day's high temperature since midnight will approximate the current riverside temperature before our early morning walk.
Finally, I send the AWK-output variable to a YAD text-info dialog, with options to
- size the dialog window appropriately and place it where I want on my widescreen display
- not display the dialog buttons and the title and window borders
- center-justify the text
- time-out and disappear after 5 seconds
The script is launched with a keyboard shortcut. Here's the notification window before a recent walk:
Last update: 2022-01-26
The blog posts on this website are licensed under a
Creative Commons Attribution-NonCommercial 4.0 International License