//---------------------------------------- FORKLARING AF DETTE SCRIPT ------------------------------------------------// // VERSION 1.0.1 // * Rettet bug som gjorde, at en dag ikke var afgrænset af døgnet, men kunne strække sig længere hvis der var data nok // * Givet mulighed for forskellige ElAfgifter i løbet af dagen - krævet meget omkodning af scriptet, så har muligvis introduceret fejl. // FIND DOKUMENTATION PÅ HTTPS://HOMEY.GUIDE // DETTE SCRIPT HENTER EL-PRISER UD FRA api.energidataservice.dk OG OPRETTER TAGS MED VÆRDIER OG SPEAKS, TIL BRUG I DET VIDERE FLOW. SCRIPTET UDFØRER INGEN HANDLINGER I SIG SELV. // SCRIPTET KAN BÅDE BRUGES TIL AT FÅ GENEREL INFORMATION OM EL-PRISERNE NU OG I DE KOMMENDE TIMER OG TIL AT FINDE DE BILLIGSTE X ANTAL TIMER I LØBET AF DE NÆSTE Y ANTAL TIMER. F.EKS. DE 3 BILLIGSTE TIMER TIL TØJVASK INDEN FOR DE NÆSTE 12 TIMER. // SCRIPTET TAGER IMOD 2 ARGUMENTER: ANTALTIMER, SOM ER DET ANTAL BILLIGE TIMER SOM DU SØGER, OG TIMESPAN SOM ER DEN PERIODE SOM SKAL UNDERSØGES. F.EKS. "2,12" FOR AT FINDE DE BILLIGSTE 2 TIMER I DE NÆSTE 12 TIMER. // SCRIPTET HAR EN SKÆRINGSTID PÅ 20 MINUTTER INDE I NUVÆRENDE TIME. DET BETYDER, AT KØRES SCRIPTET FØR F.EKS. KL. 14:20, SÅ UNDERSØGES DER FRA KL. 14:00 OG DERFOR KAN KL. 14:00 BLIVE DEN FØRSTE BILLIGSTE TIME - KØRES DET KL. 14.21 UNDERSØGES DER FRA KL. 15:00. // MAX TIMESPAN ER PT. 24 TIMER, MEN TÆNKER AT UDVIDDE DET, SÅ HVIS DEN FUNDNE STARTTIME ER MERE END 24 TIMER FREMME I TIDEN, SÅ FÅR DEN VÆRDIEN +100, SÅ MAN KAN SE, AT DET ER I MORGEN KL. X FREMFOR I DAG KL. X. // DET ER IKKE ALTID AT DER ER DATA TILGÆNGELIG TIL DEN ØNSKET PERIODE, I SÅFALD HENTES DER SÅ MEGET SOM DER ER. //---------------------------- HERUNDER ER KONSTANTER SOM DU SKAL KONTROLLERE/ÆNDRE ----------------------------------// const PriceArea = "DK2" // DK1 = VESTDANMARK, DK2 = ØSTDANMARK const BilligPrisMinForskel = 20; // ØRE INKL. MOMS - NÅR DER SØGES EFTER EN BILLIG PERIODE, SÅ SKAL DEN NÆSTE FUNDNE PERIODE MINDST VÆRE DETTE ANTAL ØRE BILLIGERE, FOR AT DEN NYE PERIODE VÆLGES I STEDET. F.EKS. HVIS 3 TIMERS PERIODEN FRA KL. 10 TIL KL. 13 KOSTER 120 ØRE + 231 ØRE + 195 ØRE, SÅ SKAL PERIODEN KL. 12 TIL 15 VÆRE DETTE ANTAL ØRE BILLIGERE, FØR DEN PERIODE VÆLGES I STEDET. DER REGNES EFTER AT AFGIFTER ER LAGT TIL. const ElAfgifter = new Array; ElAfgifter[0] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 00:00 TIL 01:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[1] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 01:00 TIL 02:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[2] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 02:00 TIL 03:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[3] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 03:00 TIL 04:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[4] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 04:00 TIL 05:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[5] = 0.15 + 0.18; // AFGIFT + TRANSPORT INKL. MOMS FRA 05:00 TIL 06:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[6] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 06:00 TIL 07:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[7] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 07:00 TIL 08:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[8] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 08:00 TIL 09:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[9] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 09:00 TIL 10:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[10] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 10:00 TIL 11:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[11] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 11:00 TIL 12:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[12] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 12:00 TIL 13:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[13] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 13:00 TIL 14:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[14] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 14:00 TIL 15:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[15] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 15:00 TIL 16:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[16] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 16:00 TIL 17:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[17] = 0.15 + 1.60; // AFGIFT + TRANSPORT INKL. MOMS FRA 17:00 TIL 18:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[18] = 0.15 + 1.60; // AFGIFT + TRANSPORT INKL. MOMS FRA 18:00 TIL 19:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[19] = 0.15 + 1.60; // AFGIFT + TRANSPORT INKL. MOMS FRA 19:00 TIL 20:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[20] = 0.15 + 1.60; // AFGIFT + TRANSPORT INKL. MOMS FRA 20:00 TIL 21:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[21] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 21:00 TIL 22:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[22] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 22:00 TIL 23:00, SOM LÆGGES OVEN I EL-PRISEN ElAfgifter[23] = 0.15 + 0.53; // AFGIFT + TRANSPORT INKL. MOMS FRA 23:00 TIL 00:00, SOM LÆGGES OVEN I EL-PRISEN //--------------------------------------------------------------------------------------------------------------------// // ------------------------------- DU SKAL IKKE ÆNDRE NOGET EFTER DENNE LINJE ----------------------------------------// //--------------------------------------------------------------------------------------------------------------------// // -------------- HVIS SCRIPT ER KALDT UDEN ARGUMENTS, SÅ INDSÆT STANDARD VÆRDIER ------------- var ArgsAntalTimer, ArgsTimespan; if(!args[0]){ ArgsAntalTimer = 2; ArgsTimespan = 16; }else{ const ArgsArray = args[0].split(","); if(ArgsArray.length != 2){throw Error("Der skal være præcist 2 arguments");} ArgsAntalTimer = parseInt(ArgsArray[0]); ArgsTimespan = parseInt(ArgsArray[1]); } // -------------- GI'R DET MENING? - FORNUFTSTJEK ------------- if(!ArgsAntalTimer || !ArgsTimespan){throw Error("Der skal indtastes 2 nummer-værdier som arguments");} if(ArgsAntalTimer > ArgsTimespan){throw Error("Timespan skal være større end antal billige timer");} if(ArgsTimespan > 24){throw Error("Timespan må max være 24 timer");} if(!ArgsAntalTimer > 0 || !ArgsTimespan > 0){throw Error("Arguments skal være større end 0");} // -- FIND PERIODEN SOM DER ØNSKES DATA FOR. DET ER FRA D.D. KL. 00:00 OG FREM TIL "NU" + TIMESPAN -- var DatoNuStartpoint = new Date(); if(DatoNuStartpoint.getMinutes() > 20){ // HVIS SCRIPT STARTES SENERE END KL. XX:20 SÅ FLYT TIMESPAN 1 TIME FREM DatoNuStartpoint = new Date(DatoNuStartpoint.setTime(DatoNuStartpoint.getTime() + 1 * 60 * 60 * 1000)); } // BRUGER ENGELSK TIDSFORMAT, FORDI DE HAR LEADING ZERO PÅ DATO OG TID, SOM DER SKAL BRUGES NÅR DER HENTES JSON DATA - var DatoNuStartpointUK = DatoNuStartpoint.toLocaleString("en-UK", { hour12: false, timeZone: (await Homey.system.getInfo()).timezone}); log("Timespan startpoint: " + DatoNuStartpointUK); // SPLITTER DATOEN fremfor .GetHours() DA LEADING ZERO ELLERS MISTES const UKdate = DatoNuStartpointUK.split(", ")[0]; let UKdateSplitted = UKdate.split("/"); const UKtime = DatoNuStartpointUK.split(", ")[1]; let UKtimeSplitted = UKtime.split(":"); var JSONDate = UKdateSplitted[2] + "-" + UKdateSplitted[1] + "-" + UKdateSplitted[0] + "T00:00"; log("JSON startpoint: " + JSONDate); var AktuelTime = parseInt(UKtimeSplitted[0]); var TimeNu = parseInt(new Date().toLocaleTimeString('da-DK', { hour12: false, timeZone: (await Homey.system.getInfo()).timezone }).split('.')[0]); var JSONLimit = AktuelTime + ArgsTimespan; if(DatoNuStartpoint.getMinutes() > 20){ if(ArgsTimespan == 24){JSONLimit = JSONLimit - 1;} // PAS PÅ IKKE AT KOMME OVER 24 TIMER. } // ----- DOWNLOAD JSON DATA FOR HELE "IDAG" + TIMESPAN ----- let Elpriser; try{ const response = await fetch('https://api.energidataservice.dk/dataset/Elspotprices?limit=' + JSONLimit + '&offset=0&start=' + JSONDate + '&filter={%22PriceArea%22:%22' + PriceArea + '%22}&sort=HourUTC%20ASC&timezone=dk'); log('Downloader fra denne JSON URL: https://api.energidataservice.dk/dataset/Elspotprices?limit=' + JSONLimit + '&offset=0&start=' + JSONDate + '&filter={%22PriceArea%22:%22' + PriceArea + '%22}&sort=HourUTC%20ASC&timezone=dk'); Elpriser = await response.json(); console.log("JSON Response status " + response.status) if(response.status != 200){throw Error("JSON Response error: " + response.status)} }catch (e){ log(e); throw Error("JSON error: " + e); } // ----- LOOP IGENNEM JSON DATA OG UDREGN VÆRDIER TIL TAGS ------ if(Elpriser.records !== undefined && Elpriser.records.length >= AktuelTime + ArgsAntalTimer){ // VARIABLER TIL DAGEN var DagensGennemsnitspris = 0, DagensBilligsteTime_KR = 9999999, DagensBilligsteTime_KL, DagensDyresteTime_KR = -10, DagensDyresteTime_KL; // VARIABLER TIL TIMESPAN var TimespanBilligst_Udregnet_KR, TimespanBilligst_Resultat_KR, TimespanBilligst_Resultat_KL,TimespanDyrest_Udregnet_KR, TimespanDyrest_Resultat_KR, TimespanDyrest_Resultat_KL, TimespanStarttid_Resultat, TimespanTotalpris_Resultat = 9999999, TimespanTotalpris_Udregnet, TimespanGennemsnitspris = 0, I_LoopDato, I_LoopHour, I_LoopPris, J_LoopDato, J_LoopHour, J_LoopPris, PrisLigeNu; for(var i = 0;i < Elpriser.records.length;i++){ I_LoopDato = new Date(Elpriser.records[i]["HourDK"]); I_LoopHour = Number(I_LoopDato.toLocaleTimeString('da-DK', { hour12: false}).split(".")[0]); I_LoopPris = add_moms_og_afgifter((Elpriser.records[i]["SpotPriceDKK"] / 1000), ElAfgifter[I_LoopHour]).toFixed(2); if(I_LoopHour == TimeNu){ PrisLigeNu = I_LoopPris; } if(i < 24){ // OPSAMLING AF DATA SOM TILHØRER "IDAG" FRA KL 0:00 TIL 23:59 DagensGennemsnitspris = DagensGennemsnitspris + Number(I_LoopPris); if(I_LoopPris < DagensBilligsteTime_KR){ DagensBilligsteTime_KR = I_LoopPris; DagensBilligsteTime_KL = I_LoopHour; } if(I_LoopPris > DagensDyresteTime_KR){ DagensDyresteTime_KR = I_LoopPris; DagensDyresteTime_KL = I_LoopHour; } } if(i >= AktuelTime){ // OPSAMLING AF DATA SOM TILHØRER "FRA NU" TIL ENDEN AF TIMESPAN TimespanGennemsnitspris = TimespanGennemsnitspris + Number(I_LoopPris); // SÆTTER NOGLE DUMMY VÆRDIER, SOM BLIVER OVERSKREVET I FØRSTE GENNEMKØRSEL I "J-LOOPET" TimespanBilligst_Udregnet_KR = 999999;TimespanDyrest_Udregnet_KR = -10;TimespanTotalpris_Udregnet = 0;TimespanBilligst_Udregnet_KL = -1; TimespanDyrest_Udregnet_KL = -1; // KLOKKEN I LOOPET ER NU XX:00 - UDREGN PRISEN FOR DE NÆSTE Y ANTAL TIMER for(let j = i; ArgsAntalTimer > j - i &&i < Elpriser.records.length - ArgsAntalTimer +1;j++){ J_LoopDato = new Date(Elpriser.records[j]["HourDK"]); J_LoopHour = Number(J_LoopDato.toLocaleTimeString('da-DK', { hour12: false}).split(".")[0]); J_LoopPris = add_moms_og_afgifter((Elpriser.records[j]["SpotPriceDKK"] / 1000), ElAfgifter[J_LoopHour]); if(J_LoopPris < TimespanBilligst_Udregnet_KR){ TimespanBilligst_Udregnet_KR = J_LoopPris; TimespanBilligst_Udregnet_KL = J_LoopHour; } if(J_LoopPris > TimespanDyrest_Udregnet_KR){ TimespanDyrest_Udregnet_KR = J_LoopPris; TimespanDyrest_Udregnet_KL = J_LoopHour; } TimespanTotalpris_Udregnet = TimespanTotalpris_Udregnet + J_LoopPris; } // UNDERSØG OM DEN UDREGNET PRIS I J-LOOPET VAR BEDRE END TIDLIGERE UDREGNET if(TimespanTotalpris_Udregnet < TimespanTotalpris_Resultat - (BilligPrisMinForskel / 100) && TimespanTotalpris_Udregnet != 0){ // DER SKAL VÆRE MINDST XXX ØRES FORSKEL INKL. MOMS OG AFGIFTER, FØR DER VÆLGES EN SENERE TID TimespanBilligst_Resultat_KR = TimespanBilligst_Udregnet_KR; TimespanDyrest_Resultat_KR = TimespanDyrest_Udregnet_KR; TimespanTotalpris_Resultat = TimespanTotalpris_Udregnet; TimespanStarttid_Resultat = I_LoopHour; TimespanBilligst_Resultat_KL = TimespanBilligst_Udregnet_KL; TimespanDyrest_Resultat_KL = TimespanDyrest_Udregnet_KL; } } } // ---------- BEREGN DATA SOM IKKE KAN BEREGNES I LOOP'ET --------------- // DATA FOR DAGEN DagensGennemsnitspris = (DagensGennemsnitspris / 24).toFixed(2); var DagensGennemsnitspris_kontra_pris_nu = ((PrisLigeNu - DagensGennemsnitspris) * 100).toFixed(0); // ØNSKER RESULTAT I HELE ØRE OG IKKE KRONER // DATA FOR TIMESPAN TimespanGennemsnitspris = (TimespanGennemsnitspris / (Elpriser.records.length - AktuelTime)).toFixed(2); var TimespanGennemsnitspris_kontra_pris_nu = ((PrisLigeNu - TimespanGennemsnitspris) * 100).toFixed(0); // ØNSKER RESULTAT I HELE ØRE OG IKKE KRONER // ------ LOOP JSON DATA IGENNEM IGEN FOR AT FINDE DATA TIL SPEAK - START LOOP FRA "NU" ------------ var Dagens_NaesteGangStroemmenBillig_KL, Dagens_NaesteGangStroemmenBillig_KR, Dagens_NaesteGangStroemmenAllerBillig_KR = 9999999, Dagens_NaesteGangStroemmenAllerBillig_KL, Dagens_StroemmenBilligTil_KL; // for(var i = AktuelTime;i < 24;i++){ for(var i = AktuelTime;i < Elpriser.records.length;i++){ I_LoopDato = new Date(Elpriser.records[i]["HourDK"]); I_LoopHour = Number(I_LoopDato.toLocaleTimeString('da-DK', { hour12: false}).split(".")[0]); I_LoopPris = add_moms_og_afgifter((Elpriser.records[i]["SpotPriceDKK"] / 1000), ElAfgifter[I_LoopHour]); // --- DATA TIL DAGENS SPEAK START --- if(I_LoopPris > DagensGennemsnitspris && !Dagens_StroemmenBilligTil_KL){ Dagens_StroemmenBilligTil_KL = I_LoopHour; } if(I_LoopPris < DagensGennemsnitspris && !Dagens_NaesteGangStroemmenBillig_KL){ Dagens_NaesteGangStroemmenBillig_KR = I_LoopPris; Dagens_NaesteGangStroemmenBillig_KL = I_LoopHour; } if(I_LoopPris + 0.20 < Dagens_NaesteGangStroemmenAllerBillig_KR && Dagens_NaesteGangStroemmenBillig_KL){ Dagens_NaesteGangStroemmenAllerBillig_KR = I_LoopPris; Dagens_NaesteGangStroemmenAllerBillig_KL = I_LoopHour; } } // ------- BEREGN DATA FUNDET I DET EKSTRA LOOP ---------- Dagens_NaesteGangStroemmenAllerBillig_KR = Dagens_NaesteGangStroemmenAllerBillig_KR; // -------------- GENERÉR SPEAK FOR DAGEN ---------------------- let Speak_GenerelRapport = "Strømmen koster lige nu " + String(PrisLigeNu).split(".")[0] + " kroner og " + parseInt((String(PrisLigeNu).split("."))[1]) + " øre, og er "; if(DagensGennemsnitspris_kontra_pris_nu < 0){ // Billigere end gennemsnit DEL 1 Speak_GenerelRapport += (DagensGennemsnitspris_kontra_pris_nu).replace("-","") + " øre billigere"; }else{ Speak_GenerelRapport += (DagensGennemsnitspris_kontra_pris_nu).replace("-","") + " øre dyrere"; } Speak_GenerelRapport += " end dagens gennemsnit på " + String(DagensGennemsnitspris).split(".")[0] + " kroner og " + parseInt(String(DagensGennemsnitspris).split(".")[1]) + " øre."; Speak_GenerelRapport += " Dagens priser varierer fra " + String(DagensBilligsteTime_KR).split(".")[0] + " kroner og " + String(DagensBilligsteTime_KR).split(".")[1] + " øre til " + String(DagensDyresteTime_KR).split(".")[0] + " kroner og " + parseInt(String(DagensDyresteTime_KR).split(".")[1]) + " øre."; if(DagensGennemsnitspris_kontra_pris_nu < 0){ // Billigere end gennemsnit DEL 2 if(Dagens_StroemmenBilligTil_KL){ Speak_GenerelRapport += " Strømmen er billig til kl. " + Dagens_StroemmenBilligTil_KL + "."; }else{ Speak_GenerelRapport += " Strømmen bliver ikke dyr de næste " + (Elpriser.records.length - TimeNu) + " timer."; } }else{ if(Dagens_NaesteGangStroemmenBillig_KL){ // Strømmen kommer under dagensgennemsnit Speak_GenerelRapport += " Strømmen bliver billigere end gennemsnittet kl. " + Dagens_NaesteGangStroemmenBillig_KL; if(Dagens_NaesteGangStroemmenAllerBillig_KL && Dagens_NaesteGangStroemmenAllerBillig_KL != Dagens_NaesteGangStroemmenBillig_KL){ Speak_GenerelRapport += ", men er allerbilligst kl. " + Dagens_NaesteGangStroemmenAllerBillig_KL + ", hvor den koster " + String(Dagens_NaesteGangStroemmenAllerBillig_KR).split(".")[0] + " kroner og " + parseInt(String(Dagens_NaesteGangStroemmenAllerBillig_KR).split(".")[1]) + " øre."; } } else { Speak_GenerelRapport += " Strømmen bliver ikke billig i løbet af de næste " + ArgsTimespan + " timer"; } } log('------------------------------------------------------'); log(Speak_GenerelRapport); // -------------- GENERÉR SPEAK FOR PERIODEN ---------------------- let Speak_FundneTimerRapport = "Jeg har undersøgt de næste " + (Elpriser.records.length - TimeNu) + " timer og fundet de billigste " + ArgsAntalTimer + " timer. Tiden starter kl. " + TimespanStarttid_Resultat + " og har en pris mellem " + String(TimespanBilligst_Resultat_KR).split(".")[0] + " kroner og " + parseInt(String(TimespanBilligst_Resultat_KR).split(".")[1]) + " øre, og " + String(TimespanDyrest_Resultat_KR).split(".")[0] + " kroner og " + String(TimespanDyrest_Resultat_KR).split(".")[1] + " øre. Strømmen koster lige nu " + String(PrisLigeNu).split(".")[0] + " kroner og " + parseInt(String(PrisLigeNu).split(".")[1]) + " øre, og er "; if(TimespanGennemsnitspris_kontra_pris_nu < 0){ // Billigere end gennemsnit Speak_FundneTimerRapport += (TimespanGennemsnitspris_kontra_pris_nu).replace("-", "") + " øre billigere"; }else{ Speak_FundneTimerRapport += (TimespanGennemsnitspris_kontra_pris_nu).replace("-", "") + " øre dyrere"; } Speak_FundneTimerRapport += " end periodens gennemsnit på " + TimespanGennemsnitspris.split(".")[0] + " kroner og " + parseInt(TimespanGennemsnitspris.split(".")[1]) + " øre."; log('------------------------------------------------------'); log(Speak_FundneTimerRapport); // -------------- GENERÉR TAGS FOR FUNDNE VÆRDIER --------------- await tag("ELpris_Opdateret_KL", new Date().toLocaleString('da-DK', { hour12: false, timeZone: (await Homey.system.getInfo()).timezone })); await tag("ELpris_Dagen_Pris_Nu_KR", Number(PrisLigeNu)); await tag("ELpris_Dagen_Gennemsnitspris_KR", Number(DagensGennemsnitspris)); if(Dagens_StroemmenBilligTil_KL){ await tag("ELpris_Dagen_StromBilligTil_KL", Number(Dagens_StroemmenBilligTil_KL)); }else{ await tag("ELpris_Dagen_StromBilligTil_KL", Number(-1)); } if(Dagens_NaesteGangStroemmenBillig_KL){ await tag("ELpris_Dagen_StromBilligNext_KL", Number(Dagens_NaesteGangStroemmenBillig_KL)); }else{ await tag("ELpris_Dagen_StromBilligNext_KL", Number(-1)); } await tag("ELpris_Dagen_StromBilligNext_KR", Number(Dagens_NaesteGangStroemmenBillig_KR)); if(Dagens_NaesteGangStroemmenAllerBillig_KL){ await tag("ELpris_Dagen_StromBilligAllerBilligstNext_KL", Number(Dagens_NaesteGangStroemmenAllerBillig_KL)); }else{ await tag("ELpris_Dagen_StromBilligAllerBilligstNext_KL", Number(-1)); } await tag("ELpris_Dagen_StromBilligAllerBilligstNext_KR", Number(Dagens_NaesteGangStroemmenAllerBillig_KR)); if(DagensDyresteTime_KL){ await tag("ELpris_Dagen_DyresteTime_KL", Number(DagensDyresteTime_KL)); }else{ await tag("ELpris_Dagen_DyresteTime_KL", Number(-1)); } await tag("ELpris_Dagen_DyresteTime_KR", Number(DagensDyresteTime_KR)); if(DagensBilligsteTime_KL){ await tag("ELpris_Dagen_BilligsteTime_KL", Number(DagensBilligsteTime_KL)); }else{ await tag("ELpris_Dagen_BilligsteTime_KL", Number(-1)); } await tag("ELpris_Dagen_BilligsteTime_KR", Number(DagensBilligsteTime_KR)); await tag("ELpris_Periode_Undersoegt_TIMER", Number((Elpriser.records.length - AktuelTime))); await tag("ELpris_Periode_Start_KL", Number(TimespanStarttid_Resultat)); await tag("ELpris_Periode_Laengde_TIMER", Number(ArgsAntalTimer)); await tag("ELpris_Periode_Billigste_Time_KL", Number(TimespanBilligst_Resultat_KL)); await tag("ELpris_Periode_Billigste_Time_KR", Number(TimespanBilligst_Resultat_KR)); await tag("ELpris_Periode_Dyreste_Time_KL", Number(TimespanDyrest_Resultat_KL)); await tag("ELpris_Periode_Dyreste_Time_KR", Number(TimespanDyrest_Resultat_KR)); await tag("ELpris_Periode_Billigste_Timer_Gennemsnitspris_KR", Number((TimespanTotalpris_Resultat / ArgsAntalTimer).toFixed(2))); // GENNEMSNITSPRIS FOR DEN PERIODE SOM ER VALGT SOM DEN BILLIGSTE await tag("ELpris_Periode_Gennemsnitspris_KR", Number(TimespanGennemsnitspris)); // GENNEMSNITSPRIS FOR HELE DEN UNDERSØGTE PERIODE. ALTSÅ FRA "NU" OG X ANTAL TIMER FREM. await tag("ELpris_Speak_GenerelRapport", Speak_GenerelRapport); await tag("ELpris_Speak_FundneTimerRapport", Speak_FundneTimerRapport); }else{ throw Error("Ikke nok JSON data, til at undersøge priserne " + ArgsTimespan + " frem. Der er kun " + (Elpriser.records.length - AktuelTime) + " timer fra datakilden."); } // --------- FUNKTIONER SOM BRUGES OPPE I SCRIPTET ----------- function add_moms_og_afgifter($brutto, $Afgifter){ return Number((($brutto * 1.25) + $Afgifter).toFixed(2)); }