Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

SCRIPT: Fridager.vb - Sjekk for offentlige høytider og andre tilsvarende dager


Moskus

Anbefalte innlegg

36 minutter siden, xibriz skrev:

Det er ikke alle som vet at det å beregne helligdager i Norge er enkel mattematikk ;)

 

Hmm... når jeg gikk på skolen så var ikke ligninger med 14 ukjente betegnelsen på "enkel mattematikk"...

Spoiler

 Public Function GetEasterDate(ByVal Year As Integer) As Date
        'Originally taken from: http://www.thoughtproject.com/Snippets/Easter/Easter.vb.txt

        Dim a As Integer
        Dim b As Integer
        Dim c As Integer
        Dim d As Integer
        Dim e As Integer
        Dim f As Integer
        Dim g As Integer
        Dim h As Integer
        Dim i As Integer
        Dim k As Integer
        Dim l As Integer
        Dim m As Integer
        Dim n As Integer
        Dim p As Integer

        If Year < 1583 Then
            Return Nothing
        Else

            ' Step 1: Divide the year by 19 and store the
            ' remainder in variable A.  Example: If the year
            ' is 2000, then A is initialized to 5.

            a = Year Mod 19

            ' Step 2: Divide the year by 100.  Store the integer
            ' result in B and the remainder in C.

            b = Year \ 100
            c = Year Mod 100

            ' Step 3: Divide B (calculated above).  Store the
            ' integer result in D and the remainder in E.

            d = b \ 4
            e = b Mod 4

            ' Step 4: Divide (b+8)/25 and store the integer
            ' portion of the result in F.

            f = (b + 8) \ 25

            ' Step 5: Divide (b-f+1)/3 and store the integer
            ' portion of the result in G.

            g = (b - f + 1) \ 3

            ' Step 6: Divide (19a+b-d-g+15)/30 and store the
            ' remainder of the result in H.

            h = (19 * a + b - d - g + 15) Mod 30

            ' Step 7: Divide C by 4.  Store the integer result
            ' in I and the remainder in K.

            i = c \ 4
            k = c Mod 4

            ' Step 8: Divide (32+2e+2i-h-k) by 7.  Store the
            ' remainder of the result in L.

            l = (32 + 2 * e + 2 * i - h - k) Mod 7

            ' Step 9: Divide (a + 11h + 22l) by 451 and
            ' store the integer portion of the result in M.

            m = (a + 11 * h + 22 * l) \ 451

            ' Step 10: Divide (h + l - 7m + 114) by 31.  Store
            ' the integer portion of the result in N and the
            ' remainder in P.

            n = (h + l - 7 * m + 114) \ 31
            p = (h + l - 7 * m + 114) Mod 31

            ' At this point p+1 is the day on which Easter falls.
            ' n is 3 for March or 4 for April.

            Return DateSerial(Year, n, p + 1)

        End If

 

... men joda, det ser vel verre ut enn det egentlig er. :) 

Lenke til kommentar
Del på andre sider

17 minutter siden, ZoRaC skrev:

Hmm... når jeg gikk på skolen så var ikke ligninger med 14 ukjente betegnelsen på "enkel mattematikk"...

Det er ikke antall ukjente som løses. Alle variablene har jo en kjent løsning.

Verre er det hvis vi måtte kjøre annen analyse på det.

 

Vet heller ikke om jeg ser problemet. Men så liker jeg matte. ;) 

Lenke til kommentar
Del på andre sider

1 time siden, Moskus skrev:

Det er ikke antall ukjente som løses. Alle variablene har jo en kjent løsning.

 

Definisjonsspørsmål... "p" lar seg ikke løse uten "h" og "m", som ikke lar seg løse uten "a", "b", "d" og "g", osv. Før man har regnet ut dem er de jo "ukjent". ;) 

Lenke til kommentar
Del på andre sider

44 minutter siden, ZoRaC skrev:

 

Ser ikke helt forskjellen på ligningssettet med 14 ukjente og f.eks dette med 3...

https://www.diskusjon.no/index.php?showtopic=1466150

 

I dette tilfelle er det bare en ukjent variabel.

 

1. påskedag = X
Langfredag = X-2
Skjærtorsdag = X-3
osv.

 

Løser man X har man resten.

 

Endret av xibriz
Lenke til kommentar
Del på andre sider

Det kunne man.

Startet i gårkveld på et helligdags-script som tar for seg en kalendernettside for å finne ut om det er hellig eller ei.

Viste ikke dette kunne løses matematisk, men jeg akter å fortsette (mest tor gøy).

 

Fordelen med matematikk som her er at man slipper være avhengig av tilgang til en webside og Internett.

Fordelen med å hente info fra en side er at man slipper å ha korrekt dato stilt inn på serveren samt slipper ta høyde for hvorvidt politiske krefter endrer helligdagene.

Ikke at jeg tror noen av de to grunnene er særlig betydelige :P

 

Endret av Evelen
Lenke til kommentar
Del på andre sider

2 timer siden, Asterix skrev:

Kunne også potensielt løses med mindre matematikk, med denne? https://webapi.no/api/v1/holydays/2017

Mindre matematikk, riktignok, men mer styr for å tolke det. Tipper at scriptet over vil kreve vesentlig mindre ressurser enn å laste ned en fil og tolke den, og vurdere om datoen er en hellidag eller ikke (men den totale ressursbruken er neppe avgjørende).

 

Og så er det flere muligheter for feil. Hva om tjenesten flyttes, eller legges ned? Eller rett og slett bare har en dårlig dag? ;) 

Og man må uansett gjøre unntak for sine egne definerte feriedager, da webapi'en kun gir de offentlige høytidene.

Lenke til kommentar
Del på andre sider

 

Det kan jo deles opp eventuelt i flere script, eller hendelser. Kanskje ryddigst sånn? 

 

f.eks

if offentlig_helligdag_Script finner helligdag

Set helligdag_device=on, else off

 

if fri_fra_jobben_script finner fri

Set fridag_device=on, else off

 

if helligdag_device or fridag_device = on

set fri_total = on, else off

Endret av Evelen
  • Like 1
Lenke til kommentar
Del på andre sider

1 hour ago, Moskus said:

Mindre matematikk, riktignok, men mer styr for å tolke det. Tipper at scriptet over vil kreve vesentlig mindre ressurser enn å laste ned en fil og tolke den, og vurdere om datoen er en hellidag eller ikke (men den totale ressursbruken er neppe avgjørende).

 

Og så er det flere muligheter for feil. Hva om tjenesten flyttes, eller legges ned? Eller rett og slett bare har en dårlig dag? ;) 

Og man må uansett gjøre unntak for sine egne definerte feriedager, da webapi'en kun gir de offentlige høytidene.

Egentlig om man snakker om å håndtere også andre fridager, så er hardcoding i en script ikke optimal synes jeg. Men det tilbyr en kjapp løsning til problemet, uten tvil.

Ideelt burde enten en script lese en annen kalender (som det var foreslått i samme tråd), eller burde HS ha en kalender som vi kunne forsyne med ferie og andre ting fra api'er eller ikke. 

Har feks en Somfy Tahoma boks, som har en grei måte å håndtere det, som jeg kunne tenke neg å ha i HS; det er en 'vanlig' kalender hvor du kan knytte 'dagstype' til de enkelte dager, feks standard, weekend, ferie, hjemmekontor osv...

Så definerer du hva som skjer i de forskjellige dagstypene. Alt på en grafisk måte (drag&drop). 

Ser at det ligger også noen plugins for å bringe en kalender i HS (feks HiTec), eller bringe innholdet til HS. Kanskje noen har erfaring med dette? ;)

Lenke til kommentar
Del på andre sider

9 timer siden, Asterix skrev:

Ideelt burde enten en script lese en annen kalender (som det var foreslått i samme tråd), eller burde HS ha en kalender som vi kunne forsyne med ferie og andre ting fra api'er eller ikke. 

Det er uten tvil det ideelle. "Hardkoding" av fridager (det er nå enkelt å flytte til en ini-fil, hvis du synes det blir mindre "hardkodet" av det ;) ) er i mellomtiden et nødvendig onde, slik jeg ser det.

 

Jeg har lenge hatt en drøm om at HS leser Outlook.com-felleskalenderen vår. Men har foreløpig ikke fått det til.

Lenke til kommentar
Del på andre sider

11 minutes ago, Moskus said:

 

Jeg har lenge hatt en drøm om at HS leser Outlook.com-felleskalenderen vår. Men har foreløpig ikke fått det til.

Når jeg Googlet litt rundt, fant jeg noe om det (fra han som lagde Tenscripting tror jeg). Men det var antakelig for den gamle versjonen av Outlook?

Lenke til kommentar
Del på andre sider

Outlook-versjonenes APIer er relativt like, så det kan godt være det fungerer nå. Mitt problem er imidlertid at det ikke er "default calendar" jeg skal hente informasjon fra, og det var plutselig vanskeligere enn det burde. Men det er mulig jeg som er treig, og ikke har prøvd nok...

Lenke til kommentar
Del på andre sider

  • 2 måneder senere...

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.