Переделал погоду
This commit is contained in:
parent
bba686e960
commit
40e559512c
|
@ -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) # переведено из гПА в мм рт.ст.
|
||||
|
||||
speaker.speak(f"Сейчас на улице {temperature} градусов, минимальная {temperature_min}, максимальная {temperature_max}, скорость ветра {wind_speed} метров в секунду")
|
||||
# ", давление {pressure} миллиметров ртутного столба")
|
||||
status = now.weather.detailed_status
|
||||
temperature = int(now.weather.temperature('celsius')["temp"])
|
||||
|
||||
# Начинаем собирать строку с погодой
|
||||
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 "Начало"
|
||||
|
||||
# Переход на приветствие и на "Начало"
|
||||
|
|
Loading…
Reference in New Issue