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

GCalSeer - En plugin for kobling mot Google og Microsoft kalendere - 0.0.5.0


Guahtdim

Anbefalte innlegg

Mulig det er selve kalendernavnet jeg ikke har helt grep på. Kalenderen jeg er interessert i heter "Familien" så vidt jeg kan forstå:

image.png

... og dette eventet fungerer fint. (Glimrende jobbet, btw! :D )

 

Men så dette:

image.png

... gir ingenting.

 

Nå har jeg endret plugin-funksjonen fra "GetItemsFromGoogleCalendar" til "GetItemsFromCalendar", og da får jeg feilmelding i loggen:

aug-13 12:21:53   GCalSeer-Error Could not find a calendar named '"Familien"'

 

:( 

 

 

 

... EDIT: Og:

 

aug-13 12:24:09   GCalSeer-Error Function GetItemsFromMsCalendar does not exist in this plugin

 

 

 

EDIT2: Faen jeg er idiot. Riktig parameter er 3590,Familien,5. Dvs. uten hermetegn. Idiot.

 

Lenke til kommentar
Del på andre sider

GetItemsFromCalendar skal være den generelle som leter igjennom alle kalendere og henter ut hvis man finner navnet i en liste.

GetItemsFromGoogleCalendar er for google 

GetItemsFromMsCalendar er for MS og skulle fungere.

 

Men de scripttingene er vel egentlig mine "stebarn" og har fått litt lite kjærlighet (og jeg bruker det ikke selv). 

Jeg får kikke på det ikveld.

Endret av Guahtdim
fixed size
Lenke til kommentar
Del på andre sider

Jepp! :)

 

Sub Main(ByVal Parms As Object)
        Dim msg As String = ""
        Try
            Dim ParmArray() As String
            ParmArray = Parms.ToString.Split(",")
            Dim deviceID = ParmArray(0)
            Dim calendarName = ParmArray(1)
            Dim numberOfDays = CInt(ParmArray(2))
            Dim allEvents As Object

            allEvents = hs.PluginFunction("GCalSeer", "", "GetItemsFromCalendar", New Object() {calendarName, numberOfDays})
            For Each ev As Object In allEvents
                Dim calendarEventAsString As String = ""
                If ev.StartDateTimeLocal.Date = Now.Date Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = "Dagens "
                    Else
                        calendarEventAsString = "Kl. "
                    End If
                End If
                If ev.StartDateTimeLocal.Date = Now.Date.AddDays(1) Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = "I morgen "
                    Else
                        calendarEventAsString = "I morgen kl. "
                    End If
                End If

                If ev.StartDateTimeLocal.Date < Now.Date.AddDays(2) Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = calendarEventAsString & ev.Subject
                    Else
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "HH:mm") & " - " & ev.Subject
                    End If
                Else
                    If ev.AllDayEvent Then
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "ddd dd.MM") & " (hele dagen) - " & ev.Subject
                    Else
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "ddd dd.MM HH:mm") & " - " & ev.Subject
                    End If
                End If

                If ev.StartDateTimeLocal.Date = Now.Date Then
                    calendarEventAsString = "<b>" & calendarEventAsString & "</b>"
                End If
                msg = calendarEventAsString & "</br>" & msg
            Next

            'hs.WriteLog("test", "events found: " & msg)

            If msg = "" Then
                msg = "No Events Scheduled"
            End If
            hs.SetDeviceString(deviceID, msg, True)
        Catch ex As Exception
            hs.WriteLog("", "Exception in script: " & ex.Message)
        End Try
        'hs.WriteLog("test", "---=== DONE ===---")

    End Sub

 

  • Thanks 1
Lenke til kommentar
Del på andre sider

En mindre oppdatering er gjort. Fjernet blant annet de 2 config sidene som ikke fungerte.  Scriptmessig kan man nå bruke både GetItemsForMsCalendar og GetItemsFromMsCalendar. Sistnevnte ble beskrevet i dokumentasjon, men virket ikke siden jeg hadde laget GetItemsForMsCalendar isteden. ?

Siste versjon finnes linket i første post.

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

Er det "trygt" for meg å oppgradere til denne versjonen, eller er det fortsatt en "toonwolf" branch som har egne funksjoner som ikke er i denne? Vil ikke risikere å oppgradere for å finne ut at ingenting fungerer lenger. "Never upgrade a working system" eller noe sånt ?

Lenke til kommentar
Del på andre sider

40 minutes ago, toonwolf said:

Er det "trygt" for meg å oppgradere til denne versjonen, eller er det fortsatt en "toonwolf" branch som har egne funksjoner som ikke er i denne? Vil ikke risikere å oppgradere for å finne ut at ingenting fungerer lenger. "Never upgrade a working system" eller noe sånt ?

Haha - If it works don't touch!

 

Denne versjonen (og forrige) skal nå også ha dine spesialtilpassninger i seg. Men du kan alltids la det snurre litt i testsystemet ditt inntil du er sikker.

Lenke til kommentar
Del på andre sider

16 minutes ago, Moskus said:

Hva er reglene for hvilke hendelser som dukker opp i plugin'en?

 

Jeg har en hendelse i morgen som viste fint i på devicen min. Det er kl. 16:00 i morgen. Da jeg sjekket rett over kl. 16 i dag var det borte...?

Kalenderhendelser hentes i utgangspunktet ved at man henter de som er innefor dagens dato til dagens dato + antall dager spesifisert. Slik at ett kall akkurat nå med 3 dager lagt til ville hentet med datospenn 2019-08-16 00:00 til 2019-08-19 00:00 (mulig jeg burde endret endelsen til 23:59:59). Jeg har ikke testet nok til at jeg kan si hva som gjør at ting forsvinner før tiden. Slik du beskriver det skulle hendelsen ha vært med til 2019-08-17 00:00.

Endret av Guahtdim
Lenke til kommentar
Del på andre sider

13 timer siden, Guahtdim skrev:

Slik du beskriver det skulle hendelsen ha vært med til 2019-08-17 00:00.

Ja, det er slik jeg har oppfattet det, men den ER ikke der.

 

Lurte på om det kunne være tidssone-problem, men det skal litt til at det er et døgn på overtid... Jeg har sett det før, men da har hendelsen forsvunnet den siste timen. Det kan også være litt plagsomt for oss som vil bruke HomeSeer som en familiekalender, men denne hendelsen tok kaka.

 

I'll keep an eye on it. ;) 

Lenke til kommentar
Del på andre sider

OK, jeg har funnet bug'en. Om det faktisk er en bug eller ei kan sikkert diskuteres, men slik det er nå gir det begrensninger.

 

Funksjonen som henter kalender-entries, gir dem i synkende rekkefølge. Når HomeSeer (eller jeg i scriptet) prøver å begrense visninger, så får det merkelige konsekvenser. Dette kan unngå med å sortere hendelsene til stigende rekkefølge, slik at det første eventet som returneres er det som er nærmest i tid. :) 

 

Burde være enkelt å løse iallfall. :) 

  • Like 1
Lenke til kommentar
Del på andre sider

20 hours ago, Moskus said:

OK, jeg har funnet bug'en. Om det faktisk er en bug eller ei kan sikkert diskuteres, men slik det er nå gir det begrensninger.

 

Funksjonen som henter kalender-entries, gir dem i synkende rekkefølge. Når HomeSeer (eller jeg i scriptet) prøver å begrense visninger, så får det merkelige konsekvenser. Dette kan unngå med å sortere hendelsene til stigende rekkefølge, slik at det første eventet som returneres er det som er nærmest i tid. :) 

 

Burde være enkelt å løse iallfall. :) 

 

På hvilken måte prøver du å bregrense antallet?

Grunnen til sorteringens rekkefølge er for at scriptene som er lagt ved skal fungere "out of the box"

Endret av Guahtdim
Lenke til kommentar
Del på andre sider

5 timer siden, Guahtdim skrev:

Grunnen til sorteringens rekkefølge er for at scriptene som er lagt ved skal fungere "out of the box"

Da får vi også endre "the box". :)

 

La oss si at jeg vil hente hendelser for de neste 7 dager. Har man mange hendelser vil scriptet fjerne de tidligste hendelsene. Jeg vet ikke hvorfor, men de fjernes. Jeg gjør da det (logiske) valget ved å ha de førstkommende hendelsene øverst, slik man leser en kalender.

 

Jeg vil også ha en begrensning på maksimalt de 10 neste hendelser. Dette fordi det er ryddigst i HStouch, samt at HomeSeer selv setter noen merkelige begrensninger når strengen er større enn vinduet den vises i. I noen uker kan antallet hendelser de neste 7 dagene være ganske stort, og derfor kan det være kjekt med denne begrensningen.

 

(I eksempelet under har jeg fjernet antall-begrensningen i scriptet, alt er direkte hentet fra plugin).

 

La oss si at jeg henter eventer for de 3 neste dagene. Da får jeg dette (når jeg fjerner subjektet, privatlivets fred):

 

Parametre: image.png

Resultat:

image.png

 

 

Så endrer vi det til 10 neste dager.

Parametre:image.png

Resultat:

image.png

 

.... Altså er det en innebygget begrensning på 10 hendelser, som forsåvidt er det jeg ønsket meg. Så det er bra! :) 

 

MEN siden lista som returneres fra pluginen er sortert feil vei, får jeg de 10 hendelsene i lista som er lengst vekk i tid, og ikke de som er interessante. Altså de som er nærmest nå-tidspunktet i løpet av de 10 neste dagene. ;) 

 

 


Se script:

Spoiler

 


Sub Main(ByVal Parms As Object)
        Dim msg As String = ""
        Try
            Dim ParmArray() As String
            ParmArray = Parms.ToString.Split(",")
            Dim deviceID = ParmArray(0)
            Dim calendarName = ParmArray(1)
            Dim numberOfDays = CInt(ParmArray(2))
            Dim allEvents As Object

            allEvents = hs.PluginFunction("GCalSeer", "", "GetItemsFromCalendar", New Object() {calendarName, numberOfDays})
            Dim counter as Integer = 0
            For Each ev As Object In allEvents
                counter += 1
                Dim calendarEventAsString As String = ""
                If ev.StartDateTimeLocal.Date = Now.Date Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = "Dagens "
                    Else
                        calendarEventAsString = "Kl. "
                    End If
                End If
                If ev.StartDateTimeLocal.Date = Now.Date.AddDays(1) Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = "I morgen "
                    Else
                        calendarEventAsString = "I morgen kl. "
                    End If
                End If

                If ev.StartDateTimeLocal.Date < Now.Date.AddDays(2) Then
                    If ev.AllDayEvent Then
                        calendarEventAsString = calendarEventAsString & ev.Subject & " (" & counter & ")"
                    Else
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "HH:mm") & " - " & ev.Subject & " (" & counter & ")"
                    End If
                Else
                    If ev.AllDayEvent Then
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "ddd dd.MM") & " (hele dagen) - " & ev.Subject & " (" & counter & ")"
                    Else
                        calendarEventAsString = calendarEventAsString & Format(ev.StartDateTimeLocal, "ddd dd.MM HH:mm") & " - " & ev.Subject & " (" & counter & ")"
                    End If
                End If

                If ev.StartDateTimeLocal.Date = Now.Date Then
                    calendarEventAsString = "<b>" & calendarEventAsString & "</b>"
                End If
                msg = calendarEventAsString & "</br>" & msg

            'If counter = 10 then Exit For

            Next

            'hs.WriteLog("test", "events found: " & msg)

            If msg = "" Then
                msg = "No Events Scheduled"
            End If
            hs.SetDeviceString(deviceID, msg, True)

        Catch ex As Exception
            hs.WriteLog("", "Exception in script: " & ex.Message)
        End Try
        'hs.WriteLog("test", "---=== DONE ===---")

    End Sub
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

 

 

  • Thanks 1
Lenke til kommentar
Del på andre sider

Jeg skal se på det ved anledning.

Etter en kjapp sjekk i koden så ser jeg at jeg har en begrensning på 10 events når man henter fra Ms. Sånn er det når man ikke har helt tid til det man driver med. Script-delen og Microsoft er lagt til i etterhånd og ikke det jeg selv bruker. Ergo dårlig testing.

 

Jeg skal iallefall endre fra 10 til 100 og så må jeg kikke litt på sortering slik at det blir likt både for MS og Google

  • Thanks 1
Lenke til kommentar
Del på andre sider

Det ser ut som om det er MS selv som setter begrensningen på 10 stykk kalender hendelser. Jeg har nå gjort om på kode slik at man plukker de første 100 i tidsrommet man har valgt med stigende sortering (med andre ord har man 200 hendelser er det kun de 100 nærmeste i tid som blir hentet ut).

 

I utgangspunktet så kjørte koden med utvalg på nå-tidspunkt from til x antall dager valgt. Gitt at man gjør sjekk 2019-08-21 kl 10:15 og ber om neste 3 dager vil siste tidspunkt man plukker fra være 2019-08-24 kl 10:15.

Skal det beholdes eller ønsker man at man henter inn fra hele dager? Da ville tidsrommet her blitt fra 2019-08-21 kl 00:00 til 2019-08-24 kl 23:59:59.997.

Lenke til kommentar
Del på andre sider

1 time siden, Guahtdim skrev:

Skal det beholdes eller ønsker man at man henter inn fra hele dager? Da ville tidsrommet her blitt fra 2019-08-21 kl 00:00 til 2019-08-24 kl 23:59:59.997.

Jeg ønsker meg hele dager, hvis det er mulig å få til. 

 

1 time siden, Guahtdim skrev:

Jeg har nå gjort om på kode slik at man plukker de første 100 i tidsrommet man har valgt med stigende sortering (med andre ord har man 200 hendelser er det kun de 100 nærmeste i tid som blir hentet ut).

Da tror jeg, og håper, at det burde være løst. Spesielt stigende rekkefølge vil hjelpe veldig.

Lenke til kommentar
Del på andre sider

Ny versjon ute (0.0.3.2) som fikser problemet med uthenting av kalenderhendelser. Kun de som henter fra Microsoft kalender(e) trenger denne oppdateringen.

Se første post for link til nedlasting.

Endret av Guahtdim
Info om link
  • Like 1
Lenke til kommentar
Del på andre sider

Ny versjon ute som håndterer at man har laget en kalenderhendelse uten navn/subject/summary/overskrift. Hvis du lager noen sånne hendelser så vil plugin dø når den prøver å parse feltet.

Anbefaler alle å hente ned denne. Link i første post oppdatert.

 

Takk til @toonwolf for å finne bug.

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

40 minutter siden, Guahtdim skrev:

uten navn/subject/summary/overskrift. Hvis du lager noen sånne hendelser så vil plugin dø når den prøver å parse feltet.

Takk til @Guahtdim for superrask feilretting. Har blitt helt avhengig av denne fantastiske plug-inen så det setter jeg utrolig pris på ?

 

Når det gjelder å opprette kalenderavtaler uten emne er det noe som selvfølgelig normalt ikke blir gjort og jeg har vel aldri selv gjort dette. Akkurat denne avtalen som ble lagt inn ble gjort i en delt kalender av noen andre enn meg, men uansett  er det greit å få lagt inn en sjekk slik at det ikke vil skje i fremtiden. Jeg forsøkte å endre på emne i etterkant i Google Kalender, men det hjalp ikke stort. Mulig dette har sammenheng med at GCalSeer laster ned kalenderaktiviteter og lagrer disse lokalt og at den brukte den "cachede" aktiviteten som jo ikke hadde noe tekst i emnet.

Lenke til kommentar
Del på andre sider

1 hour ago, toonwolf said:

Takk til @Guahtdim for superrask feilretting. Har blitt helt avhengig av denne fantastiske plug-inen så det setter jeg utrolig pris på ?

 

Når det gjelder å opprette kalenderavtaler uten emne er det noe som selvfølgelig normalt ikke blir gjort og jeg har vel aldri selv gjort dette. Akkurat denne avtalen som ble lagt inn ble gjort i en delt kalender av noen andre enn meg, men uansett  er det greit å få lagt inn en sjekk slik at det ikke vil skje i fremtiden. Jeg forsøkte å endre på emne i etterkant i Google Kalender, men det hjalp ikke stort. Mulig dette har sammenheng med at GCalSeer laster ned kalenderaktiviteter og lagrer disse lokalt og at den brukte den "cachede" aktiviteten som jo ikke hadde noe tekst i emnet.

Det er litt mellomlagring så jeg må se over det også. Men i utgangspunktet skulle en restart av plugin slette alt som jeg mellomlagrer. Uansett så har jeg fått opp en sikring mot dette, men jeg bør kikke litt på mellomlagringen for å sikre meg at jeg ikke tar vare på gamle kalenderoppføringer uten å få med oppdateringer gjort via Google/MS.

Lenke til kommentar
Del på andre sider

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.