Files
domestic-scripts/README.md

4.8 KiB
Raw Blame History

domestic-scripts

Домашние скрипты Hermes. Пока — интеграция с умными устройствами PetKit (кормушка и автопоилка).

Структура

Файл Назначение
petkit_cli.py Основной CLI — статус, кормление, управление фонтаном, дамп
petkit_food_check.py Watchdog уровня корма — для cron-уведомлений
petkit_raw.py Прямой HTTP-запрос к API PetKit (отладка, без парсинга)
petkit_roster.py Сырой вывод device_roster — какие устройства на аккаунте

Установка / настройка

# venv (изолированный, не трогаем систему)
cd domestic-scripts
python3 -m venv .venv
.venv/bin/pip install petkitaio

# креды — создать .env рядом со скриптами (НЕ коммитим!)
cat > .env <<'EOF'
PETKIT_EMAIL=ваш@email
PETKIT_PASSWORD=пароль
PETKIT_REGION=Russian Federation
EOF

.env и .venv в .gitignore — в репо не попадают.

CLI (petkit_cli.py)

.venv/bin/python petkit_cli.py status      # статус всех устройств
.venv/bin/python petkit_cli.py feed 10     # покормить 10 г (первый фидер)
.venv/bin/python petkit_cli.py fountain smart  # фонтан: режим smart/normal
.venv/bin/python petkit_cli.py dump        # полный дамп данных (после обработки)

Watchdog корма (petkit_food_check.py)

Следит за датчиком уровня корма state.food фидера:

  • food: 2 — достаточно
  • food: 1 — на исходе → алерт «НА ИСХОДЕ»
  • food: 0 — почти пусто → алерт «ПОЧТИ ПУСТО»
  • возврат к 2 после долива → «корм долили» (сброс)

Логика:

  • Алертит только при переходе состояния (не спамит при каждом запуске).
  • Последний уровень хранится в .food_state (runtime, в .gitignore).
  • Печатает в stdout: пусто = тихий прогон, непусто = событие для уведомления.

Cron (watchdog no_agent)

Обёртка ~/./scripts/petkit-food-check.sh вызывает скрипт в фоне. Крон каждые 4ч: непустой stdout → уведомление в чат; пустой → тишина. Фиксируется через cronjob no_agent=true.

⚠️ Важно про модели PetKit

Семейный (вторичный) аккаунт

Учётка PetKit рассчитана на один активный вход. Использование API выкидывает из мобильного приложения. Решение — завести family share на вторичный аккаунт и логиниться им. Устройства должны быть расшарены на этот аккаунт (в приложении: основная учётка → Family).

Регионы

Регистр регионов задаётся по имени страны (например Russian Federation → сервер api-ru.petkit.cn). Неверный регион даёт ошибку PetKit Error 125: Unregistered e-mail.

Поддержка типов (фидер D4H)

Библиотека petkitaio классифицирует фидеры по списку FEEDER_LIST в .venv/.../petkitaio/constants.py. По умолчанию там нет типа D4H (YumShare Solo / D4-серия) — из-за этого фидер молча игнорируется (feeders: {}), хотя в облаке есть.

Фикс: добавить D4H в FEEDER_LIST:

FEEDER_LIST = ['D3', 'D4', 'D4s', 'D4H', 'Feeder', 'FeederMini']

Правка в venv слетает при переустановке petkitaio. Если обновили пакет — повторить.

Уровень корма

Поле уровня находится в data['state']['food']. feedState содержит статистику кормлений (суммарные граммы, число раз, время кормёжек).

Устройства (текущие)

Устройство Облачный id Тип
YUMSHARE SOLO WITH CAMERA (фидер) 300027445 D4H
EVERSWEET 3 PRO (UVC) (фонтан) 400081877 W5

id могут отличаться на другои аккаунте — уточняйте через petkit_cli.py status.