90 lines
4.8 KiB
Markdown
90 lines
4.8 KiB
Markdown
# 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`.
|