from dataclasses import dataclass
import datetime
import logging
+import os
import urllib.request
import astral # type: ignore
cfg.add_argument(
'--weather_forecast_cachefile',
type=str,
- default='/home/scott/.weather_forecast_cache',
+ default=f'{os.environ["HOME"]}/.weather_forecast_cache',
metavar='FILENAME',
help='File in which to cache weather data'
)
self.forecasts = {}
# Ask the raspberry pi about the outside temperature.
- www = urllib.request.urlopen(
- "http://10.0.0.75/~pi/outside_temp"
- )
- current_temp = www.read().decode("utf-8")
- current_temp = float(current_temp)
- current_temp *= (9/5)
- current_temp += 32.0
- current_temp = round(current_temp)
- www.close()
+ www = None
+ try:
+ www = urllib.request.urlopen(
+ "http://10.0.0.75/~pi/outside_temp",
+ timeout=2,
+ )
+ current_temp = www.read().decode("utf-8")
+ current_temp = float(current_temp)
+ current_temp *= (9/5)
+ current_temp += 32.0
+ current_temp = round(current_temp)
+ except Exception:
+ logger.warning('Timed out reading 10.0.0.75/~pi/outside_temp?!')
+ current_temp = None
+ finally:
+ if www is not None:
+ www.close()
# Get a weather forecast for Bellevue.
www = urllib.request.urlopen(
forecast = soup.find(id='detailed-forecast-body')
parser = dp.DateParser()
+ said_temp = False
last_dt = now
dt = now
for (day, txt) in zip(
sunrise = s['sunrise']
sunset = s['sunset']
- if dt.date == now.date:
- blurb = f'{day.get_text()}: The current outside tempterature is {current_temp}. ' + txt.get_text()
+ if dt.date() == now.date() and not said_temp and current_temp is not None:
+ blurb = f'{day.get_text()}: The current outside tempterature is {current_temp}. '
+ blurb += txt.get_text()
+ said_temp = True
else:
blurb = f'{day.get_text()}: {txt.get_text()}'
blurb = text_utils.wrap_string(blurb, 80)