ardo 70d41426dd varvusensor + nutikodu-web: kalibratsiooni robustsus 1 hafta önce
..
static 234d16782b nutikodu-web: Varv — kalibratsiooni moistlikkuse kontroll + viimase mootmise nait 1 hafta önce
Dockerfile 12a8e70c8b nutikodu-web: Varv — veebipohine tume/valge kalibreerimine (auth) 1 hafta önce
README.md 12a8e70c8b nutikodu-web: Varv — veebipohine tume/valge kalibreerimine (auth) 1 hafta önce
app.py 70d41426dd varvusensor + nutikodu-web: kalibratsiooni robustsus 1 hafta önce
app.py.bak.1791389719 66a875dc4d varundus 2026-10-08 07:00 2 hafta önce
color.py 12a8e70c8b nutikodu-web: Varv — veebipohine tume/valge kalibreerimine (auth) 1 hafta önce
requirements.txt 4326152a0f nutikodu-web: Varv — mõõtja sisse/välja lüliti (ainult sisselogitult) 1 hafta önce

README.md

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.
  • Välistemperatuur (eraldi koguja, Open-Meteo) kuvatakse samal graafikul rohelise joonena; niiskus/tuul/sademed salvestatakse andmebaasi.
  • Viimaste väärtuste kaardid + lahtiste häirete ülevaade (60 s värskendus).
  • Vaheleht "Transport" — tänased bussiväljumised Suuremõisa külast (peatus.ee) ja Heltermaa–Rohuküla praamiajad + seisakud/tühistused (praamid.ee) ning Väinamere ilmahoiatuse kontekst (RII, parim pingutus). 60 s värskendus.
  • Vaheleht "Värv" — AS7341 spektri-värvisensori tulemused (uus67.varvus): praegune värv, värviruutude ruudustik, kanalite spekter (f1–f8), värvitelg (viimased 24 h tunnipõhiselt) ja kromaatilisuse (x, y) hajuvus. 20 s värskendus. Sisselogitult saab mõõtmise sisse/välja lülitada (MQTT, varvus/switch/sensor); OFF peatab ESP32 publitseerimise → ka ClickHouse'i kirjutamise. Sisselogitult saab ka salvestada tume/valge referentsi (uus67.varvus_calib) ja vaadata kalibreeritud värvi (R = (S−D)/(W−D)).
  • 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/valisilm?from=&to=&agg=hour\|day välistemperatuuri aegrida (temp, niiskus, tuul, sademed)
GET /api/ukseandur?from=&to=&device= 🔒 ukseolekute sündmused
GET /api/vead?from=&to=&device= 🔒 häirete sündmused
GET /api/liikumine?from=&to=&device= 🔒 liikumise/kohalolu sündmused
GET /api/energia?from=&to=&device=&agg=hour\|day 🔒 pistikute energiatarve
GET /api/uus67_latest 🔒 viimane energia + liikumine
GET /api/latest viimased väärtused (lahtised häired ainult sisselogitult)
GET /api/buss?limit=12 Suuremõisa küla järgmised bussiväljumised (peatus.ee, avalik)
GET /api/praam?days=1 Heltermaa–Rohuküla väljumised + staatus + ilmahoiatuse kontekst (praamid.ee, avalik)
GET /api/varv/latest?limit=60 AS7341 viimased mõõtmised (rgb, kanalid f1–f8, kromaatilisus) — avalik
GET /api/varv/history?hours=24 tunnipõhine keskmine värv (värvitelg) — avalik
GET /api/varv/power 🔒 värvisensori mõõtmise olek (ON/OFF)
POST /api/varv/power 🔒 lülita mõõtmine sisse/välja (keha {"on":true\|false})
GET /api/varv/calib tume/valge referents (avalik)
POST /api/varv/calib 🔒 salvesta tume/valge referents (keha {"kind":"dark"\|"white","last":5})
GET /api/me kas päring on autenditud ({"authed":bool})
GET /health tervis

Ajavahemikud kujul YYYY-MM-DD[ HH:MM[:SS]] või ISO (T-eraldaja). Vaikimisi viimased 7 päeva.

🔒 = nõuab autentimist (Bearer-token automaatikale või sessiooniküpsis brauserile). Ülejäänud on avalikud.

Värvisensori juhtimine vajab keskkonnamuutujaid (dev/.env): VARV_MQTT_HOST=mqtt.odamus.com, VARV_MQTT_PORT=8883, VARV_MQTT_TLS=true, VARV_MQTT_USER, VARV_MQTT_PASS (edge-brokeri konto).

Autentimine

  • Brauser: ava /login, sisesta parool → allkirjastatud sessiooniküpsis (HttpOnly, SameSite=Lax). Välja: /logout.
  • API / automaatika: saada päis Authorization: Bearer <WEB_ACCESS_TOKEN>.
  • Kaitstud: kõik ukseandur / vead / liikumine / energia / uus67_latest päringud. Avalikud on ainult temp/niiskus/väli/meta.
  • Login-rate-limit: 5 ebaõnnestunud katset / 300 s / IP (libisev aken).

Näide (API-integratsioon, nt Uptime Kuma, curl, skript)

# Kaitstud lõpp-punkt Bearer-tokeniga:
curl -H "Authorization: Bearer $WEB_ACCESS_TOKEN" \
     "http://100.87.1.24:8095/api/uus67_latest"

# Tervisekontroll (avalik, Uptime Kuma monitor):
curl "http://100.87.1.24:8095/health"

WEB_ACCESS_TOKEN väärtus on nutikodu-web .env-is (ohmu: /opt/docker-compose/dev/.env). Ära pane tokenit URL-i ega jaga avalikult.

Keskkonnamuutujad

Muutuja Vaikimisi Kirjeldus
CH_URL http://clickhouse:8123 ClickHouse HTTP
CH_DB uus67 andmebaas
CH_USER / CH_PASS zigbee / – ainult SELECT uus67.*
WEB_PASSWORD tühi brauseri sisselogimise parool (/login)
WEB_ACCESS_TOKEN tühi API Bearer-token (automaatikaks)
WEB_SECRET_KEY juhuslik sessiooniküpsise allkirjastamise võti (sea püsivaks!)
SESSION_MAX_AGE 604800 sessiooni kehtivus sekundites (7 p)
LOGIN_MAX_ATTEMPTS 5 ebaõnnestunud logimiskatsed enne blokeeringut
LOGIN_WINDOW_SECONDS 300 logimise blokeerimise aken (sek)
BUS_GRAPHQL peatus.ee Digitransit bussigraafiku GraphQL API
BUS_STOPS estonia:24703,estonia:27213 Suuremõisa küla GTFS peatus-ID-d (komaga)
PRAAM_API https://www.praamid.ee/online/events praamigraafiku API (HR=Heltermaa→Rohuküla)
TRANSPORT_TTL 60 bussi/praami väliste päringute vahemälu (sek)

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).

# 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).
  • Autentimine: tehtud 2026-10-07 (sessioon + Bearer-token; vt "Autentimine").