Generator for syntetisk AMS-data — energi-/forbruksmålinger og spenningsmålinger som likner virkelige norske AMS-utleveringer. Tenkt som et utviklerverktøy for å fylle dev/test-miljøer med troverdig data uten å eksponere produksjonsdata.
Energi (langt format)
| Kolonne | Beskrivelse |
|---|---|
| LOCATIONID | Måler-ID |
| TIME | Timestamp (timeoppløsning) |
| SERIE | A+, A-, R+, R- |
| READING | Kumulativ teller (kWh) |
| VOLUME | Delta i intervallet (kWh) |
Spenning (bredt format)
| Kolonne | Beskrivelse |
|---|---|
| LOCATIONID | Måler-ID |
| TIME | Timestamp (10/60 min) |
| L1_MIN/AVG/MAX | Fase 1 |
| L2_MIN/AVG/MAX | Fase 2 |
| L3_MIN/AVG/MAX | Fase 3 |
| SYMMETRY | Usymmetri (%) |
docker compose up --buildÅpner web-UI på http://localhost:8000. API-spec på http://localhost:8000/docs.
# Backend
pip install -e .
python -m synthamp.main
# Frontend (separat shell — dev-server med proxy mot localhost:8000)
cd frontend
npm install
npm run devsynthamp list
synthamp generate --profile household --locations 50 \
--start 2026-01-01T00:00 --end 2026-01-08T00:00 \
--outages-per-year 2 --out-dir ./out
synthamp train --name min_profil --energy-csv ams.csv --voltage-csv spenning.csvVerktøyet leser dine sensitive AMS-filer (CSV) lokalt og ekstraherer et statistisk fingeravtrykk
— døgnprofil, ukeprofil, sesongprofil, fordeling for spenning, reaktiv-ratio, utfallsrate.
Resultatet lagres som en Profile-JSON. Rådata forlater aldri containeren — verktøyet
verken logger eller persister rådata.
Etter trening velger du profilen i UI og genererer syntetisk data i samme mønster.
Koden i dette repoet er fri for kraft- og personsensitiv data, og skal forbli det.
/datacommittes aldri. All input/output som kan være sensitiv lever der: importert NEMO-modell (/data/nemo), trente profiler (/data/profiles) og bakgrunnsjobber (/data/jobs). Katalogen er gitignorert og montert som et Docker-volum — den hører ikke hjemme i versjonskontroll.- Output kan være sensitivt selv om det er syntetisk. Laster du inn en ekte NEMO-modell med korrekte merkeytelser, blir generert data kraftsensitivt. Trener du en profil på et for smalt utvalg, kan den bli person-gjenkjennbar (overfitting). Klassifiser alltid resultatet ut fra hva du matet inn.
- Rådata forlater aldri maskinen. Trening beholder kun et statistisk fingeravtrykk; rådata verken logges eller persisteres.
- Ingen hemmeligheter i repoet. Tokens, nøkler og connection strings hører hjemme i miljøet (env-variabler / hemmelighetsstore), ikke i koden.
Før du pusher: sjekk at ingen *.csv, *.parquet, NEMO-RDF eller Profile-JSON er staged
(git status).
| Metode | Sti | Formål |
|---|---|---|
| GET | /api/profiles |
List alle profiler (built-in + trente) |
| GET | /api/profiles/{name} |
Hent full profil-definisjon |
| DELETE | /api/profiles/{name} |
Slett trent profil |
| POST | /api/profiles/train |
Tren ny profil fra opplastet CSV |
| POST | /api/generate |
Generer datasett (CSV/JSON/Parquet via ?format=) |
| POST | /api/generate/preview |
Lettvektsutdrag for charting |
| POST | /api/validate |
Sammenlign syntetisk vs referanse (KS-test) |
| GET | /api/health |
Helsesjekk |
# Bare energi-fil
curl -X POST 'http://localhost:8000/api/generate?format=csv&kind=energy' \
-H 'Content-Type: application/json' \
-d '{
"locations": 100,
"start": "2026-01-01T00:00:00",
"end": "2026-01-08T00:00:00",
"profile": "household",
"production_ratio": 0.2,
"outages_per_year": 3,
"overvoltage_events_per_year": 8,
"seed": 42
}' > energy.csv
# Bare spenning-fil
curl -X POST 'http://localhost:8000/api/generate?format=csv&kind=voltage' ... > voltage.csv
# Begge i én ZIP
curl -X POST 'http://localhost:8000/api/generate?format=csv&kind=both' ... > bundle.zipkind=both med format=csv|parquet returnerer en ZIP med energy.csv + voltage.csv. Med format=json returneres et JSON-objekt med begge nøklene.
Inspirert av ElHub forbruksprofiler — typiske norske nøkkelgrupper:
household— vanlig norsk husholdning, panelovn-dominerthousehold_heatpump— flatere døgnkurve, lavere vintertoppcabin— fritidsbolig, helg- og høytidsspisserindustry_small— næring 07–17, låg helgindustry_continuous— kontinuerlig produksjonprosumer_solar— husholdning + ~7 kWp sol
Last opp en referanse-CSV og kjør valideringen. Returnerer:
- KS-statistikk på energifordeling (lav = god match)
- Døgnprofil-korrelasjon (Pearson)
- KS-statistikk på spenning (hvis tilgjengelig)
- Kommentarer om hvor synthetic-data skiller seg
synthamp/ # Python-pakke
├── generator/ # Energi + spenning + hendelser (utfall, over/under)
├── profiles/ # Built-in + trent profil-lagring
├── training/ # CSV → statistisk profil
├── validation/ # KS-test + profil-korrelasjon
├── api.py # FastAPI
└── cli.py # synthamp CLI
frontend/ # React + Vite, builds → /app/frontend i container
Internt verktøy. Ingen ekstern lisens satt enda.