朝の洗濯物干しは私の仕事です。天気がすぐれない気候になると、毎朝外に干すのか、部屋中で干すのかという大変難しい意思決定が求められます。
というのも部屋干しの場合は、送風付き除湿機とファンヒーターの合わせ技を使わないと乾かないですものね。現在、水道光熱費の節約モードですので、中干しは避けたいところです。外に干してもし雨が降ったらもう一度選択が必要になります。
光熱費の節約か、電気と水資源の無駄遣いの再洗濯か、頭を悩ませる問題を、アプリ的なものを使って解決することにしました。
Pythonとショーカットを使ってOpenWeathermapデータを読み込む
洗濯物が乾く条件というものがありまして(後述)、気象データを引っ張ってきたらそれで判断できるかもと思いPythonコードを書きました(ChatGPTが)。
データ取得元はOpenWeather
1日あたり1,000APIコールは無料で1日の上限を超えるAPIコール1回につき0.0012英ポンドとのこと。1APIコールとは、1回のことなのか、1パケット的なものなのかは不明ですが、1日2回使うぐらいでは問題ないようです。
ショートカット+Pythonista、動作しました
出来上がりがこちら。素っ気ない画面ですが、自分で使うものなので動くことに意義があります。
ショートカットからPythonistaを呼び出して、OpenWeatherとデータのやりとりを行い、手を加えて表示させるという流れです。
- 3時間おきの気象予報データを3日分程度取得しています。
- 深夜0時の前に区切り線(---)を入れて、視認性を上げました。
- 基準以下の項目数によって表現を変えました。OKから「やめとき」まで、下記の5つの表現で洗濯外干しのリスクを伝えます。
- 「低気温」「無風」など、具体的な情報も伝えてその判断基準を示しています。
日時:
- OK
- たぶん大丈夫
- 注意して
- 危険やで
- やめとき
ちょこちょこいじってます。
最初は気温、湿度、風速の数字を出すだけだったのですが、「たぶん大丈夫」のような判断も入れました。
目標はWetherNewsの下記の画像レベルですが、そこはChatGPTの頑張り次第ですね。
import requests
import datetime
# OpenWeatherMap APIの設定
API_KEY = 'xxxxxxx'
LATITUDE = '34.xxx'
LONGITUDE = '135.xxx'
# 洗濯に適した条件の設定
MIN_TEMPERATURE = 12 # 最低気温(°C)
MAX_HUMIDITY = 70 # 最大湿度(%)
MIN_WIND_SPEED = 2 # 最小風速(m/s)
# APIを呼び出して天気データを取得
url = f"https://api.openweathermap.org/data/2.5/forecast?lat={LATITUDE}&lon={LONGITUDE}&appid={API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
# 洗濯に適しているかどうかの天気を評価する関数
def evaluate_forecast(forecast):
time_str = datetime.datetime.fromtimestamp(forecast['dt']).strftime('%Y-%m-%d %H:%M')
temp = forecast['main']['temp']
humidity = forecast['main']['humidity']
wind_speed = forecast['wind']['speed']
weather_conditions = forecast['weather'][0]['main'].lower()
reasons = []
if temp < MIN_TEMPERATURE:
reasons.append(f"低気温 ({temp}°C)")
if humidity > MAX_HUMIDITY:
reasons.append(f"高湿度 ({humidity}%)")
if wind_speed < MIN_WIND_SPEED:
reasons.append(f"弱風 ({wind_speed}m/s)")
if 'rain' in weather_conditions:
reasons.append("雨")
if len(reasons) == 0:
return time_str, "洗濯OK"
elif len(reasons) == 1:
return time_str, f"たぶん大丈夫 - {'、'.join(reasons)}"
elif len(reasons) == 2:
return time_str, f"注意して - {'、'.join(reasons)}"
elif len(reasons) == 3:
return time_str, f"危険やで - {'、'.join(reasons)}"
else:
return time_str, "やめとき"
# 予報データを評価する
forecasts_to_display = []
last_date = None
for forecast in data['list']:
forecast_time, message = evaluate_forecast(forecast)
forecast_date = forecast_time.split(' ')[0]
if last_date and last_date != forecast_date:
forecasts_to_display.append("---")
forecasts_to_display.append(f"{forecast_time}: {message}")
last_date = forecast_date
# 結果を表示する
for forecast in forecasts_to_display:
print(forecast)
洗濯物が乾く気温と湿度と風速、理論的背景
洗濯物が乾く条件は3つあるそうです。下記の要素が一つでもかけるとからっと乾かないそうです。かなり前に調べたので、コードには残っていましたが、出典は忘れました。
- 気温12度以上
- 湿度70%未満
- 風速2m以上
これに加えて雨や雪という天候では、そもそも乾く可能性が低くなります。それぞれのデータも基準値からどれだけ離れるかで乾き具合も変わってきます。気温も同じ12度未満であっても8度と4度では乾く時間も異なります。
ということで今回の判断基準は単純過ぎますが、毎日の洗濯物の乾き具合を見て変更していきます。目指せ洗濯マスター。
今揺れました。縦揺れ。