Переделал погоду

This commit is contained in:
parent bba686e960
commit 40e559512c
1 changed files with 27 additions and 21 deletions

View File

@ -54,7 +54,6 @@ def init(assistant_name):
def work():
"""Обрабатывает конечный автомат"""
global machine
global current_state
while(True):
@ -82,25 +81,28 @@ def switchToTime():
speaker.speak(f"Сейчас {now.hour} часов, {now.minute} минут")
return "Начало"
def _precipitation_today_message(precipitations:list):
# Собираем время для проверки что осадки в будущем сегодня
today = datetime.datetime.now().replace(hour = 23, minute = 59, second = 59) # Зададим конец дня
for precipitation in precipitations:
# Время осадков
precipitation_time = datetime.datetime.fromisoformat(precipitation.reference_time('iso')).replace(tzinfo=None) # во избежания ошибок сравнения относительного и абсолютного времени
# Если осадки в будущем сегодня
if datetime.datetime.now() <= precipitation_time <= today:
return f'Обещают {precipitation.detailed_status} в {precipitation_time.hour} часов' # Достаточно сказать об одних осадках
return '' # Если осадков подходящих не нашлось - пустая строка
# Переход на "Вопрос локации погоды"
def switchToWeather():
global weather_api_key
# speaker.speak("Дома?")
# word = input().lower() # Пока считаем с клавиатуры предложение
# if (word == "да"):
# location = "Home"
# else:
# speaker.speak("Назовите локацию")
# location = input().lower() # Пока считаем с клавиатуры предложение
location = "Murino,RU"
try:
open_weather_map = OWM(weather_api_key)
open_weather_map.config['language'] = 'ru' # Язык результатов
# запрос данных о текущем состоянии погоды
weather_manager = open_weather_map.weather_manager()
observation = weather_manager.weather_at_place(location)
weather = observation.weather
now = open_weather_map.weather_manager().weather_at_place(location)
forecast = open_weather_map.weather_manager().forecast_at_place(location, '3h') # 3h вернет недельный, так как daily не работает
except:
speaker.speak("Извините. Ошибка запроса к серверу погоды")
@ -108,16 +110,20 @@ def switchToWeather():
return "Начало"
# разбивание данных на части для удобства работы с ними
status = weather.detailed_status
temperature = int(weather.temperature('celsius')["temp"])
temperature_min = int(weather.temperature('celsius')["temp_min"])
temperature_max = int(weather.temperature('celsius')["temp_max"])
wind_speed = int(weather.wind()["speed"])
# pressure = int(weather.pressure["press"] / 1.333) # переведено из гПА в мм рт.ст.
status = now.weather.detailed_status
temperature = int(now.weather.temperature('celsius')["temp"])
speaker.speak(f"Сейчас на улице {temperature} градусов, минимальная {temperature_min}, максимальная {temperature_max}, скорость ветра {wind_speed} метров в секунду")
# ", давление {pressure} миллиметров ртутного столба")
# Начинаем собирать строку с погодой
weather = f"Сейчас {status} {temperature} градусов."
# Если в прогнозе есть дождь
if forecast.will_have_rain():
weather += _precipitation_today_message(forecast.when_rain())
# Если в прогнозе есть снег
if forecast.will_have_snow():
weather += _precipitation_today_message(forecast.when_rain())
speaker.speak(weather)
return "Начало"
# Переход на приветствие и на "Начало"