Add PetKit food watchdog + D4H raw probes

- petkit_food_check.py: watchdog для state.food (алярм мало/пусто, сброс при доливе)
- petkit_raw.py, petkit_roster.py: прямые запросы к API для отладки
- .gitignore: исключить .food_state (runtime состояние)
This commit is contained in:
hermes-home
2026-08-04 16:02:45 +00:00
parent b5c497530d
commit dace7ab46c
4 changed files with 218 additions and 0 deletions

46
petkit_roster.py Normal file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env python3
"""Сырой вывод PetKit device roster (что реально возвращает API), без парсинга."""
import asyncio, json, os
from datetime import datetime
from aiohttp import ClientSession
from petkitaio import PetKitClient
from petkitaio.constants import Endpoint
HERE = os.path.dirname(os.path.abspath(__file__))
def load_env():
p = os.path.join(HERE, ".env")
for line in open(p):
line = line.strip()
if line and not line.startswith("#") and "=" in line:
k, _, v = line.partition("=")
os.environ.setdefault(k.strip(), v.strip().strip('"').strip("'"))
async def main():
load_env()
s = ClientSession()
c = PetKitClient(
os.environ["PETKIT_EMAIL"],
os.environ["PETKIT_PASSWORD"],
s,
os.environ.get("PETKIT_REGION", "Russian Federation"),
)
await c.login()
print("=== AUTH ===")
print("user_id:", c.user_id, " group_ids:", list(c.group_ids), " base:", c.base_url)
url = f"{c.base_url}{Endpoint.DEVICE_ROSTER}"
hdr = await c.create_header()
day = str(datetime.now().date()).replace("-", "")
print(f"\n=== RAW DEVICE ROSTER (day={day}) ===")
for gid in c.group_ids:
data = {"day": day, "groupId": gid}
resp = await c._post(url, hdr, data)
print(f"--- group {gid} ---")
print(json.dumps(resp, ensure_ascii=False, indent=2))
await s.close()
asyncio.run(main())