Gå til innhold
  • Bli medlem
Moskus

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

Anbefalte innlegg

2 minutter siden, ZoRaC skrev:

Hadde vært kult å hente ut ekstra fridager fra en Google-kalender?

https://developers.google.com/google-apps/calendar/v3/reference/events/list 

Absolutt enig. Men jeg bruker ikke Google-kalender selv... Hvis du får det til, så post gjerne kodesnutten her. :) 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Det er bra at en av mine første OpenSource-kodesnutter kom til nytte :) Det er ikke alle som vet at det å beregne helligdager i Norge er enkel mattematikk ;)

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider
21 minutter siden, xibriz skrev:

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

Jeg visste ikke... ;) 

Del dette innlegget


Lenke til innlegg
Del på andre sider
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. :) 

Del dette innlegget


Lenke til innlegg
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. ;) 

Del dette innlegget


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

Del dette innlegget


Lenke til innlegg
Del på andre sider
16 minutter siden, ZoRaC skrev:

Definisjonsspørsmål...

Nei. ;)

Noen er selvfølgelig avhengig av de andre, men alle har en kjent løsning.

Del dette innlegget


Lenke til innlegg
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

Del dette innlegget


Lenke til innlegg
Del på andre sider
1 time 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

Fordi alle de fjorten går ikke inn i hverandre, Det er ikke 14 ligninger med 14 ukjente. :) 

 

Men samme det. Scriptet fungerer. ;) 

Del dette innlegget


Lenke til innlegg
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

Del dette innlegget


Lenke til innlegg
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.

Del dette innlegget


Lenke til innlegg
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

Del dette innlegget


Lenke til innlegg
Del på andre sider
12 minutter siden, Evelen skrev:

Det kan jo deles opp eventuelt i flere script, eller hendelser.

... så man kan gjøre det enda mer komplisert enn nødvendig? :P 

Del dette innlegget


Lenke til innlegg
Del på andre sider
1 time siden, Moskus skrev:

... så man kan gjøre det enda mer komplisert enn nødvendig? :P 

øyet som ser det ;) blir vel egentlig bare mindre komplisert slik jeg ser det.

Del dette innlegget


Lenke til innlegg
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? ;)

Del dette innlegget


Lenke til innlegg
Del på andre sider
7 timer siden, Asterix skrev:

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

 

Mulig BLGdata kan være løsningen, for Google Calendar? :) 

https://forums.homeseer.com/forumdisplay.php?f=1146

  • Like 1

Del dette innlegget


Lenke til innlegg
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.

Del dette innlegget


Lenke til innlegg
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?

Del dette innlegget


Lenke til innlegg
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...

Del dette innlegget


Lenke til innlegg
Del på andre sider

Join the conversation

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

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Fjern formatering

  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.


  • Lignende innhold

    • Av Rune L
      Jeg ønsker å måle volt 0-50 volt å få lest det av i Homeseer.
      Hvordan kan det gjøres? Arduino? z-wave ?
    • Av Moskus
      Dette scriptet lar deg hente inn trafikkinformasjon fra EnTur.  
       
      Finne reiseruter, IDer for "StopPlace" og "Quay"
      Å bruke scriptet er ikke så vanskelig. Det vanskelige er å finne IDene til stasjonene du vil spore. 
       
      La oss si at jeg vil finne alle busser som går fra "Tasta Senter" (og mot Stavanger sentrum, men det kommer vi tilbake til)
      Gå til en-tur.no Tast inn stoppesteder til og fra Kopier URL'en fra nettleseren etter søket (f.eks. som denne) inn URLdecoder.org for å gjøre den lettere å lese. Finn "startID" og kopier ut strengen som begynner med "NSR:". For Tasta Senter er denne "NSR:StopPlace:28163"  
      Oppdatering: Etter tips fra @Odd Are er det enklere å gå hit med brukernavn/passord guest/guest og hente QuayIDer og StopPlaceIDer derfra.
       

       
      Vel og bra!  Nå vet vi at busstoppet ved Tasta Senter heter "NSR:StopPlace:28163". Men et busstopp kan faktisk ha flere plattformer, f.eks. en på hver side av veien. Det heter visst "Quay" på engelsk.
       
      Jeg er ikke interessert i begge sider av veien for kun en av dem har vanligvis trafikk mot sentrum. For å finne Quay, må vi bruke GraphQL-exploreren til EnTur (som dessverre ikke er like forseggjort som Tibber sin). Vi er interessert i denne spørringen som finner alle avganger for et stoppested, og vi må endre id: "NSR:StopPlace:28163" og avgangstiden (startTime:"2018-06-19T09:00:00+0200") til det riktige. I skrivende stund ser min spørring slik ut. 
       
      Så går vi gjennom resultatene, vi skal prøve å finne riktig "Quay".
       
      Det første treffet er inneholder denne teksten:
      "destinationDisplay": { "frontText": "Tasta - Vardeneset" }, "quay": { "id": "NSR:Quay:48450" }, ... men en buss med "Tasta - Vardeneset" tar meg i feil retning! Ergo er "NSR:Quay:48450" ikke riktig.
       
      Det neste treffet inneholder dette:
      "destinationDisplay": { "frontText": "Stavanger" }, "quay": { "id": "NSR:Quay:48449" }, Jepp! Riktig! Altså kan vi filtrere på "NSR:Quay:48449" for å finne avganger fra "NSR:StopPlace:28163" som kun går mot Stavanger.
       
       
       
      Installasjon
      Du trenger en referanse til Newtonsoft.Json.dll for at scriptet skal fungere. Json er mye i bruk i dag, og siden jeg har oppdaget at Webclient nå er innebygget i HS3 (og superenkel å bruke), så er det bare å legge inn Json-støtte for scripting også.
       
      Lukk HS3. Åpne settings.ini Finn linjen som begynner med ScriptingReference= Vanligvis står det kun System.Core;System.Core.dll. Vi skal legge til Newtonsoft bak der. Hos meg (på Windows) skal linjen da se slik ut:  
      ScriptingReferences=System.Core;System.Core.dll,Newtonsoft.Json;C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll Lagre og start HS3 igjen. For Linux skal den muligens se slik ut, men du må sjekke plasseringen på /bin/homeseer/Newtonsoft.Json.dll selv.
      ScriptingReferences=System.Core;System.Core.dll,Newtonsoft.Json;/usr/local/HomeSeer/bin/homeseer/Newtonsoft.Json.dll  
       
      Kopier scriptet under og lagre det som EnTur.vb. Etter massiv testing fra @Tor-Erik er vi ganske sikre på at det også kjører på Linux.  
       
      EnTur.vb:
       
       
      Du må også lage deg noen devicer selv for å faktisk vise data. Dette gjør foreløpig ikke scriptet for deg. Den trenger ingen status values, men kanskje en enkel status Graphics for å ha et ikon (istedenfor Off/Dim/On-ikoner)
        

       

       
       
       
      Så trenger vi et event for å oppdatere teksten. Dette kan f.eks. kjøre hvert minutt.
      Parametre for funksjonen "CallsFromStopplace" er deviceID, stopplaceID, quayID (optional), antall_avganger (optional).
       

       
      Du kan ha flere script-kall i et event, hvis du har flere stopp, avganger, etc du vil kontrollere.  
       

       
       
      Parametre for funksjonen "TripsBetweenStops" er deviceID, stopplaceID (fra), stopplaceID (til), antall_avganger (optional). Det er et enkelt ruteoppslag, fint fra større stasjoner (f.eks. "Stavanger") til et bestemt stoppested.
       
      DeviceValue i hver device er antall minutter til neste avgang. Kan brukes til automasjon.  
       

       
       
      EDIT:
      Oppdatert juli 2019 pga. flytting av URL for EnTur APIet. Gjeldene URL er nå: https://api.entur.io/journey-planner/v2/graphql
      Oppdatert januar 2020 pga. bruk av TSL12.
       
    • Av Olamann1
      HS3 PRO Lisens selges
       
      kr 2000,- 
       

      25$ til Homeseer for å omregistrere lisensen over til ny bruker.
    • Av Guahtdim
      Dette er en plugin for å kunne styre Daikin varmepumpe med wifi-modul
       
      Link til siste versjon
      DakinSeer 0.0.1.3
      (NB: Kun testet i Windows )
      Hvis du allerede har installert tidligere versjoner så slett alle enheter og opprett på nytt
       
      Hva denne plugin gjør:
      Gir deg en oversikt over forskjellige status

      Gir deg mulighet til å styre varmepumpen fra "oversiktbildet"
      eller 
      legge det inn som en action i en (eller flere) events

       

       
      Hvordan sette opp :
      VIKTIG!!! Stopp Homeseer og ta en kopi av hele katalogen til Homeseer (normalt "c:\program files (x86)\Homeseer HS3" for Windows) og legg kopien på ett trygt sted i tilfelle du trenger å gå tilbake. Pakk ut filen i din Homeseer katalog - pass på at du får følgende oppsett (katalogen "Homeseer HS3" skal inneholde 2 nye filer HSPI_DaikinSeer.exe og HSPI_DaikinSeer.exe.config, mens du i katalogen Homeseer HS3\bin og Homeseer HS3\html\images skal ha fått en ny underkatalog - DaikinSeer)   Restart Homeseer Gå inn på Homeseer->Plugins->Manage og trykk enable på DaikinSeer  
      Hvordan å legge inn en varmepumpe
      For å kunne legge inn en varmepumpe så må du vite ip adressen til den.  Dette kan du finne i f.eks. routeren din. 
       
       
      General Settings
      I "General Settings" vil du kunne sette opp hvor lang tid det skal gå mellom hver gang det hentes info fra varmepumpen (der er det en copy&paste bug ja). Time between triggering if true skal egentlig være "Time between heat pump check" eller noe.
      Du kan sette loggnivå.
      Og du får opp antall varmepumper tilknyttet (Number of heat pumps to check)

       
      Sette temperatur offset for alle varmepumper som kjøres av plugin

      Ved å sette noe annet enn 0 grader på heat point offset så vil temperaturene du ser i HomeSeer være justert i forhold til offset. Si at du setter det til -2,5 grader. Da vil du se 24 grader i HomeSeer på Heat point, men plugin vil ha fått inn 26,5 grader. Det samme vil også gjelde hvis du endrer temperatur. Hvis du endrer fra 24 til 23 grader så sendes 25,5 grader til varmepumpen.
      NB: Dette gjelder kun for plugin så hvis noen begynner å endre med fjernkontroll eller app på telefonen så vil ikke offset gjelde fra disse. Fjernkontroll vil heller ikke få med seg endringer sendt til varmepumpen.
       
      Streamer mode, Power mode og Econo mode

      Ved å velge en ip adresse fra dropdown som sier "Choose ip address for adding power and streamer" så vil det gjøres en test på om denne enheten har en eller flere av disse mulighetene. Hvis det blir testet ok så legges dette til i HomeSeer for gjeldende enhet.
       
       
      Endringslogg
      0.0.1.3 - Oppdatert slik at Connected vil endre seg til verdier over 0 hvis det er feil. I tillegg lagt til nytt ikon og ekstra tekst når det kommer feil tilbake fra Daikin varmepumpe
      0.0.1.1 - Lagt inn mulighet for å legge inn offsetverdi på temperatur. Denne vil gjelde for alle varmepumper som du kjører. I tillegg gitt mulighet til å legge til EconoMode, PowerMode og StreamerMode (hvis du har det på din varmepumpe). Disse tre modes må legges til ved å velge dette fra dropdown i Ip-config.
      0.0.0.9 - Fikset feil nummer brukt når man skulle skifte til FAN mode. Også oppdatert slik at plugin husker siste temperatur hvis man skifter mellom modes og en av de er FAN siden FAN ikke rapporterer temperatur tilbake (Dette forutsetter at plugin har fått en temperatur før man skifter til FAN mode. Hvis man starter i FAN mode vil default temperatur være 18 grader for kjøling og 10 grader for oppvarming). Takk til @Kenneth for å ha funnet denne.
      0.0.0.8 - Fikset håndtering av tall med desimaler fra Wifi adapter når man ikke kjører US oppsett.
      0.0.0.6 - Endret bygging av temperatur dropdown for å unngå feil ved desimal verdier0.0.0.7 - Fikset visning av temperatur ikoner + ekstra sjekk når man lager enhet slik at man ikke kan ha mer enn en varmepumpe per Ip
      0.0.0.5 - endret shum tilbake, men sørget for us-formatering av temperatur sendt til varmepumpe fra HomeSeer
      0.0.0.4 - endret shum i til å ikke ha verdi (fra shum=0&.. til shum=&..)
      0.0.0.3 - Fikset flere upper/lower case  i image-path
      0.0.0.2 - Lagt på litt mer debug logging og fikset noen upper/lower case i image-path
      0.0.0.1 - Første versjon
       
       
      Problemer/utfordringer/videreutvikling
      Få inn PowerMode, Streamer og EcoMode for de enheter som støtter dette. Automagisk legge dette inn i oppstart. Individuelt oppsett av offset for de som har mer enn en varmepumpe. Gjenopprette devicer tilbake til standard hvis man f.eks. har slettet eller gjort endringer på enhetene sine. Prøve å beholde deviceId hvis denne finnes. Få til en oppdatering av allerede eksisterende enheter hvis man har gjort rettelser på de. Kunne selv velge default temperatur hvis plugin ikke har noen temperatur å gå ut ifra Legge inn mulighet for å kjøre en offset på ønsket temperatur Kunne sende Streamer on/off og Powerful on/off for de som har dette Det skal ikke være mulig å lage mer enn en enhet/samling med devicer per ip. Hvis den allerede eksisterer så skal man få opp en advarsel. Hvordan få satt en drop-down til å ha korrekt formatering i forhold til hva HomeSeer forventer.
    • Av ThomasBK
      Hei.
      Jeg starter opp en ny tråd, siden det ikke ser ut til å være treff på dette temaet her på hjemmeautomasjon.no
      Vår HS3 er satt opp til å styre alt av lys i huset, og er i tillegg integrert med både Sonos og Verisure. Eventene er fortsatt under oppbygging, da det gir utallige muligheter. Noen som har noen praktiske/kule råd vedr nevnte services, så tas det mot med takk...
      Så til saken; I flere år har vi hatt trådløs styring av vannbåren varme i mer enn 75% av husets gulv. Da er det Watts sine termostater med programmering lokalt som styrer en Watts WFHC-BAS som er utvidet også med en slave, totalt 12 kanaler. Disse igjen styrer aktuatorene (av/på ettersom temperaturen lokalt). Jeg ønsker heller å styre alt via HomeSeer, dvs ha termostater (f.eks Nexa/Cotech e.l.) som lokalt forteller HomeSeer hva temperaturen, hvor eventer igjen styrer Watts WFHC-BAS til å åpne/lukke aktuatorer.
      Watts WFHC-BAS bruker 433,92 - kommunikasjon, og vi har rfxcom til å styre 433,92 devicene med HomeSeer. Men finner ikke ut om rfx-senderen klarer å kommunisere med Watts-masteren? Noen som har peiling? Går det an å programmere/lære opp rfx-senderen til riktig "språk" som trengs for å slå AV og PÅ?
×
×
  • Opprett ny...