Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!

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


Moskus

Recommended Posts

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. :) 

Link to comment
Share on other sites

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. ;) 

Link to comment
Share on other sites

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". ;) 

Link to comment
Share on other sites

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.

 

Edited by xibriz
Link to comment
Share on other sites

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

 

Edited by Evelen
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

 

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

Edited by Evelen
  • Like 1
Link to comment
Share on other sites

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? ;)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.