Files
domestic-scripts/README.md

90 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.