Shelly 1PM Gen3 vs Shelly Plus 2PM: Bästa WiFi-reläet för att tidsstyra varmvattenberedaren – och vilket elavtal som lönar sig

Shelly 1PM Gen3 är det bästa reläet för en enskild varmvattenberedare: det klarar 16 A (3 680 W vid 230 V) på sin enda kanal, medan Shelly Plus 2PM klarar 10 A per kanal (2 300 W) och 16 A totalt. För beredare över cirka 2 kW och för alla trefasberedare bör Shelly enbart styra en kontaktor som bryter själva effektkretsen. Fast elinstallation får endast utföras av auktoriserad elinstallatör eller ett registrerat elinstallationsföretag. Tidsstyrning sparar bara pengar med timpris- eller kvartsprisavtal, aldrig med rörligt månadspris. Håll beredaren på minst 60 °C för att motverka legionella.

Innehållsförteckning

💡 Vår rekommendation

För de flesta som undrar hur man tidsstyr varmvattenberedaren mot timpris rekommenderar vi Kärnfull Energi.

Kärnfull erbjuder kvartspris utan påslag på inköpspriset (0 öre/kWh) och en månadsavgift på 39 kr, den lägsta avgiftsnivån i vår jämförelse. Eftersom Shelly-reläet och skriptet sköter optimeringen behöver du ingen avancerad automations-app från elbolaget, och då väger låga fasta kostnader tyngst: för ett hushåll som förbrukar 20 000 kWh/år är avtalsavgifterna cirka 1 320 kr lägre per år än hos Tibber (49 kr/mån + 6 öre/kWh). Avtalet saknar bindningstid och Trustpilot-betyget ligger på cirka 4.2–4.6/5.

Optimera varmvattnet mot dagens timpriser – byt till timprisavtal här →

🔧 Shelly 1PM Gen3 vs Plus 2PM: tekniska skillnader

Båda reläerna är enfasreläer med effektmätning och stöd för egna skript, och båda kräver nolla (N) för att fungera. Skillnaden ligger i antal kanaler och maximal belastning per kanal.

ModellKanalerMaximal lastEffektmätningEgna skriptInköp och dokumentation
Shelly 1PM Gen3116 A, 3 680 W vid 230 V (resistiv last)JaJa (mJS)Produktsida hos Shelly
Shelly Plus 2PM2, på samma fas10 A per kanal (2 300 W), 16 A totalt (18 A topp)Ja, per kanalJa (mJS)Dokumentation hos Shelly

Shelly anger att 1PM Gen3 har en förbättrad processor och mer minne än föregångaren. För Plus 2PM gäller att kanalerna delar 16 A, så två 2 kW-beredare på samma enhet ligger på 17,4 A tillsammans och överskrider totalgränsen. Om du behöver montera reläet i elcentralen på DIN-skena är Shelly Pro 1PM ett alternativ med 16 A utgång och skydd mot överström, övertemperatur och överspänning, enligt Shellys produktsida.

🎯 Vilket relä ska du välja?

För en enskild beredare är Shelly 1PM Gen3 det enklaste och säkraste valet. Du får 16 A på kanalen, vilket räcker för alla enfaselement upp till 3 680 W, och du betalar inte för en andra kanal du inte använder. Shelly Plus 2PM passar när du vill styra två separata laster, till exempel två beredare eller en beredare och en golvvärmekrets, och då via kontaktorer.

📐 Ampère och beredareffekt

Strömmen räknas som effekt delat med spänning. I tabellen jämförs vanliga elementeffekter mot reläernas gränser vid 230 V.

ElementeffektStröm1PM Gen3 direkt (gräns 16 A)Plus 2PM direkt (gräns 10 A per kanal)
1,5 kW6,5 A✅ 41% av gränsen✅ 65% av gränsen
2,0 kW8,7 A⚠️ 54% av gränsen⚠️ 87% av gränsen
3,0 kW13,0 A⚠️ 81% av gränsen❌ 130% av gränsen
Över 3,68 kWÖver 16 A❌❌

Vår rekommendation är att alltid låta Shelly styra en kontaktor så snart elementet är på 2 kW eller mer. Ett relä är byggt för att växla laster kortvarigt, medan en beredare belastar kontakterna i timmar i sträck med full märkström. Värmen som utvecklas i plintar och kontakter är den största brandrisken vid direktstyrning.

📊 Jämförelse: Ledande elbolag för kvartspris

Jämförelsen fokuserar på det som är relevant för en tidsstyrd beredare: låga fasta kostnader, kvartspris utan bindningstid och ett bolag som skickar begripliga fakturor. Avtalets egen kostnad avser månadsavgift plus påslag på 208 kWh per månad (2 500 kWh/år ÷ 12), exklusive spotpris och kampanjer.

ElbolagMånadsavgift + påslagAvtalets egen kostnad per månad (2 500 kWh/år)VillkorstidTrustpilotErbjudande
Kärnfull Energi39 kr + 0 öre/kWh39 krLöpande, ingen bindningstidcirka 4.2–4.6/5 (hundratals omdömen)Se pris →
Tibber49 kr + 6 öre/kWh61,50 krLöpande, ingen bindningstidcirka 3.6–4.0/5 (många tusen omdömen)Se pris →
Bixia Kvartspris49 kr + 0 öre/kWh49 krIngen bindningstidcirka 3.2–3.7/5Se pris →
Greenely49–69 kr + 8 öre/kWh66–86 kr12 måncirka 3.4–3.9/5 (flera tusen omdömen)Se pris →
E.ON Kvartspris40 kr + 6 öre/kWh52,50 kr12 måncirka 1.3–1.6/5 (flera tusen omdömen)Se pris →

Kärnfull har lägst fasta kostnader och högst Trustpilot-betyg i tabellen. Bolaget säljer 100% kärnkraftsel, och kunderna på Trustpilot lyfter fram tydliga fakturor och snabb kundservice, medan några efterlyser mer avancerad smartstyrning i appen. Det spelar mindre roll här eftersom styrningen sker i Shelly-reläet. Uppsägningstiden är 2 månader enligt vår avtalsöversikt.

Tibber och Greenely är starkast om du vill ha en app som visar priser och styr fler enheter, och de har hög nöjdhet bland smart hem-användare. Tibbers påslag och månadsavgift ger en högre grundkostnad. E.ON har ett lågt Trustpilot-betyg, som enligt sammanställningen i hög grad speglar kritik mot elnätsavgifter och långa väntetider i kundservice snarare än elhandeln i sig.

Väljer du en elleverantör för att kunna tidsstyra el generellt, alltså inte bara beredaren, är kvartspris med lågt påslag och utan bindningstid den avtalsform som ger dig störst frihet.

Se Greenelys erbjudande →

💰 Vad kostar varmvattenstyrning och elbolagets avgifter i praktiken?

🔥 Beredarens energibehov

Energin för att värma vatten är massan gånger värmekapaciteten gånger temperaturhöjningen. Att värma 200 liter från 10 till 60 °C kräver cirka 11,6 kWh (200 kg × 4,186 kJ/kg·K × 50 K ÷ 3 600). Det är en full uppvärmning från kallt vatten, och i vardagen värms beredaren oftast bara upp delvis.

BeredareEnergi 10 till 60 °CTid vid 2 kWTid vid 3 kW
200 liter11,6 kWh5,8 timmar3,9 timmar
300 liter17,4 kWh8,7 timmar5,8 timmar

📊 Prisutveckling i elområdena

Spotpriset skiljer sig kraftigt mellan elområdena, vilket avgör hur mycket det finns att tjäna på att styra. Årsmedelpriset för SE3 var 41,5 öre/kWh 2024 och 51,4 öre/kWh 2025, jämfört med 18,5 öre/kWh i SE1 under 2025. Siffrorna avser Nord Pool spotpris i öre/kWh, utan moms, nätavgift och elbolagets påslag.

ElområdeÅrsmedel 2024Årsmedel 2025Senaste 12 mån (feb 2025 – jan 2026)
SE128,718,524,3
SE228,618,124,0
SE341,551,455,1
SE453,466,570,3

Månadsmedelpris per elområde, öre/kWh (Nord Pool, februari 2024 till januari 2026):

MånadSE1SE2SE3SE4
feb 202444,844,848,555,4
mar 202456,656,659,463,4
apr 202450,550,554,462,5
maj 202417,617,631,052,8
jun 202424,024,031,044,7
jul 202420,620,621,331,3
aug 20248,98,58,531,3
sep 20249,69,615,631,4
okt 202412,612,623,030,2
nov 202425,025,067,084,7
dec 202412,612,658,369,3
jan 202523,823,863,468,0
feb 202512,912,977,1103,9
mar 202515,811,050,860,5
apr 202514,414,237,658,4
maj 202514,115,142,960,0
jun 20253,15,022,840,7
jul 202513,616,037,046,4
aug 202523,723,148,673,2
sep 202517,316,352,370,6
okt 202514,213,562,871,3
nov 202537,034,369,680,7
dec 202531,632,151,764,9
jan 202693,994,2108,4113,0

Säsongsvariationen i SE3 är stor: januari 2026 låg på 108,4 öre/kWh mot 22,8 öre/kWh i juni 2025, drygt 4,7 gånger högre. Trenden de senaste sex månaderna (augusti 2025 till januari 2026) är ↗️ stigande i både SE3 (48,6 till 108,4 öre/kWh) och SE4 (73,2 till 113,0 öre/kWh). I februari 2026 låg månadsmedlet hittills på cirka 123 öre/kWh i SE3.

Även inom ett enskilt dygn är skillnaderna stora. Den 24 september 2026 var lägsta kvartspris i SE3 109,88 öre/kWh (kl. 03:45 – 04:00) och högsta 256,08 öre/kWh (kl. 18:45 – 19:00), en skillnad på 146,20 öre/kWh enligt elen.nu. Just den skillnaden är vad ett kvartsprisavtal och en tidsstyrd beredare kan utnyttja.

💡 Vad kan du spara?

Besparingen är skillnaden mellan dygnets snittpris och priset under de kvartar du väljer, multiplicerat med de kWh du flyttar. Följande exempel utgår från en beredare som använder 2 500 kWh/år (ett antagande, kontrollera din egen förbrukning i Shelly-appen) och visar besparingen vid tre olika genomsnittliga prisskillnader. Värdena är räkneexempel och inte en prognos.

Snittbesparing per flyttad kWh (exkl. moms)Besparing per år exkl. momsBesparing per år inkl. 25% moms
10 öre/kWh250 kr313 kr
25 öre/kWh625 kr781 kr
50 öre/kWh1 250 kr1 563 kr

Besparingen måste vara större än eventuella skillnader i månadsavgift och påslag jämfört med ditt nuvarande avtal. Räkna alltid på den totala kostnaden och inte bara på spotpriset.

Vill du ha en app som visar priserna och kan styra fler enheter är Tibber ett alternativ, med 49 kr/mån och 6 öre/kWh i påslag enligt vår avtalsöversikt.

Jämför Tibbers pris →

Det som påverkar den totala kostnaden för styrd varmvattenberedning, i ungefärlig ordning efter betydelse:

  1. Elområde: SE4 hade 2025 ett årsmedel på 66,5 öre/kWh mot 18,5 öre/kWh i SE1.
  2. Säsong: vinterpriserna är flera gånger högre än sommarpriserna, och beredaren använder lika mycket el hela året.
  3. Prisskillnaden inom dygnet: ju större spridning mellan dyra och billiga kvartar, desto mer att tjäna.
  4. Månadsavgift och påslag: avgifter som är fasta för hela hushållet, oavsett om du styr eller inte.
  5. Nätavgift och eventuell effekttariff: vissa elnätsföretag har infört en avgift baserad på hur mycket effekt du använder samtidigt.
  6. Moms: 25% på både spotpris, påslag och avgifter.

📋 Vad du lär dig i den här guiden

  • Hur ett Shelly-relä, en kontaktor och ett kvartsprisavtal samverkar när du flyttar varmvattenbeställningen till dygnets billigaste kvartar
  • Skillnaden mellan Shelly 1PM Gen3 och Shelly Plus 2PM, med ampèregränser i siffror
  • Kopplingsscheman för enfas, enfas via kontaktor och trefas
  • Säkerhetsreglerna kring brandrisk, jordfelsskydd, legionella och vem som får göra installationen
  • Ett färdigt skript med felsäker reservlösning, samt vilket elbolag som passar bäst för uppsättningen

⚡ Tidsstyrning av varmvattenberedaren förklarat — från grunden

🔌 Vad ett Shelly-relä faktiskt gör

Ett Shelly-relä är en Wi-Fi-ansluten strömbrytare med inbyggd effektmätning. Det ersätter inte beredarens termostat eller övertemperaturskydd, utan avgör bara när beredaren får ström. Termostaten bestämmer fortfarande hur varmt vattnet blir, och att den fungerar är en förutsättning för att styrningen ska vara säker.

Både Shelly 1PM Gen3 och Shelly Plus 2PM kan köra egna skript direkt i enheten. Styrningen fortsätter därför att fungera även om ditt hemautomationssystem ligger nere. Enheten hämtar dagens elpriser över internet, väljer de billigaste kvartarna och slår utgången på och av enligt planen.

📊 Timpris, kvartspris och månadspris – skillnaden som avgör lönsamheten

Med ett rörligt avtal med månadspris betalar du månadens genomsnittliga spotpris oavsett när på dygnet du använder elen. Energimarknadsbyrån beskriver det som en missuppfattning att det lönar sig att förbruka el på natten med ett sådant avtal. Det gäller bara timprisavtal och kvartsprisavtal.

Sedan 1 oktober 2025 handlas el per kvart, och kvartsprisavtal där priset ändras fyra gånger per timme har ersatt många timprisavtal. Ett gammalt timprisavtal kan ha övergått till kvartspris utan nytt samtycke om avtalsvillkoren tillåter det. Ditt elnätsbolag ansvarar för att mätaren registrerar förbrukningen var 15:e minut, och du behöver inte byta mätare själv.

Kontrollera med ditt elbolag att du faktiskt debiteras per kvart. Om mätaren ännu inte kvartsavläses kan vissa elbolag debitera ett månadsgenomsnitt tills avläsningen är på plats, och då ger styrningen ingen besparing.

🚿 Varför beredaren är en av de bästa lasterna att flytta

Beredaren lagrar värme i flera hundra liter vatten, och ingen märker vilken timme energin gick in. Den är dessutom en ren resistiv last med känd effekt, vilket gör den enkel att styra, mäta och dimensionera skyddsutrustning för.

Priset på elen varierar kraftigt över dygnet. Sedan kvartshandeln infördes kan elen vara billigast mitt på dagen och inte nödvändigtvis på natten, vilket är skälet till att ett fast nattschema inte längre räcker för att ta hem hela besparingen.

✅ Vad gäller — och vad gäller inte?

Tabellen nedan reder ut de missförstånd som är vanligast när man kopplar ihop Shelly, kontaktor och elavtal.

ScenarioGäller?Notering
Styra beredaren mot spotpris med rörligt månadspris❌Du betalar månadens medelpris oavsett tidpunkt. Byt till timpris eller kvartspris.
Styra beredaren mot kvartspris eller timpris✅Du betalar priset som råder när elen används, plus elbolagets påslag och 25% moms.
Shelly 1PM Gen3 direkt på 3 kW enfaselement⚠️13,0 A av 16 A, alltså inom specifikationen. Vi rekommenderar ändå kontaktor för timslånga laster.
Shelly Plus 2PM direkt på 3 kW enfaselement❌13,0 A överstiger gränsen på 10 A per kanal. Endast styrning av kontaktor är möjligt.
Shelly direkt på trefasberedare❌Shelly-reläerna är enfasreläer. Använd tre- eller fyrpolig kontaktor.
Sänka beredartemperaturen under 60 °C för att spara❌Legionellabakterier förökar sig mellan cirka 20 och 45 °C. Boverket rekommenderar 60 °C i beredaren.
Koppla Shelly-reläet själv som privatperson❌Att fast ansluta en elektrisk produkt är elinstallationsarbete. Det kräver elinstallatör.
Styrningen fortsätter om Wi-Fi eller prisdata ligger nere✅Ja, om skriptet har ett reservfönster och utgångens startläge är satt till På.

Raden om rörligt månadspris är den vanligaste fällan. Med Bixia Kvartspris (49 kr/mån och inget påslag på inköpspriset, ingen bindningstid) får du det pris som råder varje kvart, vilket är exakt det skriptet nedan optimerar mot.

Se Bixias kvartspris →

🎯 Så väljer du rätt relä, kontaktor och elbolag

  1. Läs beredarens märkskylt. Notera effekt, spänning och antal faser. För enfas gäller ström = effekt ÷ 230 V, till exempel 2 000 W ÷ 230 V = 8,7 A. För en trefasberedare på 6 000 W blir strömmen 8,7 A per fas (6 000 W ÷ (1,73 × 400 V)).
  2. Kontrollera avtal och mätare. Du behöver ett kvartspris- eller timprisavtal och en mätare som registrerar varje kvart. Nätbolaget ansvarar för mätaren.
  3. Välj relä. Shelly 1PM Gen3 för en beredare, Plus 2PM om du behöver två kanaler.
  4. Välj kontaktor. Ta en modulkontaktor för AC-1 (resistiv last) med märkström på minst 25 A, med rätt polantal och en styrspole för 230 V AC. Kontaktorer finns hos elgrossister och byggvaruhus. Sök på ”modulkontaktor 25 A 230 V AC”.
  5. Låt behörig person göra installationen. Använd ett registrerat elinstallationsföretag och kontrollera företaget i Elsäkerhetsverkets tjänst Kolla elföretaget.
  6. Ladda skriptet och ställ in säkert startläge. Sätt utgångens startläge (Power-on default) till På, så att beredaren fungerar även om skriptet stoppar.
  7. Följ upp efter 30 dagar. Shelly-appens energiöversikt visar förbrukningen per dygn. Jämför mot fakturan för att se om styrningen ger den besparing du räknade med.

🔌 Kopplingsscheman

Schemana är principskisser för att du och din installatör ska prata om samma lösning. De ersätter inte installatörens egna beräkningar och bedömningar. Följ alltid tillverkarens anvisning för respektive enhet.

🔌 Enfas direktstyrning (upp till cirka 2 kW)

  GRUPP (automatsäkring + jordfelsbrytare)         SHELLY 1PM GEN3

  L  (brun)    -------------------------------->  L  (in)
                                                     |  relä
                                                  O  (ut) ------------------> L   BEREDARE
  N  (blå)     ----------+--------------------->  N
                         |
                         +------------------------------------------------> N   BEREDARE
  PE (gul/grön) --------------------------------------------------------->  PE  BEREDARE
                                                   (skyddsjord kopplas aldrig via reläet)

🧲 Enfas via kontaktor (rekommenderad lösning)

Kretsen delas i en styrkrets, där Shelly matar kontaktorns spole, och en effektkrets, där kontaktorn bryter beredaren.

  STYRKRETS (liten ström, Shelly matar spolen)

  L  ----> Shelly L (in)      Shelly O (ut) ----> A1  kontaktorspole
  N  ----> Shelly N           N  ------------->  A2  kontaktorspole
                     RC-snubber monteras över A1 och A2

  EFFEKTKRETS (kontaktorn bryter beredaren)

  Grupp L   ----> [kontaktor pol 1: 1 till 2] ----> L   BEREDARE
  Grupp N   ----> [kontaktor pol 2: 3 till 4] ----> N   BEREDARE
  Grupp PE  -------------------------------------> PE  BEREDARE (aldrig via kontaktorn)

Spolen är en induktiv last. Shelly rekommenderar en RC-snubber vid induktiva laster, och en sådan finns i Shellys egen webbutik.

⚡ Trefas via kontaktor

Shelly-reläerna är enfasreläer och kan aldrig bryta tre faser direkt. Reläet matas från en enfasgrupp och styr bara kontaktorns 230 V-spole.

  STYRKRETS (samma som enfas)
  L ----> Shelly L (in)   Shelly O (ut) ----> A1        N ----> Shelly N   och   A2

  EFFEKTKRETS (tre- eller fyrpolig kontaktor)

  L1  ----> [pol 1: 1 till 2] ----> L1  BEREDARE
  L2  ----> [pol 2: 3 till 4] ----> L2  BEREDARE
  L3  ----> [pol 3: 5 till 6] ----> L3  BEREDARE
  N   ----> [pol 4, om beredaren har nolla] ----> N  BEREDARE
  PE  -----------------------------------------> PE BEREDARE

🧯 Säkerhet: ampère, kontaktorer och brandrisk

  • Elinstallationsarbete är lagreglerat. Enligt Elsäkerhetsverket omfattar det att utföra, ändra eller reparera en elanläggning och att fast ansluta en elektrisk produkt. Arbetet får bara utföras av personer med auktorisation som elinstallatör eller av personer som ingår i ett elinstallationsföretags egenkontrollprogram. Olagligt elinstallationsarbete är straffbart. Kolla vad som gäller på Elsäkerhetsverkets sida om vad du får göra själv.
  • Överskrid aldrig märkströmmen. 16 A gäller för resistiva laster på Shelly 1PM Gen3 och 10 A per kanal på Plus 2PM. Installatören dimensionerar gruppens automatsäkring, kabelarea och skydd enligt gällande föreskrifter och installationsstandarden SS 436 40 00.
  • Kontaktor ger marginal. Modulkontaktorn är byggd för att bryta resistiva laster på 25 A eller mer i timmar. Shelly-modulen tar då bara den lilla spolströmmen och blir inte en värmekälla i en trång dosa.
  • Behåll beredarens egna skydd. Termostaten och övertemperaturskyddet med manuell återställning ska ligga kvar i serie med elementet och får aldrig byggas bort. Om ett relä eller en kontaktor skulle fastna i läge på är det skyddet som begränsar temperaturen.
  • Undvik lösa anslutningar. En dåligt åtdragen plint värms upp när strömmen går i timmar och kan orsaka brand. Låt installatören dra åt enligt tillverkarens moment och kontrollera åtdragningen vid service.
  • Håll beredaren varm nog. Boverket anger 60 °C som rekommenderad temperatur i varmvattenberedare och lägst 50 °C vid tappstället, eftersom legionellabakterier förökar sig mellan cirka 20 och 45 °C. Använd termostatblandare för att undvika skållning, eftersom tappvarmvatten inte bör överstiga 60 °C efter tappstället. Läs mer hos Boverket om legionella.
  • Tänk på Wi-Fi. Ett metallskåp dämpar signalen kraftigt. Testa signalstyrkan innan du monterar enheten i en plåtcentral.

📜 Skript

🕑 Enkel reservlösning: schema i Shelly-appen

Utan skript kan du skapa två scheman i Shelly-appen: ett som slår på reläet och ett som slår av det. Ett exempel som värmer mellan 02:00 och 05:00 varje dag (tidsformat: sekund, minut, timme, dag, månad, veckodag):

  Påslag 02:00:  0 0 2 * * SUN,MON,TUE,WED,THU,FRI,SAT   ->  Switch.Set {"id":0,"on":true}
  Avslag 05:00:  0 0 5 * * SUN,MON,TUE,WED,THU,FRI,SAT   ->  Switch.Set {"id":0,"on":false}

Nackdelen är att schemat inte följer priset. Sedan kvartshandeln infördes kan elen vara billigast mitt på dagen, så ett fast nattfönster missar en del av besparingen.

🤖 Prisstyrt skript för Shelly 1PM Gen3 och Plus 2PM

Skriptet hämtar dagens elpriser för ditt elområde från Elpriset just nu, som publicerar Nord Pool day-ahead-priser öppet och utan API-nyckel. Det väljer det billigaste sammanhängande blocket på dygnet, slår på reläet under blocket och kör ett längre block på söndagar för legionellaskyddet. Om prishämtningen misslyckas körs ett fast reservfönster mellan 02:00 och 05:00, och skriptet försöker hämta priserna igen var 30:e minut.

Skriptet är medvetet skrivet utan å, ä och ö. Shellys skriptmotor (mJS) saknar Unicode-stöd och stöder bara en delmängd av JavaScript: endast let för variabler, inga closures och namngivna callback-funktioner.

// Varmvattenstyrning mot kvartspris - Shelly Gen3 (mJS)
// Hamtar dagens spotpris, valjer billigaste sammanhangande block och styr relaet.
// Fallback: fast tidsfonster om prishamtningen misslyckas.

let CONFIG = {
  area: "SE3",          // SE1, SE2, SE3 eller SE4
  switchId: 0,          // relakanal (Plus 2PM: 0 eller 1)
  heatMinutes: 180,     // uppvarmningstid per dygn i minuter
  legionellaMinutes: 300, // forlangt block pa sondagar (kraver termostat pa 60 C eller mer)
  windowFrom: 0,        // tidigaste start, minuter efter midnatt (0 = 00:00)
  windowTo: 1440,       // senaste slut, minuter efter midnatt (1440 = 24:00)
  fallbackFrom: 120,    // reservfonster start (02:00)
  fallbackTo: 300,      // reservfonster slut (05:00)
  retryMinutes: 30      // ny hamtning var 30:e minut tills det lyckas
};

let state = {
  day: -1,              // dagnummer for aktuell plan
  planFrom: -1,         // start i minuter, -1 = ingen plan (anvand reservfonster)
  planTo: -1,
  lastAttempt: -100000, // minuter (epok) for senaste hamtningsforsok
  fetching: false,
  desired: -1           // senast skickade tillstand: 1 = pa, 0 = av, -1 = okant
};

// ---------- Datum och tid (Sverige), beraknas ur unixtime ----------
function daysFromCivil(y, m, d) {
  if (m <= 2) { y = y - 1; }
  let era = Math.floor(y / 400);
  let yoe = y - era * 400;
  let mp = m + 9;
  if (m > 2) { mp = m - 3; }
  let doy = Math.floor((153 * mp + 2) / 5) + d - 1;
  let doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy;
  return era * 146097 + doe - 719468;
}

function civilFromDays(days) {
  let z = days + 719468;
  let era = Math.floor(z / 146097);
  let doe = z - era * 146097;
  let yoe = Math.floor((doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365);
  let y = yoe + era * 400;
  let doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100));
  let mp = Math.floor((5 * doy + 2) / 153);
  let d = doy - Math.floor((153 * mp + 2) / 5) + 1;
  let m = mp - 9;
  if (mp < 10) { m = mp + 3; }
  if (m <= 2) { y = y + 1; }
  return { y: y, m: m, d: d };
}

function weekday(days) {
  // 0 = sondag
  let v = days + 4;
  return v - 7 * Math.floor(v / 7);
}

function lastSunday(y, m) {
  let d31 = daysFromCivil(y, m, 31);
  return d31 - weekday(d31);
}

function swedenOffset(unix) {
  let y = civilFromDays(Math.floor(unix / 86400)).y;
  let s = lastSunday(y, 3) * 86400 + 3600;
  let e = lastSunday(y, 10) * 86400 + 3600;
  if (unix >= s && unix < e) { return 7200; }
  return 3600;
}

function pad2(n) {
  if (n < 10) { return "0" + n; }
  return "" + n;
}

function localNow() {
  let sys = Shelly.getComponentStatus("sys");
  let unix = sys.unixtime;
  let local = unix + swedenOffset(unix);
  let days = Math.floor(local / 86400);
  let secs = local - days * 86400;
  return { days: days, minute: Math.floor(secs / 60), civil: civilFromDays(days), dow: weekday(days) };
}

// ---------- Prishamtning ----------
function num(s) {
  // JSON.parse pa ett litet objekt ar det sakraste sattet att fa ett tal i mJS
  return JSON.parse('{"v":' + s + '}').v;
}

function digits2(str, pos) {
  // at() ger teckenkod i mJS; 48 = tecknet 0
  return (str.at(pos) - 48) * 10 + (str.at(pos + 1) - 48);
}

function findEnd(body, from) {
  let c1 = body.indexOf(",", from);
  let c2 = body.indexOf("}", from);
  if (c1 === -1) { return c2; }
  if (c2 !== -1 && c2 < c1) { return c2; }
  return c1;
}

// Skannar svaret utan att bygga hela JSON-trad (sparar minne)
function parsePrices(body) {
  let prices = [];
  let starts = [];
  let pos = 0;
  while (true) {
    let k = body.indexOf('"SEK_per_kWh":', pos);
    if (k === -1) { break; }
    let vs = k + 14;
    let ve = findEnd(body, vs);
    let t = body.indexOf('"time_start":', ve);
    if (ve === -1 || t === -1) { break; }
    let ts = body.indexOf('"', t + 13) + 1;
    let hh = digits2(body, ts + 11);
    let mm = digits2(body, ts + 14);
    prices.push(num(body.slice(vs, ve)));
    starts.push(hh * 60 + mm);
    pos = ts + 25;
  }
  return { prices: prices, starts: starts };
}

// Billigaste sammanhangande block med N platser
function bestBlock(p, minutes) {
  let n = p.prices.length;
  if (n < 20) { return null; }
  let slot = 60;
  if (n > 30) { slot = 15; }
  let need = Math.round(minutes / slot);
  if (need < 1) { need = 1; }
  if (need > n) { need = n; }
  let best = -1;
  let bestSum = 0;
  for (let i = 0; i + need <= n; i++) {
    let from = p.starts[i];
    let to = from + need * slot;
    if (from < CONFIG.windowFrom || to > CONFIG.windowTo) { continue; }
    let sum = 0;
    for (let j = 0; j < need; j++) { sum = sum + p.prices[i + j]; }
    if (best === -1 || sum < bestSum) { best = i; bestSum = sum; }
  }
  if (best === -1) { return null; }
  return { from: p.starts[best], to: p.starts[best] + need * slot, avg: bestSum / need };
}

function onPrices(res, err, msg) {
  state.fetching = false;
  if (err !== 0 || !res || res.code !== 200 || !res.body) {
    print("Prishamtning misslyckades:", err, msg, "- kor reservfonster");
    return;
  }
  let p = parsePrices(res.body);
  let now = localNow();
  let minutes = CONFIG.heatMinutes;
  if (now.dow === 0) { minutes = CONFIG.legionellaMinutes; }
  let b = bestBlock(p, minutes);
  if (b === null) {
    print("Kunde inte valja block - kor reservfonster");
    return;
  }
  state.planFrom = b.from;
  state.planTo = b.to;
  state.day = now.days;
  print("Plan " + pad2(Math.floor(b.from / 60)) + ":" + pad2(b.from - Math.floor(b.from / 60) * 60) +
        " - " + pad2(Math.floor(b.to / 60)) + ":" + pad2(b.to - Math.floor(b.to / 60) * 60) +
        ", snittpris " + Math.round(b.avg * 100) + " ore/kWh (exkl. moms)");
}

function fetchPrices(now) {
  if (state.fetching) { return; }
  state.fetching = true;
  state.lastAttempt = now.days * 1440 + now.minute;
  let url = "https://www.elprisetjustnu.se/api/v1/prices/" + now.civil.y + "/" +
            pad2(now.civil.m) + "-" + pad2(now.civil.d) + "_" + CONFIG.area + ".json";
  Shelly.call("HTTP.GET", { url: url, timeout: 15, ssl_ca: "*" }, onPrices);
}

// ---------- Styrning ----------
function setRelay(on) {
  let v = 0;
  if (on) { v = 1; }
  if (state.desired === v) { return; }  // andra bara vid overgang - manuell override ligger kvar
  state.desired = v;
  Shelly.call("Switch.Set", { id: CONFIG.switchId, on: on });
  if (on) { print("Rele PA"); } else { print("Rele AV"); }
}

function tick() {
  let now = localNow();
  if (state.day !== now.days) {
    state.planFrom = -1;
    state.planTo = -1;
  }
  let abs = now.days * 1440 + now.minute;
  if (state.planFrom === -1 && abs - state.lastAttempt >= CONFIG.retryMinutes) {
    fetchPrices(now);
  }
  let from = CONFIG.fallbackFrom;
  let to = CONFIG.fallbackTo;
  if (state.planFrom !== -1) {
    from = state.planFrom;
    to = state.planTo;
  }
  setRelay(now.minute >= from && now.minute < to);
}

Timer.set(60000, true, tick);
tick();

Så här anpassar och testar du skriptet:

  • Elområde: ändra area till SE1, SE2, SE3 eller SE4.
  • Uppvärmningstid: beräkna heatMinutes som dygnsförbrukning ÷ elementeffekt × 60 × 1,3 för marginal. Med 2 500 kWh/år (6,85 kWh/dygn) och ett 3 kW-element blir det cirka 180 minuter, och med ett 2 kW-element cirka 270 minuter.
  • Legionella: legionellaMinutes gäller söndagar. Beredarens termostat måste vara inställd på 60 °C eller mer, annars hjälper inte det längre blocket.
  • Manuell styrning: skriptet ändrar bara utgången när planen växlar tillstånd, så en manuell påslagning i appen ligger kvar tills nästa växling.
  • Kanal: på Plus 2PM anger du switchId 0 eller 1 beroende på vilken kanal som styr kontaktorn.
  • Testa på arbetsbänk: ladda skriptet utan last kopplad och kontrollera i konsolen att raden ”Plan HH:MM – HH:MM” visas. Ändra sedan area till ett felaktigt värde för att se att reservfönstret aktiveras.
  • Certifikatkontroll: skriptet använder ssl_ca: "*", vilket hoppar över kontroll av servercertifikatet. Priserna är inte känsliga, men om du vill ha strikt kontroll kan du ange ett CA-paket enligt Shellys HTTP-dokumentation.

Enhetens Wi-Fi och internetanslutning måste vara stabil. Dagens priser är fastställda i förväg, så skriptet hämtar dem en gång per dygn och försöker bara igen (var 30:e minut) om hämtningen misslyckas.

Hur mycket skriptet kan spara avgörs av ditt avtal. Ett lågt påslag och en låg månadsavgift gör att mer av besparingen hamnar hos dig.

Kolla Kärnfulls aktuella pris →

❓ Vanliga frågor

❓ Kan jag koppla varmvattenberedaren direkt på Shelly 1PM Gen3?

Tekniskt sett ja för enfaselement upp till 3 680 W, eftersom reläet klarar 16 A resistiv last. Ett 2 kW-element drar 8,7 A och ett 3 kW-element 13,0 A. Vi rekommenderar ändå kontaktor så snart elementet är 2 kW eller större, eftersom belastningen pågår i timmar och värmeutvecklingen i plintar och relä är den största brandrisken. Trefasberedare går aldrig att koppla direkt på Shelly.

❓ Varför räcker inte Shelly Plus 2PM för en 3 kW-beredare?

Plus 2PM klarar 10 A per kanal, vilket motsvarar 2 300 W vid 230 V. Ett 3 kW-element drar 13,0 A och överskrider alltså kanalgränsen med 30%. Reläet kan däremot styra en kontaktor utan problem. Oavsett vilket relä du väljer förutsätter en besparing ett kvartsprisavtal.

Se Kärnfulls elavtal →

❓ Vilken kontaktor ska jag välja?

Välj en modulkontaktor för AC-1 (resistiv last) med märkström på minst 25 A, en styrspole för 230 V AC och rätt antal poler: två för enfas och tre eller fyra för trefas. Montera en RC-snubber över spolen. Det är installatörens uppgift att slutligt fastställa dimensioneringen mot beredarens märkskylt och gruppens säkring.

❓ Får jag installera Shelly-reläet själv?

Nej, inte om det innebär att du ansluter beredaren fast eller ändrar den fasta elanläggningen. Enligt Elsäkerhetsverket är det elinstallationsarbete som endast får utföras av auktoriserad elinstallatör eller personer som omfattas av ett elinstallationsföretags egenkontrollprogram. Passa på att gå igenom ditt elavtal samtidigt som installatören är på plats.

Se Bixias kvartspris →

❓ Sparar jag pengar med rörligt månadspris om jag tidsstyr beredaren?

Nej. Med månadspris betalar du månadens genomsnittliga pris oavsett när du förbrukar elen, och tidsstyrningen ger då ingen besparing. Energimarknadsbyrån bekräftar att det är en missuppfattning att det lönar sig att använda el på natten med rörligt månadspris. Det gäller bara timpris- och kvartsprisavtal.

❓ Vilket elområde ska jag ange i skriptet?

Det beror på var du bor. SE1 täcker bland annat Luleå, Kiruna, Umeå och Östersund, SE2 Sundsvall, Härnösand, Falun och Borlänge, SE3 Stockholm, Göteborg, Örebro, Uppsala och Västerås, och SE4 Malmö, Helsingborg, Kristianstad och Trelleborg. Skillnaden i pris är stor: årsmedelpriset 2025 var 18,5 öre/kWh i SE1 och 66,5 öre/kWh i SE4, så besparingspotentialen är större längre söderut.

Jämför Tibbers pris →

❓ Blir varmvattnet kallt om Wi-Fi eller prisdata ligger nere?

Nej, om du har satt utgångens startläge till På och använder ett skript med reservfönster. Skriptet ovan kör ett fast fönster mellan 02:00 och 05:00 när prishämtningen misslyckas och försöker hämta priserna igen var 30:e minut. Beredarens egen termostat begränsar dessutom temperaturen.

❓ Hur hanterar jag legionellarisken när jag flyttar uppvärmningen?

Håll termostaten på minst 60 °C, vilket Boverket rekommenderar för varmvattenberedare, och låt skriptets längre söndagsblock värma hela volymen. Bakterierna förökar sig mellan cirka 20 och 45 °C, så temperaturen får inte hamna där under långa perioder. Det längre blocket ökar förbrukningen några timmar i veckan, vilket gör ett lågt påslag extra värdefullt.

Kolla Kärnfulls aktuella pris →

❓ Går det att styra beredaren utan skript?

Ja, med ett schema i Shelly-appen, men schemat följer inte priset. Sedan kvartshandeln infördes kan elen vara billigast mitt på dagen och inte nödvändigtvis på natten, så ett fast nattfönster fångar bara en del av besparingen. Ett skript som väljer det billigaste blocket varje dag är mer effektivt.

❓ Hur byter jag till kvartspris och hur ofta ändras priset?

Du tecknar det nya avtalet hos elbolaget, som normalt säger upp det gamla åt dig. Räkna med minst 14 dagar för bytet på grund av ångerrätten. Priserna för nästa dygns kvartar publiceras klockan 13:00 dagen innan, och priset ändras därefter fyra gånger per timme.

Se Kärnfulls elavtal →

❓ Påverkar tidsstyrningen min effektavgift?

Det kan den göra. Vissa elnätsföretag har infört en avgift baserad på hur mycket effekt du använder samtidigt. Ett 3 kW-element som slås på samtidigt som spis, tvättmaskin och laddbox kan höja din effekttopp. Kontrollera din nätägares avgiftsmodell och lägg blocket utanför de tider då du normalt har hög förbrukning, för att undvika effekttoppar.

🏆 Sammanfattning

De viktigaste lärdomarna:

  • Shelly 1PM Gen3 klarar 16 A (3 680 W) och är det enklaste valet för en beredare. Shelly Plus 2PM klarar 10 A per kanal (2 300 W) och passar två laster via kontaktorer.
  • Låt Shelly styra en kontaktor så snart elementet är på 2 kW eller mer, och alltid för trefasberedare.
  • Fast elinstallation är elinstallationsarbete och ska utföras av auktoriserad elinstallatör eller ett registrerat elinstallationsföretag.
  • Håll beredaren på minst 60 °C och låt skriptet värma hela volymen en gång i veckan.
  • Tidsstyrning lönar sig bara med timpris eller kvartspris. Med 25 öre/kWh i snittbesparing på 2 500 kWh/år blir besparingen 781 kr per år inklusive moms.

Elpriser och avtalsvillkor ändras löpande. Verifiera alltid aktuell information direkt med elleverantören innan tecknande.

Optimera varmvattnet mot dagens timpriser – byt till timprisavtal här →

Se Tibbers erbjudande →

Om författaren