Supabase & Excel – Väderdata från SMHI

Projekt: BitcoinAkademin / NySite  ·  Station: Hörby A (53530)  ·  Uppdaterad: 2026-05-20

SMHI API
Python-skript
Supabase (PostgreSQL)
Power Query
Excel
1
Supabase – Tabeller & RLS

Skapa tabeller

-- Ta bort gammal tabell
DROP TABLE IF EXISTS klimat;

-- Temperatur per timme
CREATE TABLE klimat_temperatur (
    id          bigserial PRIMARY KEY,
    station_id  integer        NOT NULL,
    tidpunkt    timestamptz    NOT NULL,
    temperatur  numeric(5,1),
    UNIQUE (station_id, tidpunkt)
);

-- Nederbörd per dygn
CREATE TABLE klimat_nederbord (
    id          bigserial PRIMARY KEY,
    station_id  integer     NOT NULL,
    datum       date        NOT NULL,
    nederbord   numeric(6,1),
    UNIQUE (station_id, datum)
);

Row Level Security (RLS)

Viktigt: Utan dessa policies blockerar Supabase alla anrop från anon-nyckeln.
ALTER TABLE klimat_temperatur ENABLE ROW LEVEL SECURITY;
ALTER TABLE klimat_nederbord  ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Tillåt insert" ON klimat_temperatur
    FOR INSERT TO anon WITH CHECK (true);
CREATE POLICY "Tillåt insert" ON klimat_nederbord
    FOR INSERT TO anon WITH CHECK (true);

CREATE POLICY "Tillåt select" ON klimat_temperatur
    FOR SELECT TO anon USING (true);
CREATE POLICY "Tillåt select" ON klimat_nederbord
    FOR SELECT TO anon USING (true);

CREATE POLICY "Tillåt update" ON klimat_temperatur
    FOR UPDATE TO anon USING (true);
CREATE POLICY "Tillåt update" ON klimat_nederbord
    FOR UPDATE TO anon USING (true);
2
Supabase – View (daglig aggregering)

Aggregerar timtemperaturer till dagliga medel-, max- och minvärden med korrekt tidszon.

CREATE VIEW klimat_daglig AS
SELECT
    station_id,
    DATE(tidpunkt AT TIME ZONE 'Europe/Stockholm') AS datum,
    ROUND(AVG(temperatur)::numeric, 1)             AS medeltemp,
    MAX(temperatur)                                AS maxtemp,
    MIN(temperatur)                                AS mintemp
FROM klimat_temperatur
GROUP BY station_id, DATE(tidpunkt AT TIME ZONE 'Europe/Stockholm')
ORDER BY datum;
3
Supabase – API & URL-exempel
ParameterVärde
Project URLhttps://glahkfnkwokmckimmsgb.supabase.co/rest/v1
Anon KeyeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Hämta daglig data

https://glahkfnkwokmckimmsgb.supabase.co/rest/v1/klimat_daglig
  ?select=datum,medeltemp,maxtemp,mintemp
  &station_id=eq.53530
  &order=datum.asc

Filtrera på datum

-- Lägg till i URL:en för att filtrera senaste månaden
&datum=gte.2026-04-22

Headers (krävs alltid)

NyckelVärde
apikeyanon-nyckeln
AuthorizationBearer + anon-nyckeln
4
Python-skript

smhi_till_supabase.py

Hämtar senaste 4 månadernas data från SMHI och skriver till Supabase med upsert.

  • Kör via: kör_smhi.bat
  • Placering: ...\BitcoinAkademin\NySite\Script\
  • Dubletter ignoreras automatiskt (on_conflict)

access_till_supabase.py

Migrerar historisk data från Access-databasen SMHI.accdb (1995–).

  • Kör via: kör_access_import.bat
  • Källa: ...\Aktier\Data\SMHI.accdb
  • Tabeller i Access: Data (temp), Data nederbörd

SMHI API – parametrar

ParameterBeskrivningGranularitet
1LufttemperaturTimvärden
5NederbördsmängdDygnsvärden
# Bas-URL
https://opendata-download-metobs.smhi.se/api/version/latest
/parameter/{p}/station/{s}/period/latest-months/data.json
5
Excel – Power Query

Anslutning steg för steg

1
Gå till Data → Hämta data → Från webb, klistra in Supabase-URL
2
Vid autentisering: välj Anonym och klicka Anslut
3
Öppna Avancerad redigerare och ersätt Web.Contents(...)
4
Lista med Records visas → klicka Till tabell → OK
5
Klicka dubbelpilarna ⇄ på kolumnrubriken för att expandera
6
Klicka Stäng och läs in

M-kod med headers

Web.Contents(
    "https://glahkfnkwokmckimmsgb.supabase.co/rest/v1/klimat_daglig",
    [Headers=[
        apikey="<anon key>",
        Authorization="Bearer <anon key>"
    ]]
)

Tips

  • Filtrera i URL:en istället för i Power Query för bättre prestanda
  • Aggregering görs i Supabase-vyn, inte i Excel
  • Tryck Uppdatera alla för att hämta ny data
6
Stationsinfo – Hörby A
FältVärde
StationHörby A
Station-ID53530
Latitud55.8624
Longitud13.6673
Höjd112.8 m
Data från1995-08-01