Gå til innhold
  • Bli medlem
Guahtdim

GCalSeer - En plugin for kobling mot Google og Microsoft kalendere

Anbefalte innlegg

Du får se om du klarer å gjenskape det eller om det var en engangshendelse. Jeg tviler ikke på at jeg har noen huller i koden min.

Del dette innlegget


Lenke til innlegg
Del på andre sider

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.

 

Del dette innlegget


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

Del dette innlegget


Lenke til innlegg
Del på andre sider

Hah, skriveleif ser jeg.

Prøv med 

GetItemsForMsCalendar

 

Men jeg er usikker på om du får noe mer events ut.

Del dette innlegget


Lenke til innlegg
Del på andre sider
20 minutter siden, Moskus skrev:

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

🙄😎😁

  • Haha 2

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


Lenke til innlegg
Del på andre sider

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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

Del dette innlegget


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

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 Guahtdim
      Dette er en plugin for å kunne sende sms ved hjelp av Twilio eller BudgetSMS. 
       
       
      I event

       
      2019-04-27: Nå også med muligheten til å hente inn telefonnummeret som det skal mottas fra i teksten på en annen enhet (device).
      Man kan plukke enhet.
      Velge om man skal ta teksten som
      As Is - som den er
      PlanyoFormat - eget format (47) 12345678
      RegEx - Regulært uttrykk
       

       
      Config
      Nytt fra 2019-04-27 er at man kan velge å legge inn alphanumeric id som avsender. Man kan f.eks. ha HomeSeer som avsender.
      Krav til alphanumeric id: Max 11 tegn. Kun A-Z, a-z, 1-9 og <space>. Man kan ikke ha kun tall for å spoofe andre nummer
      Resend guard - beskytter deg mot å sende samme melding mer enn en gang over gitt periode. Her har jeg selv satt den til 2 minutter. Så hvis det kommer en eksakt lik melding til samme mottaker og den allerede er sendt for 2 minutter siden eller mindre så sendes ikke ny.
       

       
       
       
      Videre planer:
      Lage en ny plugin på grunnlag av TwilioSeer som skal støtte flere leverandører Kunne overstyre default receivers når man legger inn event. Kunne sette en levetid på sms slik at hvis den ikke blir sendt på første forsøk så prøves inntil sms blir sendt eller angitt levetid er over.  
      Jeg er åpen for innspill hvis noen ser noen mangler.
       
       
      HSPI_TwilioSeer_1.1.7165.16787
       
       
    • Av Guahtdim
      Dette er en plugin for å kunne styre Daikin varmepumpe med wifi-modul
       
      Link til siste versjon
      DakinSeer 0.0.0.9
      (NB: Kun testet i Windows og i Ubuntu med Mono 5.16.0.79)
      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. 
       
      Når du vet ip adresse går du inn i på menyvalget for IpConfig
       

       
      Der går du inn på feltet for å legge inn en ny ip

       
      Taster inn ip adresse i popup boksen

       
      Hvis du ikke har korrekt ip-addresse eller noe annet er galt vil du se følgende feilmelding

       
      Men hvis du fikk det til så ser du at pumpen vil dukke opp i listen

      og i "home" vil det dukke opp endel nye devicer med floor og room DaikinSeer.
       
       
      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)

       
      Endringslogg
      0.0.0.1 - Første versjon
      0.0.0.2 - Lagt på litt mer debug logging og fikset noen upper/lower case i image-path
      0.0.0.3 - Fikset flere upper/lower case  i image-path
      0.0.0.4 - endret shum i til å ikke ha verdi (fra shum=0&.. til shum=&..)
      0.0.0.5 - endret shum tilbake, men sørget for us-formatering av temperatur sendt til varmepumpe fra HomeSeer
      0.0.0.6 - Endret bygging av temperatur dropdown for å unngå feil ved desimal verdier
      0.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.8 - Fikset håndtering av tall med desimaler fra Wifi adapter når man ikke kjører US oppsett.
      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.
       
      Problemer/utfordringer/videreutvikling
      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
      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.
×
×
  • Opprett ny...