doc: поправил зависимости и расписание
This commit is contained in:
@@ -0,0 +1,312 @@
|
||||
from datetime import datetime
|
||||
|
||||
from schedule import (
|
||||
ScheduleActionType,
|
||||
ScheduleService,
|
||||
load_schedule,
|
||||
)
|
||||
|
||||
|
||||
SCHEDULE_FILE = "config/schedule.yaml"
|
||||
|
||||
|
||||
def print_result(title, result):
|
||||
print()
|
||||
print("=" * 70)
|
||||
print(title)
|
||||
print("=" * 70)
|
||||
|
||||
print(f"Enabled: {result.enabled}")
|
||||
|
||||
if result.current is not None:
|
||||
print(
|
||||
f"Current: "
|
||||
f"{result.current.when} | "
|
||||
f"{result.current.template} | "
|
||||
f"{result.current.point.action.type}"
|
||||
)
|
||||
else:
|
||||
print("Current: None")
|
||||
|
||||
if result.next is not None:
|
||||
print(
|
||||
f"Next: "
|
||||
f"{result.next.when} | "
|
||||
f"{result.next.template} | "
|
||||
f"{result.next.point.action.type}"
|
||||
)
|
||||
else:
|
||||
print("Next: None")
|
||||
|
||||
print(f"Auto: {result.auto_active}")
|
||||
print(f"Settings: {result.scheduled_settings.to_dict()}")
|
||||
|
||||
|
||||
def main():
|
||||
print("Загрузка schedule.yaml...")
|
||||
|
||||
config = load_schedule(SCHEDULE_FILE)
|
||||
|
||||
print("YAML успешно загружен и проверен.")
|
||||
print()
|
||||
|
||||
service = ScheduleService(config)
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 1
|
||||
# Понедельник 06:30
|
||||
#
|
||||
# Текущая точка должна быть 00:00 power off.
|
||||
# Следующая — 07:00.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 6, 30)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 1 — Monday 06:30",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.current.when.hour == 0
|
||||
assert result.next.when.hour == 7
|
||||
|
||||
assert result.auto_active is False
|
||||
|
||||
assert result.scheduled_settings.power is False
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 2
|
||||
# Понедельник 07:30
|
||||
#
|
||||
# Должны накопиться параметры из точки 07:00.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 7, 30)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 2 — Monday 07:30",
|
||||
result,
|
||||
)
|
||||
|
||||
settings = result.scheduled_settings
|
||||
|
||||
assert result.current.when.hour == 7
|
||||
assert result.next.when.hour == 9
|
||||
|
||||
assert result.auto_active is False
|
||||
|
||||
assert settings.power is True
|
||||
assert settings.speed == 2
|
||||
assert settings.heater is True
|
||||
assert settings.target_temp == 20
|
||||
assert settings.mode == "outside"
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 3
|
||||
# Понедельник 10:00
|
||||
#
|
||||
# В 09:00 поменялась только скорость.
|
||||
#
|
||||
# Остальные значения должны сохраниться от 07:00.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 10, 0)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 3 — Monday 10:00",
|
||||
result,
|
||||
)
|
||||
|
||||
settings = result.scheduled_settings
|
||||
|
||||
assert result.current.when.hour == 9
|
||||
assert result.next.when.hour == 13
|
||||
|
||||
assert settings.power is True
|
||||
assert settings.speed == 1
|
||||
assert settings.heater is True
|
||||
assert settings.target_temp == 20
|
||||
assert settings.mode == "outside"
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 4
|
||||
# Понедельник 13:10
|
||||
#
|
||||
# Последняя точка AUTO.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 13, 10)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 4 — Monday 13:10 / AUTO",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.current.point.action.type == ScheduleActionType.AUTO
|
||||
assert result.auto_active is True
|
||||
|
||||
assert result.next.when.hour == 17
|
||||
assert result.next.when.minute == 0
|
||||
|
||||
# Накопленные настройки при AUTO не стираются.
|
||||
assert result.scheduled_settings.speed == 1
|
||||
assert result.scheduled_settings.power is True
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 5
|
||||
# Понедельник 17:10
|
||||
#
|
||||
# AUTO закончился.
|
||||
# Speed должен стать 3.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 17, 10)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 5 — Monday 17:10",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.auto_active is False
|
||||
|
||||
assert result.current.when.hour == 17
|
||||
assert result.current.when.minute == 0
|
||||
|
||||
assert result.next.when.hour == 17
|
||||
assert result.next.when.minute == 30
|
||||
|
||||
assert result.scheduled_settings.speed == 3
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 6
|
||||
# Понедельник 17:40
|
||||
#
|
||||
# Снова AUTO.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 17, 40)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 6 — Monday 17:40 / AUTO",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.auto_active is True
|
||||
|
||||
assert result.current.when.hour == 17
|
||||
assert result.current.when.minute == 30
|
||||
|
||||
assert result.next.when.hour == 23
|
||||
|
||||
# Последний scheduled speed всё равно должен помнить 3.
|
||||
assert result.scheduled_settings.speed == 3
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 7
|
||||
# Понедельник 23:15
|
||||
#
|
||||
# Heater off, speed 1.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 14, 23, 15)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 7 — Monday 23:15",
|
||||
result,
|
||||
)
|
||||
|
||||
settings = result.scheduled_settings
|
||||
|
||||
assert result.auto_active is False
|
||||
assert settings.speed == 1
|
||||
assert settings.heater is False
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 8
|
||||
# Суббота 09:30
|
||||
#
|
||||
# Проверяем переключение на weekend.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 19, 9, 30)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 8 — Saturday 09:30",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.current.template == "weekend"
|
||||
assert result.next.template == "weekend"
|
||||
|
||||
settings = result.scheduled_settings
|
||||
|
||||
assert settings.power is True
|
||||
assert settings.speed == 1
|
||||
assert settings.heater is True
|
||||
assert settings.target_temp == 20
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 9
|
||||
# Суббота 10:30
|
||||
#
|
||||
# Weekend AUTO.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 19, 10, 30)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 9 — Saturday 10:30 / AUTO",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.current.template == "weekend"
|
||||
assert result.auto_active is True
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# TEST 10
|
||||
# Проверяем переход через полночь.
|
||||
#
|
||||
# Вторник 00:30.
|
||||
# В 00:00 вторника уже должна действовать power off.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
result = service.resolve(
|
||||
datetime(2026, 9, 15, 0, 30)
|
||||
)
|
||||
|
||||
print_result(
|
||||
"TEST 10 — Tuesday 00:30",
|
||||
result,
|
||||
)
|
||||
|
||||
assert result.current.when.day == 15
|
||||
assert result.current.when.hour == 0
|
||||
|
||||
assert result.scheduled_settings.power is False
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("ALL SCHEDULE TESTS PASSED")
|
||||
print("=" * 70)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user