diff options
author | Kevin Mandura <webmaster@kevin-mandura.de> | 2024-03-24 15:21:07 +0100 |
---|---|---|
committer | Kevin Mandura <webmaster@kevin-mandura.de> | 2024-03-24 15:21:07 +0100 |
commit | 753e468eac4c545185ab7c809c1bdbb9c1de3440 (patch) | |
tree | 5fe7c3a74f766c3dfae6bf4ea92d0440c6f1744f | |
parent | b4ba3139d898b212d5cc7c6f9cb2f4b00b2c07c4 (diff) | |
download | dwm-status-sh-753e468eac4c545185ab7c809c1bdbb9c1de3440.tar.gz dwm-status-sh-753e468eac4c545185ab7c809c1bdbb9c1de3440.zip |
Add OpenWeatherMap weather status module
-rw-r--r-- | dwm-status.sh | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/dwm-status.sh b/dwm-status.sh index 9f3533e..3b75c5b 100644 --- a/dwm-status.sh +++ b/dwm-status.sh @@ -19,6 +19,26 @@ # # Please check before executing # # ################################## +# OpenWeatherMap: API Key +CONFIG_OWM_API_KEY="" + +# OpenWeatherMap: API endpoint +CONFIG_OWM_API_ENDPOINT="http://api.openweathermap.org/data/2.5/weather?q=" + +# OpenWeatherMap: Main web address +CONFIG_OWM_WEBSITE_URL="https://openweathermap.org" + +# OpenWeatherMap: City name +CONFIG_OWM_CITY_NAME="Chicago" + +# OpenWeatherMap: Temperature unit +# e.g. "metric" for °C, default is °F +CONFIG_OWM_TEMPERATURE_UNIT="" + +# OpenWeatherMap: Language code (default: en) +# e.g. "de" +CONFIG_OWM_LANGUAGE="" + # Which date and time format to use? # # See »man date« for reference. @@ -102,6 +122,7 @@ readonly CACHE_DISK_FREE_FILE="${CONFIG_CACHE_DIR}/disk-free.txt" readonly CACHE_BATTERY_FILE="${CONFIG_CACHE_DIR}/battery.txt" readonly CACHE_UPTIME_FILE="${CONFIG_CACHE_DIR}/uptime.txt" readonly CACHE_DATE_TIME_FILE="${CONFIG_CACHE_DIR}/date-time.txt" +readonly CACHE_OPENWEATHERMAP_FILE="${CONFIG_CACHE_DIR}/openweathermap.txt" status_bar_refresh_iteration_count=0 status_bar_string="" @@ -125,7 +146,7 @@ initialize_cache_directory() { # Empty the cache directory and create empty cache files for a fresh # start. rm -f "$CONFIG_CACHE_DIR"/* - touch "$CACHE_NEW_MAILS_FILE" "$CACHE_ETHERNET_INTERFACE_FILE" "$CACHE_WLAN_INTERFACE_FILE" "$CACHE_VPN_INTERFACE_FILE" "$CACHE_CPU_TEMPERATURE_FILE" "$CACHE_CPU_USAGE_FILE" "$CACHE_RAM_USAGE_FILE" "$CACHE_AUDIO_VOLUME_FILE" "$CACHE_DISK_FREE_FILE" "$CACHE_BATTERY_FILE" "$CACHE_UPTIME_FILE" "$CACHE_DATE_TIME_FILE" + touch "$CACHE_OPENWEATHERMAP_FILE" "$CACHE_NEW_MAILS_FILE" "$CACHE_ETHERNET_INTERFACE_FILE" "$CACHE_WLAN_INTERFACE_FILE" "$CACHE_VPN_INTERFACE_FILE" "$CACHE_CPU_TEMPERATURE_FILE" "$CACHE_CPU_USAGE_FILE" "$CACHE_RAM_USAGE_FILE" "$CACHE_AUDIO_VOLUME_FILE" "$CACHE_DISK_FREE_FILE" "$CACHE_BATTERY_FILE" "$CACHE_UPTIME_FILE" "$CACHE_DATE_TIME_FILE" } # Note: @@ -135,6 +156,46 @@ initialize_cache_directory() { # parameter makes the function only return the information from the # cache. +module_weather() { + # Abort, if no API key was specified. + [ -n "$CONFIG_OWM_API_KEY" ] || return + + if [ "$1" = "force" ]; then + # Test if OpenWeatherMap.org is reachable. + if ! wget -q --tries=1 --timeout="$CONFIG_REFRESH_INTERVAL" --spider "$CONFIG_OWM_WEBSITE_URL"; then + return + fi + # Receive weather temperature and descriptive text and store to file. + weather_data=$(curl "${CONFIG_OWM_API_ENDPOINT}${CONFIG_OWM_CITY_NAME}&units=${CONFIG_OWM_TEMPERATURE_UNIT}&appid=${CONFIG_OWM_API_KEY}&lang=${CONFIG_OWM_LANGUAGE}" -s) + + weather_data_temperature=$(printf "%s" "$weather_data" | jq -r .main.temp) + + # Shorten temperature to one number after decimal point. + LC_NUMERIC="en_US.UTF-8" # Ensure correct number interpretation. + weather_data_temperature=$(printf "%.1f" "$weather_data_temperature") + + if [ "$CONFIG_OWM_TEMPERATURE_UNIT" = "metric" ]; then + weather_data_temperature="${weather_data_temperature}°C" + else + weather_data_temperature="${weather_data_temperature}°F" + fi + + weather_data_description=$(printf "%s" "$weather_data" | jq -r '.weather[0].description') + + weather_information="${weather_data_temperature} ${weather_data_description}" + + printf "%s" "$weather_information" > "$CACHE_OPENWEATHERMAP_FILE" + else + # Only read latest information stored inside the cache file. + weather_information=$(cat "$CACHE_OPENWEATHERMAP_FILE") + fi + + # Append to status bar string. + if [ -n "$weather_information" ]; then + status_bar_string="${status_bar_string}${weather_information}${CONFIG_DELIM_STRING}" + fi +} + module_mail() { # Abort, if no email store directory is configured. [ -n "$CONFIG_MAILBOX_DIR" ] || return @@ -439,6 +500,7 @@ refresh_status_bar() { if [ "$status_bar_refresh_iteration_count" = 0 ]; then # It is time to update all status bar modules. + module_weather # only manual update using script parameter module_mail force module_vpn_interface force module_wlan_interface force @@ -456,6 +518,7 @@ refresh_status_bar() { status_bar_refresh_iteration_count=$((status_bar_refresh_iteration_count+1)) else # Only update prioritized status bar modules. + module_weather module_mail module_vpn_interface force module_wlan_interface force @@ -501,6 +564,13 @@ if [ "$1" = "refresh" ]; then exit 0 fi +# If the script parameter "refresh-weather" is set, refresh the +# weather information using the OpenWeatherMap API. +if [ "$1" = "refresh-weather" ]; then + module_weather force + exit 0 +fi + # Clear all the cache files to start afresh. initialize_cache_directory |