Moskus Skrevet 27. juli 2020 Skrevet 27. juli 2020 Et script som sjekker nĂ„r du fĂ„r levert post. 1. Du trenger en referanse til Newtonsoft.Json i ScriptingReferences. 2. Du trenger en virtuell device uten knapper eller statuser. 3. Du trenger en konto hos MyBring, du kan opprette gratis her (du trenger ikke firmanavn): https://www.mybring.com/signup/register/user 4. En API-key som du finner pĂ„ denne siden: https://www.mybring.com/useradmin/account/settings/api  KjĂžr dette scriptet ved midnatt: Sub Main(ByVal params As Object) Dim devRef As Integer = DIN_DEVICEREF_HER Dim postnummer As Integer = DITT_POSTNUMMER_HER Dim mybring_email As String = "[email protected]" Dim mybring_key As String = "DIN_KEY_FRA_MYBRING" Dim url As String = "https://api.bring.com/address/api/no/postal-codes/" & postnummer & "/mailbox-delivery-dates" Dim source As String = "" Try Using client As New System.Net.WebClient Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 client.Headers.Add("x-mybring-api-uid", mybring_email) client.Headers.Add("x-mybring-api-key", mybring_key) client.BaseAddress = url source = client.DownloadString(url) End Using Dim json As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim nestePost As String = json.item("delivery_dates").item(0).ToString Dim nestePostDato As Date = DateTime.Parse(nestePostDato) Dim dagerTilPost As Integer = nestePostDato.Date.Subtract(Now.Date).Days Dim output As String = "" For i As Integer = 0 To json("delivery_dates").Count - 1 Dim currentDate As Date = DateTime.Parse(json.item("delivery_dates").item(i)) output &= GetDateDescription(currentDate) & "<br>" Next hs.SetDeviceValueByRef(devRef, dagerTilPost, True) hs.SetDeviceString(devRef, output, False) Catch ex As Exception hs.SetDeviceValueByRef(devRef, -1, True) hs.SetDeviceString(devRef, "Feil: " & ex.Message, False) End Try End Sub Function GetDateDescription(ByVal nextDate As Date) Dim dagerTilPost As Integer = nextDate.Date.Subtract(Now.Date).Days If dagerTilPost = 0 Then Return "I dag" ElseIf dagerTilPost = 1 Then Return "I morgen" Else Return nextDate.ToString("dddd d. MMM") End If End Function   Devicen vil da se slik ut:  Device Value er antall dager til postleveranse. "0" betyr da at posten blir levert i dag, kan f.eks. brukes som trigger til noe.    EDIT: Takk til @daniel.h.iversen som fant ut at Posten har oppdaget at 2020 var i fjor. đ EDIT2: Takk til @DeVille som fant ut at siste 1 skal erstattes med 9. EDIT3: Takk til @ZoRaC for sin oppdatering etter API-omleggingen hos Posten versjon som jeg bygget litt videre pĂ„. 2 4 Siter
Gjelsvik Skrevet 27. juli 2020 Skrevet 27. juli 2020 FÄr dette som status pÄ devicen:  Quote Feil: Strengen ble ikke gjenkjent som en gyldig DateTime. Et ukjent ord begynner ved indeks 1.   Siter
Moskus Skrevet 27. juli 2020 Forfatter Skrevet 27. juli 2020 KjÞr denne versjonen og post resultatet, sÄ ser vi hva jeg ikke har klart Ä ta hensyn til.  Sub Main(ByVal params As Object) Dim devRef As Integer = 3915 Dim postnummer As Integer = 4026 Dim url As String = "https://www.posten.no/levering-av-post-2020/_/component/main/1/leftRegion/1?postCode=" & postnummer Dim source As String = "" Try Using client As New System.Net.WebClient client.Headers.Add("x-requested-with", "XMLHttpRequest") client.BaseAddress = url source = client.DownloadString(url) End Using Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim output As String = "" For i As Integer = 0 To json("nextDeliveryDays").Count - 2 output &= json("nextDeliveryDays")(i).ToString & "<br>" Next output &= json("nextDeliveryDays")(json("nextDeliveryDays").Count - 1).ToString 'Dim nestePostdag As Date = DateTime.Parse((json("nextDeliveryDays")(0).ToString).Replace("i morgen", "").Replace("i dag", "")) 'Dim dagerTilPost As Integer = nestePostdag.Date.Subtract(Now.Date).Days Dim dagerTilPost as Integer = 0 hs.SetDeviceValueByRef(devRef, dagerTilPost, True) hs.SetDeviceString(devRef, output, False) Catch ex As Exception hs.SetDeviceValueByRef(devRef, -1, True) hs.SetDeviceString(devRef, "Feil: " & ex.Message, False) End Try End Sub  1 Siter
Gjelsvik Skrevet 27. juli 2020 Skrevet 27. juli 2020 Da kommer devicestring som forventet, og devicevalue blir satt til 0.  Vet ikke om det er relevant, men om jeg forsÞker url`n i nettleser, sÄ fÄr jeg bare en hvit side. (med riktig postnummer i url)  Siter
Moskus Skrevet 27. juli 2020 Forfatter Skrevet 27. juli 2020 Jo, men hva er device-stringen? Jeg ser at den kan inneholde tekst som "i dag" eller "i morgen", og derfor fjerner jeg dem fÞr jeg prÞver Ä parse verdien til en dato. Men det ser ut som du har fÄtt noe som ikke har tatt hensyn til, eller at jeg har bommet pÄ en.   6 minutter siden, Gjelsvik skrev: Vet ikke om det er relevant, men om jeg forsÞker url`n i nettleser, sÄ fÄr jeg bare en hvit side. (med riktig postnummer i url) Det stemmer, det er fordi man mÄ legge til headeren "x-requested-with:XMLHttpRequest". Siter
Gjelsvik Skrevet 27. juli 2020 Skrevet 27. juli 2020 Strengen er slik: Quote i morgen tirsdag 28. juli torsdag 30. juli mandag 3. august onsdag 5. august fredag 7. august   Siter
Moskus Skrevet 27. juli 2020 Forfatter Skrevet 27. juli 2020 Ai, da. Det er jo det samme jeg skulle ha, det hadde jeg trodd skulle fungere. Da er det mulig jeg mÄ sende CultureInfo.  PrÞv dette, da.  Sub Main(ByVal params As Object) Dim devRef As Integer = 3915 Dim postnummer As Integer = 4026 Dim url As String = "https://www.posten.no/levering-av-post-2020/_/component/main/1/leftRegion/1?postCode=" & postnummer Dim source As String = "" Try Using client As New System.Net.WebClient client.Headers.Add("x-requested-with", "XMLHttpRequest") client.BaseAddress = url source = client.DownloadString(url) End Using Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim output As String = "" For i As Integer = 0 To json("nextDeliveryDays").Count - 2 output &= json("nextDeliveryDays")(i).ToString & "<br>" Next output &= json("nextDeliveryDays")(json("nextDeliveryDays").Count - 1).ToString Dim nestePostdag As Date = DateTime.Parse((json("nextDeliveryDays")(0).ToString.ToLower).Replace("i morgen", "").Replace("i dag", ""), New System.Globalization.CultureInfo("nb-NO")) Dim dagerTilPost As Integer = nestePostdag.Date.Subtract(Now.Date).Days hs.SetDeviceValueByRef(devRef, dagerTilPost, True) hs.SetDeviceString(devRef, output, False) Catch ex As Exception hs.SetDeviceValueByRef(devRef, -1, True) hs.SetDeviceString(devRef, "Feil: " & ex.Message, False) End Try End Sub   ... da skal "value" bli 1. 1 Siter
Gjelsvik Skrevet 27. juli 2020 Skrevet 27. juli 2020 Da er det i orden. FÄr "1" som verdi. Ingen feil i devicestring. 1 Siter
Moskus Skrevet 27. juli 2020 Forfatter Skrevet 27. juli 2020 Flott! Â Da skal jeg oppdatere fĂžrste post, takk for debug-hjelp! Â Siter
nilst Skrevet 28. juli 2020 Skrevet 28. juli 2020 Hei! Denne bÞr ogsÄ fungere i HS4? Jeg er ikke veldig stÞ i dette ennÄ, men fikk lagt inn scriptet og knyttet det til en event. NÄr jeg kjÞrer eventen, kjÞrer scriptet, men det skjer ingenting med devicen jeg har opprettet. Ser heller ingen feil i loggen. Mulig jeg har oversett ett eller annet, og i sÄ fall mistenker jeg at det gjelder oppsettet av den virtuelle devicen. Usikker pÄ hvordan man oppretter en slik "uten knapper eller statuser" (slik det stÄr i fÞrste post). Noen som har tips til lÞsning? Siter
Moskus Skrevet 28. juli 2020 Forfatter Skrevet 28. juli 2020 La du inn devicereferansen i den nest Ăžverste linjen? Siter
nilst Skrevet 28. juli 2020 Skrevet 28. juli 2020 La du inn devicereferansen i den nest Ăžverste linjen?Ja da, det gjorde jeg.Sent fra min SM-G973F via Tapatalk Siter
Moskus Skrevet 28. juli 2020 Forfatter Skrevet 28. juli 2020 hs.SetDeviceString burde gjÞre jobben uansett, hvis ikke den fungerer, sÄ er det mye som burde fungere.  Men du kan jo prÞve Ä kjÞre dette miniscriptet: hs.SetDeviceString(DIN_DEV_REF, "Dette er en test", True) Siter
nilst Skrevet 28. juli 2020 Skrevet 28. juli 2020 Tusen takk for god hjelp! Joda, det fungerer faktisk glimrende... det gjorde det hele vanskeligere Ä forstÄ...  Men nÄr jeg nÄ ser i loggen (mulig jeg hadde pÄ et filter tidligere siden jeg ikke sÄ den da); sÄ ser jeg (etter Ä ha kjÞrt Posten-scriptet):  Compiling script posten.vb: 'Newtonsoft' is not declared. It may be inaccessible due to its protection level. og Compiling script posten.vb: Namespace or type specified in the Imports 'System.Core' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.  Jeg har lagt til i settings.ini (nder ScriptingReferences: Newtonsoft.Json;C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll Jeg har ogsÄ sjekket at dll'en ligger i stien over (har oppgradert fra HS3, derfor hs3 i stien). Noe mer jeg bÞr gjÞre i forbindelse med denne dll'en? Siter
ZoRaC Skrevet 28. juli 2020 Skrevet 28. juli 2020 PrÞv med " rundt path: "C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll"  Husk restart av HomeSeer etterpÄ. Siter
nilst Skrevet 29. juli 2020 Skrevet 29. juli 2020 Desverre, @ZoRaC. har forsÞkt det ogsÄ. Ingen forskjell. Det virker nesten ikke som om ScriptingReferences-linja blir lest inn...  Den ser for Þvrig slik ut. Linja ligger nederst i [Settings] seksjonen. ScriptingReferences=System.Core;System.Core.dll;System.Net;System.Net.dll;Newtonsoft.Json;"C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll" ini-fila blir lest inn og skrevet til ved hver oppstart av HS, sÄ jeg vet at det er rett fil. Siter
ZoRaC Skrevet 29. juli 2020 Skrevet 29. juli 2020 Har du sjekket at newtonsoft-fila ligger der? Har du flere versjoner av fila i andre mapper? Siter
nilst Skrevet 29. juli 2020 Skrevet 29. juli 2020 Ja, fila ligger der, men jeg har ogsÄ flere andre newtonsoft.dll-filer pÄ maskinen. Et sÞk ga faktisk over 120 eksemplarer. Noen ligger i andre plug-ins mapper (eks. DoorBird og Z-Wave), Ettersom jeg ogsÄ har Nuget installert, er det noen eksemplarer under der. Noen ligger under Visual Studio. Den jeg peker pÄ i ini-fila er pÄ 474 KB. Noen er pÄ 514, 478 og 457. Tror du jeg peker pÄ feil versjon? Siter
nilst Skrevet 29. juli 2020 Skrevet 29. juli 2020 Ser forÞvrig ogsÄ at Newtonsoft er definert i HS4.exe.config:  <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> <codeBase version="12.0.0.0" href="bin/homeseer/Newtonsoft.Json.dll" /> <codeBase version="8.0.0.0" href="bin/Z-Wave/Newtonsoft.Json.dll" /> </dependentAssembly> Men jeg aner ikke om det har noe Ä si... Siter
Gjelsvik Skrevet 29. juli 2020 Skrevet 29. juli 2020 39 minutes ago, nilst said: Desverre, @ZoRaC. har forsÞkt det ogsÄ. Ingen forskjell. Det virker nesten ikke som om ScriptingReferences-linja blir lest inn...  Den ser for Þvrig slik ut. Linja ligger nederst i [Settings] seksjonen. ScriptingReferences=System.Core;System.Core.dll;System.Net;System.Net.dll;Newtonsoft.Json;"C:\Program Files (x86)\HomeSeer HS3\Bin\homeseer\Newtonsoft.Json.dll" ini-fila blir lest inn og skrevet til ved hver oppstart av HS, sÄ jeg vet at det er rett fil.  Min Scriptingsreferences linje har semikolon for Ä skille "tjeneste-" og "dll-" parene og komma mellom hvert par. Ser ut som at du har semikolon hele veien. AltsÄ slik: (farget hvert par for Ä gjÞre det lesbart) Hva om du gjÞr om pÄ dette?  1 Siter
nilst Skrevet 29. juli 2020 Skrevet 29. juli 2020 2 minutter siden, Gjelsvik skrev:  Min Scriptingsreferences linje har semikolon for Ä skille "tjeneste-" og "dll-" parene og komma mellom hvert par. Ser ut som at du har semikolon hele veien. AltsÄ slik: (farget hvert par for Ä gjÞre det lesbart) Hva om du gjÞr om pÄ dette?   Fantastisk!  Der forsvant feilmeldingene gitt! Ble riktignok erstattet av en ny: Compiling script posten.vb: Illegal characters in path. Men det er nok noe annet.  Tusen takk for god hjelp sÄ langt!  Siter
nilst Skrevet 29. juli 2020 Skrevet 29. juli 2020 (endret) Den siste feilen forsvant da jeg tok vekk "-tegnene i pathen. NĂ„ funker skriptet som det skal! đ Endret 29. juli 2020 av nilst 1 Siter
ZoRaC Skrevet 24. august 2020 Skrevet 24. august 2020 (endret) Noen som har testet pÄ Linux? FÄr bare en devicestring som denne: Sitat Exception has been thrown by the target of an invocation.  EDIT: MÄtte endre litt pÄ denne for at det skulle funke: Sitat Dim output As String = json.item("nextDeliveryDays").item(0).tostring  Endret 24. august 2020 av ZoRaC 1 Siter
Moskus Skrevet 25. august 2020 Forfatter Skrevet 25. august 2020 OK, kjekt Ä vite. PrÞver jo Ä unngÄ enkelte Linux-feller, men den visste jeg ikke om. Siter
Erling Skrevet 16. september 2020 Skrevet 16. september 2020 PÄ 27.7.2020 den 12.30, Moskus skrev: Du trenger en referanse til Newtonsoft.Json i ScriptingReferences.  Oi, hva har jeg gjort galt nÄ da?  Sitat sep-16 08.31.31 ErrorCompiling script C:\Program Files (x86)\HomeSeer HS3\scripts\moskus-pat.vb: Newtonsoft er ikke deklarert. Den kan vÊre utilgjengelig pÄ grunn av beskyttelsesnivÄet. sep-16 08.31.31 ErrorCompiling script C:\Program Files (x86)\HomeSeer HS3\scripts\moskus-pat.vb: NavneomrÄdet eller typen som er angitt i importene System.Core, inneholder ikke noe felles medlem eller finnes ikke. Kontroller at navneomrÄdet eller typen er definert og inneholder minst ett felles medlem. Kontroller at det importerte elementnavnet ikke bruker noen aliaser.   Siter
Anbefalte innlegg
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.