# 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` — какие устройства на аккаунте | ## Установка / настройка ```bash # 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`) ```bash .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`: ```python 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`.