Переделал погоду
This commit is contained in:
parent
bba686e960
commit
40e559512c
|
@ -54,7 +54,6 @@ def init(assistant_name):
|
||||||
|
|
||||||
def work():
|
def work():
|
||||||
"""Обрабатывает конечный автомат"""
|
"""Обрабатывает конечный автомат"""
|
||||||
global machine
|
|
||||||
global current_state
|
global current_state
|
||||||
|
|
||||||
while(True):
|
while(True):
|
||||||
|
@ -82,25 +81,28 @@ def switchToTime():
|
||||||
speaker.speak(f"Сейчас {now.hour} часов, {now.minute} минут")
|
speaker.speak(f"Сейчас {now.hour} часов, {now.minute} минут")
|
||||||
return "Начало"
|
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():
|
def switchToWeather():
|
||||||
global weather_api_key
|
|
||||||
|
|
||||||
# speaker.speak("Дома?")
|
|
||||||
# word = input().lower() # Пока считаем с клавиатуры предложение
|
|
||||||
# if (word == "да"):
|
|
||||||
# location = "Home"
|
|
||||||
# else:
|
|
||||||
# speaker.speak("Назовите локацию")
|
|
||||||
# location = input().lower() # Пока считаем с клавиатуры предложение
|
|
||||||
location = "Murino,RU"
|
location = "Murino,RU"
|
||||||
try:
|
try:
|
||||||
open_weather_map = OWM(weather_api_key)
|
open_weather_map = OWM(weather_api_key)
|
||||||
|
open_weather_map.config['language'] = 'ru' # Язык результатов
|
||||||
|
|
||||||
# запрос данных о текущем состоянии погоды
|
# запрос данных о текущем состоянии погоды
|
||||||
weather_manager = open_weather_map.weather_manager()
|
now = open_weather_map.weather_manager().weather_at_place(location)
|
||||||
observation = weather_manager.weather_at_place(location)
|
forecast = open_weather_map.weather_manager().forecast_at_place(location, '3h') # 3h вернет недельный, так как daily не работает
|
||||||
weather = observation.weather
|
|
||||||
|
|
||||||
except:
|
except:
|
||||||
speaker.speak("Извините. Ошибка запроса к серверу погоды")
|
speaker.speak("Извините. Ошибка запроса к серверу погоды")
|
||||||
|
@ -108,16 +110,20 @@ def switchToWeather():
|
||||||
return "Начало"
|
return "Начало"
|
||||||
|
|
||||||
# разбивание данных на части для удобства работы с ними
|
# разбивание данных на части для удобства работы с ними
|
||||||
status = weather.detailed_status
|
status = now.weather.detailed_status
|
||||||
temperature = int(weather.temperature('celsius')["temp"])
|
temperature = int(now.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"])
|
weather = f"Сейчас {status} {temperature} градусов."
|
||||||
# pressure = int(weather.pressure["press"] / 1.333) # переведено из гПА в мм рт.ст.
|
|
||||||
|
|
||||||
speaker.speak(f"Сейчас на улице {temperature} градусов, минимальная {temperature_min}, максимальная {temperature_max}, скорость ветра {wind_speed} метров в секунду")
|
|
||||||
# ", давление {pressure} миллиметров ртутного столба")
|
|
||||||
|
|
||||||
|
# Если в прогнозе есть дождь
|
||||||
|
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 "Начало"
|
return "Начало"
|
||||||
|
|
||||||
# Переход на приветствие и на "Начало"
|
# Переход на приветствие и на "Начало"
|
||||||
|
|
Loading…
Reference in New Issue