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.