42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Live read-only smoke test against a real instance (default: `ken`).
|
||
|
|
|
||
|
|
NOT part of the pytest suite: it needs a reachable instance and a token at
|
||
|
|
`token_path`, so it is a separate opt-in script. Read-only, like everything
|
||
|
|
else here — it calls GET /api/config, GET /api/states and the WebSocket
|
||
|
|
`*_list` reads, nothing that writes.
|
||
|
|
|
||
|
|
services/ha-mcp/.venv/bin/python services/ha-mcp/tests/smoke_live.py [instance]
|
||
|
|
"""
|
||
|
|
import json
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
SERVICE_DIR = Path(__file__).resolve().parents[1]
|
||
|
|
sys.path.insert(0, str(SERVICE_DIR / "src"))
|
||
|
|
|
||
|
|
from ha_mcp import tools # noqa: E402
|
||
|
|
from ha_mcp.backend import LiveBackend # noqa: E402
|
||
|
|
from ha_mcp.config import get_instance, repo_root # noqa: E402
|
||
|
|
|
||
|
|
|
||
|
|
def main(argv):
|
||
|
|
instance = argv[1] if len(argv) > 1 else None
|
||
|
|
name, cfg = get_instance(instance, repo_root())
|
||
|
|
|
||
|
|
status = tools.instance_status(LiveBackend(name, cfg, repo_root()))
|
||
|
|
print("== instance_status ==")
|
||
|
|
print(json.dumps(status, indent=2, ensure_ascii=False))
|
||
|
|
if not status.get("reachable"):
|
||
|
|
return 0 if status.get("status") == "offline" else 1
|
||
|
|
|
||
|
|
entity_id = argv[2] if len(argv) > 2 else "sensor.thsalon_temperature"
|
||
|
|
print(f"\n== get_state({entity_id}) ==")
|
||
|
|
state = tools.get_state(LiveBackend(name, cfg, repo_root()), entity_id)
|
||
|
|
print(json.dumps(state, indent=2, ensure_ascii=False))
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
raise SystemExit(main(sys.argv))
|