# Nutikodu veebiliides Interaktiivne ajatelg `uus67` skeemi zigbee andurite andmetele (ClickHouse). FastAPI backend + üks staatiline leht (ECharts). Eestikeelne, mobiilisõbralik, tume/hele teema. ## Ligipääs | Keskkond | URL | |----------|-----| | Avalik | https://nutikodu.odamus.com | | Tailscale | http://100.87.1.24:8095 · http://ohmu.tail20e23.ts.net:8095 | ## Funktsioonid (v1) - Temperatuuri ja niiskuse ajatelg (kahe teljega), interaktiivne zoom (pinch/pan). - Perioodivalik: 24 h / 7 p / 30 p / 90 p / 1 a / Kõik + kohandatud vahemik. - Agregeerimine: tund / päev. - **Täidetud tunnid** (kui andur ei olnud kättesaadav) on koguja poolt eelmise väärtusega asendatud (`taidetud = true`) ja kuvatakse graafikul **tühjade ringidena** — aegreas ei teki auke. - Viimaste väärtuste kaardid + lahtiste häirete ülevaade (60 s värskendus). - PWA-manifest (installitav telefonis), `noindex`. ## API | Otspunkt | Kirjeldus | |----------|-----------| | `GET /api/meta` | seadmed, tz, andmete ulatus | | `GET /api/temperatuur?from=&to=&device=&agg=hour\|day` | aegrida | | `GET /api/ukseandur?from=&to=&device=` | ukseolekute sündmused (UI tuleb hiljem) | | `GET /api/vead?from=&to=&device=` | häirete sündmused | | `GET /api/latest` | viimased väärtused + lahtised häired | | `GET /health` | tervis | Ajavahemikud kujul `YYYY-MM-DD[ HH:MM[:SS]]` või ISO (T-eraldaja). Vaikimisi viimased 7 päeva. ## Keskkonnamuutujad | Muutuja | Vaikimisi | Kirjeldus | |---------|-----------|-----------| | `CH_URL` | `http://clickhouse:8123` | ClickHouse HTTP | | `CH_DB` | `uus67` | andmebaas | | `CH_USER` / `CH_PASS` | `zigbee` / – | ainult SELECT `uus67.*` | | `WEB_ACCESS_TOKEN` | tühi | kui seatud, nõuab `?token=` või `X-Access-Token` päist | ## Struktuur ``` nutikodu/web/ ├── app.py # FastAPI backend (ClickHouse HTTP, JSONEachRow) ├── requirements.txt ├── Dockerfile # python:3.12-slim, port 8095 └── static/ ├── index.html # üks leht, eestikeelne ├── style.css # light/dark, mobiil-first ├── app.js # ECharts ajatelg, perioodivalik, teema ├── manifest.webmanifest ├── icon.svg └── vendor/echarts.min.js ``` ## Arendus / juurutus Kood elab workspace'is (`nutikodu/web/`) ja on juurutatud ohmu'le `/opt/docker-compose/dev/nutikodu-web/` (teenus `dev/docker-compose.yml`-is, võrkudes `main_ai_network` + `prod_net`). ```bash # Muudatuse järel (ohmu): scp app.py static/* ohmu:/opt/docker-compose/dev/nutikodu-web/... docker compose -f /opt/docker-compose/dev/docker-compose.yml up -d --build nutikodu-web docker logs -f nutikodu-web ``` ### Avalik ligipääs (2026-09-17) - **DNS:** DigitalOcean A-kirje `nutikodu.odamus.com` → `188.166.84.16`. - **Edge Caddy** (`kanad`, `/opt/edge/Caddyfile`): `nutikodu.odamus.com { reverse_proxy http://100.91.118.16:80 }`. - **Sisemine Caddy** (ohmu `prod_caddy`, `/opt/prod/Caddyfile`): `nutikodu.odamus.com:80 { reverse_proxy nutikodu-web:8095 }`. - TLS väljastab edge automaatselt. ## Edasi (järgmised iteratsioonid) - Ukseanduri olekuribad ajateljel (`/api/ukseandur` on valmis). - Häirete markerid/annotatsioonid (`/api/vead` on valmis). - Võimalik `WEB_ACCESS_TOKEN` avaliku lehe kaitseks.