Skip to content

Repository files navigation

Valvaka 2026

Licens: MIT Data: Valmyndigheten Status: inofficiell Ingen spårning Beroenden: 0

Live: valvaka.celestiocloud.site

En enkel live-dashboard för valnatten: hur stora Tidöpartierna (M, SD, KD, L) och oppositionen (S, V, MP, C) är just nu, varje partis andel, och hur siffrorna förändras under kvällen. Siffrorna hämtas direkt från Valmyndighetens resultatsida och uppdateras varje minut.

A small live dashboard for Sweden's 2026 general election night, showing bloc and party vote shares straight from the Election Authority's published results. Unofficial, open source, no tracking.

Vad visas

  • Blocken: Oppositionens och Tidöpartiernas sammanlagda andel av rösterna, beräknade mandat mot gränsen för egen majoritet (175), förändring sedan 2022 och vem som leder.
  • Partierna: Varje partis andel som stapel, beräknat antal mandat, förändring sedan 2022 och 4 %-spärren.
  • Utvecklingen: En linjegraf med en punkt per uppdatering från Valmyndigheten, för blocken eller alla partier. Hovra eller använd piltangenterna för att se värden och förändringen sedan föregående uppdatering. Allt finns även som tabell.
  • Räkningsläget: Var räkningen står och vad som kommer härnäst, i tre steg: vallokalernas räkning (med vilka kommuner som saknas), uppsamlingsdistrikten och den slutliga rösträkningen. Under stegen visas Valmyndighetens eget meddelande om tidplanen, och när de senast uppdaterade.
  • Kartan: Alla 6 312 valdistrikt, färgade efter största parti eller största block när de är räknade. Hovra eller tryck på ett distrikt för dess resultat, zooma in i städerna och se de senast rapporterade distrikten.

Förtroende och transparens

  • Inofficiell. Projektet är inte kopplat till eller granskat av Valmyndigheten. Det officiella resultatet finns på val.se och fastställs av Valmyndigheten.
  • Oförändrad källdata. Resultaten hämtas från samma JSON-filer som resultat.val.se själv använder och skickas vidare utan ändringar. Serverns enda tillägg är en historik med en ögonblicksbild per uppdatering.
  • Öppna beräkningar. Partiernas andelar är Valmyndighetens egna siffror (andelRoster). Blockens andel är summan av blockets partiers röster delat med antalet röster som påverkar mandatfördelningen (rosterPaverkaMandat.antalRoster). Koden finns i index.html och server.py.
  • Beräknade mandat. Valmyndigheten publicerar underlaget för mandatfördelningen under valnatten men inte själva fördelningen. Valvaka räknar därför fram mandaten enligt vallagen i mandates.py: jämkade uddatalsmetoden med 1,2 som första divisor för både de 310 fasta valkretsmandaten och landets alla 349 mandat, 4 %- och 12 %-spärrarna samt regeln om överskjutande mandat. Samma beräkning på 2022 års röster ger exakt det officiella utfallet 2022. Mandaten är inte officiella, och den slutliga fördelningen fastställs av Valmyndigheten.
  • Preliminärt. Valnattens siffror är den preliminära rösträkningen. Den slutliga räkningen kan ge andra siffror.
  • Ingen spårning. Inga cookies, ingen analys och inga tredjepartsresurser. Webbläsaren pratar bara med servern som levererar sidan. localStorage används bara för att komma ihåg grafvalet, och på statiska värdar även för historiken.
  • Kartdata. Distriktsgränserna kommer från Valmyndighetens öppna data (länsstyrelsernas valdistrikt i SWEREF 99 TM), förenklade med mapshaper till valdistrikt.topo.json. Resultaten per distrikt kommer från Valmyndighetens officiella resultatfil Val_2026_preliminar_00_RD.zip. De 314 uppsamlingsdistrikten saknar geografi och syns inte på kartan.
  • Inga beroenden. Servern använder bara Pythons standardbibliotek och sidan är ren HTML, CSS och JavaScript, så det finns ingen leveranskedja att lita på.

Kom igång

Kräver Python 3.10 eller senare.

python3 server.py

Öppna sedan http://localhost:8765.

Miljövariabel Standard Beskrivning
HOST 127.0.0.1 Adress servern lyssnar på. Använd 0.0.0.0 i en container.
PORT 8765 Port.
HISTORY_FILE history.json Var kvällens historik sparas, så att den överlever en omstart.

Driftsättning

Valmyndighetens filer skickar inga CORS-huvuden, så en webbläsare på en annan domän kan inte hämta dem direkt. Därför behöver värden skicka vidare api/results (och helst api/history) till val.se. Välj det som passar din hosting:

Hosting Filer Historik
Container eller VPS med Python server.py, districts.py, mandates.py, index.html, valdistrikt.topo.json På servern, gemensam för alla besökare
Docker Dockerfile På servern. Montera en volym på /data för att behålla den vid omstart.
PHP (Apache eller nginx) index.html, api.php, .htaccess, districts.py, mandates.py, valdistrikt.topo.json På servern, men registreras bara när någon har sidan öppen. Utan URL-omskrivning, till exempel på nginx, anropar sidan api.php direkt.
Netlify index.html, _redirects Bara i besökarens webbläsare
Vercel index.html, vercel.json Bara i besökarens webbläsare
docker build -t valvaka .
docker run -p 8080:8080 -v valvaka-data:/data valvaka

På PHP-hosting sköter cron det som server.py annars gör i bakgrunden: historiken och resultaten per distrikt till kartan. districts.py kräver Python 3.10 eller senare på servern.

* * * * * cd ~/public && php api.php >/dev/null 2>&1
* * * * * cd ~/public && python3 districts.py data/districts.json >/dev/null 2>&1

API

Endpoint Svar
GET /api/results Valmyndighetens RD_P.json oförändrad, cachad i 30 sekunder
GET /api/history [{ t, districts, left, right, parties: { S: 24.0, … } }, …], en post per uppdatering
GET /api/status { updated, regular: { counted, total }, collection: { counted, total }, pending: [{ kommun, districts }], messages, final_published }, räkningsläget
GET /api/seats { updated, counted, total, majority, parties: { S: { seats, fixed, seats2022 }, … } }, beräknad mandatfördelning
GET /api/districts { updated, parties, colors, districts: { "08600201": [rapporterat, giltiga röster, …andelar i partiordning, övriga] } }, bara räknade distrikt

Källdatan följer mönstret https://resultat.val.se/data/resultat/val2026/{val}_{område}_{P|S}.json, till exempel RD_P.json (riksdagen, hela landet, preliminärt) eller KF_10_1082_P.json (kommunvalet i Karlshamn). Alla områdeskoder finns i https://resultat.val.se/data/valgeografi/valgeografi_val2026.json. Formatet är Valmyndighetens interna och odokumenterade format och kan ändras utan förvarning.

Servern hämtar som mest en gång var 30:e sekund oavsett antal besökare, för att inte belasta Valmyndighetens tjänst.

Licens

Koden är licensierad under MIT. Licensen gäller koden i det här repot. Valresultat och distriktsgränser kommer från Valmyndigheten, som ska anges som källa. Gränserna tas fram av länsstyrelserna.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages