Olex Skrevet 4. oktober 2020 Skrevet 4. oktober 2020 Tar opp denne, hvis det er fortsatt noen som bruker denne? Ikkje lenge siden eg begynte med HS(4) og det har vært moro så langt! Tenkte og prøve meg på litt scripting no i haustmørket, men her ble det trått gitt. Når eg kjøre dette scriptet, får eg ikkje opp mat/restavfall. Ser ut som at det dukker opp ei linje nederst (begynner på 17) hvor datoene ser ut som og stemme med henting av mat/restavfall. Noen tips? Takker og bukker Siter
toonwolf Skrevet 4. oktober 2020 Skrevet 4. oktober 2020 Beklager om det er litt på siden dette, men prøver meg 😏 Liker muligheten til å få inn minrenovasjon data i HomeSeer, men kunne tenke meg å få oppdatert Google Kalenderen min med påminnelser (reminders) som igjen kan vises på Nest Hub enheter i huset. Har laget en Google Assistant rutine som viser meg dagens påminnelser hver dag kl 0900 i tillegg til at det vises jo når jeg ber om det. Er det noen som vet om en HS plug-in eller script som kan ta informasjon fra HS og oppdatere Google Kalendere og legge det inn som påminnelser (altså ikke aktiviteter)? De fleste andre kalender-plug-ins som f.eks https://www.hjemmeautomasjon.no/forums/topic/3853-gcalseer-en-plugin-for-kobling-mot-google-og-microsoft-kalendere-0050/ utviklet av @Guahtdim henter jo data fra GCAL og oppdaterer HS ikke andre veien. Siter
Moskus Skrevet 5. oktober 2020 Skrevet 5. oktober 2020 13 timer siden, Olex skrev: Ser ut som at det dukker opp ei linje nederst (begynner på 17) hvor datoene ser ut som og stemme med henting av mat/restavfall. Noen tips? Takker og bukker Det ser ut som det er en parser-feil i scriptet, dessverre. Kanskje de har byttet litt på formatet sitt? Siter
Olex Skrevet 5. oktober 2020 Skrevet 5. oktober 2020 5 timer siden, Moskus skrev: Det ser ut som det er en parser-feil i scriptet, dessverre. Kanskje de har byttet litt på formatet sitt? Mange takk for svar. Da blir det vel enda eit prosjekt til skuffen med prosjekter som "nesten" virket Siter
Moskus Skrevet 5. oktober 2020 Skrevet 5. oktober 2020 32 minutter siden, Olex skrev: Mange takk for svar. Da blir det vel enda eit prosjekt til skuffen med prosjekter som "nesten" virket ... eller du kan ta deg tiden med å poste resultatet fra URLen i scriptet for din adresse, så kan man fikse det. Dataen er sikkert det, den må bare hentes frem. Siter
Olex Skrevet 6. oktober 2020 Skrevet 6. oktober 2020 På 5.10.2020 den 15.13, Moskus skrev: ... eller du kan ta deg tiden med å poste resultatet fra URLen i scriptet for din adresse, så kan man fikse det. Dataen er sikkert det, den må bare hentes frem. Takk @Moskus for at du tar deg tid til å hjelpe til Har forsøkt i går med URL'en, men fikk da http error 401. Når eg no igjen får det samme, tyder det på at det ikkje er bare bruke URL'en. Ikkje bruk tid på dette, scriptet ligger godt i skuffen med prosjekter som "nesten" virket her hos meg. Siter
clio75 Skrevet 6. oktober 2020 Forfatter Skrevet 6. oktober 2020 Mange takk for svar. Da blir det vel enda eit prosjekt til skuffen med prosjekter som "nesten" virket [emoji4]Send meg adresse så skal jeg se om jeg kan finne ut hvorfor det ikke virker for deg Sent fra min SM-G970F via Tapatalk Siter
toonwolf Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 On 10/02/2020 at 22:57, BME said: Ønsker å få hver søppeltype i egen device Jeg ønsker også å ha hver søppeltype i egen device. Tenkte det må være mulig å redigere scriptet å fjernet noe og kjøre en egen event pr. "søppeltype", men det blir ikke helt riktig (se bilde under). Den øverste er kun restavfall (men som ikke er helt riktig). Den nederste inneholder alt hvor orginalscriptet til @clio75 kjører. Slik ser scriptet ut etter at jeg har redigert det. Hvordan må det være for at jeg kun skal få Restavfall? Sub Main(ByVal parameters As Object) 'Clio75 All Credits to [email protected] 'Inspired and based on Moskus scrip NewsReader.vb Dim DevID As Integer = parameters.ToString.Split("|")(0) Dim KommuneNr As String = parameters.ToString.Split("|")(1) Dim Gatekode As String = parameters.ToString.Split("|")(2) Dim GateNavn As String = parameters.ToString.Split("|")(3) Dim GateNr As String = parameters.ToString.Split("|")(4) 'Sette sammen URL: Dim kommuneURL as string = "kommunenr=" & KommuneNr Dim GateKodeURL as string = "gatekode=" & Gatekode Dim GateNavnURL as string = "gatenavn=" & GateNavn Dim GateNrURL as string = "husnr=" & GateNr Dim url As String = "https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?" & kommuneURL & "&" & GateNavnURL & "&" & GateKodeURL & "&" & GateNrURL 'hs.WriteLog("Soppel Error", "url " & url) Dim source As String = "" Try Using client As New System.Net.WebClient 'Sette Headers client.headers.set("Kommunenr", KommuneNr ) client.headers.set("RenovasjonAppKey", "AE13DEEC-804F-4615-A74E-B4FAC11F0A30") Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 client.Encoding = System.Text.Encoding.UTF8 source = client.DownloadString(url) End Using Catch ex As Exception hs.WriteLog("Soppel Error", "Net Feil: " & ex.Message) End Try If source = "" Then hs.WriteLog("soppel Error", "Got no response from url: " & url) Exit Sub End If Try 'Dim json as Newtonsoft.Json.string = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim json as Object = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim numMembers As Integer = json.Count -1 Dim DeviceText As String = "" For i As Integer = 0 To numMembers Dim output As String = "" Dim output2 As String = "" output = json(i)("FraksjonId") output2 = json(i)("Tommedatoer")(0) & " Neste :" Try output2 &= json(i)("Tommedatoer")(1) Catch ex As Exception output2 &= " -- " End Try Select Case Output Case "1" output = Replace(output, "1", "<b>Restavfall : </b><br>") End Select DeviceText &= "" & output & " " & output2 & "<br>" Next hs.SetDeviceString(DevID, DeviceText , True) Catch ex As Exception hs.WriteLog("Soppel Error", "Net Feil: " & ex.Message) End Try End Sub Siter
Guahtdim Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 (endret) On 04/10/2020 at 23:15, toonwolf said: Beklager om det er litt på siden dette, men prøver meg 😏 Liker muligheten til å få inn minrenovasjon data i HomeSeer, men kunne tenke meg å få oppdatert Google Kalenderen min med påminnelser (reminders) som igjen kan vises på Nest Hub enheter i huset. Har laget en Google Assistant rutine som viser meg dagens påminnelser hver dag kl 0900 i tillegg til at det vises jo når jeg ber om det. Er det noen som vet om en HS plug-in eller script som kan ta informasjon fra HS og oppdatere Google Kalendere og legge det inn som påminnelser (altså ikke aktiviteter)? De fleste andre kalender-plug-ins som f.eks https://www.hjemmeautomasjon.no/forums/topic/3853-gcalseer-en-plugin-for-kobling-mot-google-og-microsoft-kalendere-0050/ utviklet av @Guahtdim henter jo data fra GCAL og oppdaterer HS ikke andre veien. Mulig AK Google Calendar kan hjelpe deg med å lage ting i google kalender. Endret 7. oktober 2020 av Guahtdim Siter
Guahtdim Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 4 hours ago, toonwolf said: Jeg ønsker også å ha hver søppeltype i egen device. Tenkte det må være mulig å redigere scriptet å fjernet noe og kjøre en egen event pr. "søppeltype", men det blir ikke helt riktig (se bilde under). Den øverste er kun restavfall (men som ikke er helt riktig). Den nederste inneholder alt hvor orginalscriptet til @clio75 kjører. Slik ser scriptet ut etter at jeg har redigert det. Hvordan må det være for at jeg kun skal få Restavfall? Sub Main(ByVal parameters As Object) 'Clio75 All Credits to [email protected] 'Inspired and based on Moskus scrip NewsReader.vb Dim DevID As Integer = parameters.ToString.Split("|")(0) Dim KommuneNr As String = parameters.ToString.Split("|")(1) Dim Gatekode As String = parameters.ToString.Split("|")(2) Dim GateNavn As String = parameters.ToString.Split("|")(3) Dim GateNr As String = parameters.ToString.Split("|")(4) 'Sette sammen URL: Dim kommuneURL as string = "kommunenr=" & KommuneNr Dim GateKodeURL as string = "gatekode=" & Gatekode Dim GateNavnURL as string = "gatenavn=" & GateNavn Dim GateNrURL as string = "husnr=" & GateNr Dim url As String = "https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?" & kommuneURL & "&" & GateNavnURL & "&" & GateKodeURL & "&" & GateNrURL 'hs.WriteLog("Soppel Error", "url " & url) Dim source As String = "" Try Using client As New System.Net.WebClient 'Sette Headers client.headers.set("Kommunenr", KommuneNr ) client.headers.set("RenovasjonAppKey", "AE13DEEC-804F-4615-A74E-B4FAC11F0A30") Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 client.Encoding = System.Text.Encoding.UTF8 source = client.DownloadString(url) End Using Catch ex As Exception hs.WriteLog("Soppel Error", "Net Feil: " & ex.Message) End Try If source = "" Then hs.WriteLog("soppel Error", "Got no response from url: " & url) Exit Sub End If Try 'Dim json as Newtonsoft.Json.string = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim json as Object = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim numMembers As Integer = json.Count -1 Dim DeviceText As String = "" For i As Integer = 0 To numMembers Dim output As String = "" Dim output2 As String = "" output = json(i)("FraksjonId") output2 = json(i)("Tommedatoer")(0) & " Neste :" Try output2 &= json(i)("Tommedatoer")(1) Catch ex As Exception output2 &= " -- " End Try Select Case Output Case "1" output = Replace(output, "1", "<b>Restavfall : </b><br>") End Select DeviceText &= "" & output & " " & output2 & "<br>" Next hs.SetDeviceString(DevID, DeviceText , True) Catch ex As Exception hs.WriteLog("Soppel Error", "Net Feil: " & ex.Message) End Try End Sub Jeg tror du må flytte en linje Select Case Output Case "1" output = Replace(output, "1", "<b>Restavfall : </b><br>") DeviceText &= "" & output & " " & output2 & "<br>" End Select Nå vil du kun få ut restavfall tror jeg. Siter
toonwolf Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 (endret) 31 minutes ago, Guahtdim said: Nå vil du kun få ut restavfall tror jeg. Testet og det hjalp ikke. Får fortsatt for mye "info" Vedlagt mitt modifiserte script minrenovasjon_AP224_REST.vb Endret 7. oktober 2020 av toonwolf Siter
Guahtdim Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 Hvis det vedlagte scriptet er siste endring så er ikke det så rart. Du må flytte linjen DeviceText &= "" & output & " " & output2 & "<br>" fra etter End Select til før End Select slik jeg har vist. Siter
toonwolf Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 20 minutes ago, Guahtdim said: slik jeg har vist. Takk! Funker knall. 1 Siter
toonwolf Skrevet 7. oktober 2020 Skrevet 7. oktober 2020 1 hour ago, Guahtdim said: Mulig AK Google Calendar kan hjelpe deg med å lage ting i google kalender. AK Google Calendar kan opprette events, men ikke remindere så vidt jeg ser. Hører med utvikler om det er noe som lar seg gjøre. Takk for tipset! 1 Siter
Daniel_hoy Skrevet 26. januar Skrevet 26. januar Ser at det sluttet å fungere for meg 30.11.23. Er det noen andre som har problemer? Siter
topize Skrevet 27. november Skrevet 27. november For å få denne til å virke måtte jeg endre url til: Dim url As String = "https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/MinRenovasjon.Api/api/tommekalender/?" & kommuneURL & "&" & GateNavnURL & "&" & GateKodeURL & "&" & GateNrURL 1 Siter
topize Skrevet 27. november Skrevet 27. november Gjorde noen endringer for å få det til å virke som jeg ønsket 😃 Legger koden ut her, om det andre som ser nytten i den 😃 'Enable or disable debug logging Const DEBUG_LOGGING_ENABLED As Boolean = False Sub Main(ByVal parameters As Object) 'Clio75 All Credits to [email protected] 'Inspired and based on Moskus scrip NewsReader.vb 'Parse parameters Dim DevID As Integer = parameters.ToString.Split("|")(0) Dim KommuneNr As String = parameters.ToString.Split("|")(1) Dim Gatekode As String = parameters.ToString.Split("|")(2) Dim GateNavn As String = parameters.ToString.Split("|")(3) Dim GateNr As String = parameters.ToString.Split("|")(4) 'Base URLs and Headers Dim baseURL As String = "https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=" Dim tommekalenderURL As String = baseURL & "https://komteksky.norkart.no/MinRenovasjon.Api/api/tommekalender/?kommunenr=" & KommuneNr & "&gatenavn=" & GateNavn & "&gatekode=" & Gatekode & "&husnr=" & GateNr Dim fraksjonerURL As String = baseURL & "https://komteksky.norkart.no/MinRenovasjon.Api/api/fraksjoner/" Dim appKey As String = "AE13DEEC-804F-4615-A74E-B4FAC11F0A30" Dim iconFolder As String = "html\images\renovasjon\" 'Ensure icon folder exists If Not IO.Directory.Exists(iconFolder) Then IO.Directory.CreateDirectory(iconFolder) End If WriteDebugLog(DEBUG_LOGGING_ENABLED, "Starting script execution with parameters: " & parameters.ToString()) 'Fetch fraksjoner data Dim fraksjoner As Object = GetJsonResponse(fraksjonerURL, KommuneNr, appKey) If fraksjoner Is Nothing Then hs.WriteLog("Soppel Error", "Failed to fetch fraksjoner data.") Exit Sub End If WriteDebugLog(DEBUG_LOGGING_ENABLED, "Fetched fraksjoner data.") 'Fetch tommekalender data Dim tommekalender As Object = GetJsonResponse(tommekalenderURL, KommuneNr, appKey) If tommekalender Is Nothing Then hs.WriteLog("Soppel Error", "Failed to fetch tommekalender data.") Exit Sub End If WriteDebugLog(DEBUG_LOGGING_ENABLED, "Fetched tommekalender data.") 'Look up the parent device by its reference (DevID) Dim parentDevice As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(DevID) If parentDevice Is Nothing Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "Parent device not found, exiting.") Exit Sub End If 'Declare childDevice outside the loop to reuse Dim childDevice As Scheduler.Classes.DeviceClass = Nothing Dim iconFilePath As String = "" 'Process each item in tommekalender For Each calendarItem As Object In tommekalender Try Dim fraksjonId As Integer = calendarItem("FraksjonId") Dim tommedatoer As Object = calendarItem("Tommedatoer") Dim fraksjonName As String = GetFraksjonName(fraksjoner, fraksjonId) Dim fraksjonIcon As String = GetFraksjonIcon(fraksjoner, fraksjonId) WriteDebugLog(DEBUG_LOGGING_ENABLED, "Processing item: FraksjonId=" & fraksjonId & ", Name=" & fraksjonName) 'Look for an existing child device under the parent device Dim childDeviceExists As Boolean = False Dim deviceRef As Integer = -1 For Each associatedDeviceRef As Integer In parentDevice.AssociatedDevices(hs) Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(associatedDeviceRef) If device IsNot Nothing AndAlso device.Name(hs) = fraksjonName Then childDeviceExists = True deviceRef = device.Ref(hs) Exit For End If Next 'If the device does not exist, create a new device If Not childDeviceExists Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "Creating new child device for " & fraksjonName) deviceRef = hs.NewDeviceRef(fraksjonName) childDevice = hs.GetDeviceByRef(deviceRef) If childDevice IsNot Nothing Then childDevice.Device_Type_String(hs) = "Renovasjon Fraksjon" childDevice.Interface(hs) = "Renovasjon" childDevice.Name(hs) = fraksjonName childDevice.Location(hs) = parentDevice.Location(hs) childDevice.Location2(hs) = parentDevice.Location2(hs) childDevice.Relationship(hs) = HomeSeerAPI.Enums.eRelationship.Child parentDevice.AssociatedDevice_Add(hs, deviceRef) hs.SaveEventsDevices() End If Else childDevice = hs.GetDeviceByRef(deviceRef) End If 'Update device properties If childDevice IsNot Nothing Then If tommedatoer.Count > 0 Then Dim firstDate As DateTime = DateTime.Parse(tommedatoer(0)) 'hs.SetDeviceString(deviceRef, "2024-12-31", True) 'hardcode date test hs.SetDeviceString(deviceRef, firstDate.ToString("yyyy-MM-dd"), True) hs.SetDeviceValue(deviceRef, 0) End If 'Download and set the icon if needed If fraksjonIcon <> "" Then iconFilePath = iconFolder & fraksjonId & ".png" If Not IO.File.Exists(iconFilePath) Then Try Dim client As New System.Net.WebClient client.DownloadFile(fraksjonIcon, iconFilePath) Catch ex As Exception hs.WriteLog("Soppel Error", "Failed to download icon: " & ex.Message) End Try End If If IO.File.Exists(iconFilePath) Then Dim pair As New HomeSeerAPI.VSVGPairs.VGPair With { .Graphic = "images/renovasjon/" & fraksjonId & ".png", .Set_Value = 0, .PairType = HomeSeerAPI.VSVGPairType.SingleValue } hs.DeviceVGP_AddPair(deviceRef, pair) End If End If End If Catch ex As Exception WriteDebugLog(DEBUG_LOGGING_ENABLED, "Error processing item: " & ex.Message) End Try Next WriteDebugLog(DEBUG_LOGGING_ENABLED, "Script execution completed.") End Sub Function GetJsonResponse(ByVal url As String, ByVal kommuneNr As String, ByVal appKey As String) As Object Dim client As New System.Net.WebClient client.Headers.Add("Kommunenr", kommuneNr) client.Headers.Add("RenovasjonAppKey", appKey) client.Encoding = System.Text.Encoding.UTF8 'Log before attempting to fetch the data WriteDebugLog(DEBUG_LOGGING_ENABLED, "Fetching JSON from URL: " & url) Try Dim response As String = client.DownloadString(url) ' Log the response before deserialization WriteDebugLog(DEBUG_LOGGING_ENABLED, "Response: " & response) Return Newtonsoft.Json.JsonConvert.DeserializeObject(response) Catch ex As Exception ' Log the error message WriteDebugLog(DEBUG_LOGGING_ENABLED, "Error fetching URL: " & ex.Message) Return Nothing End Try End Function Function GetFraksjonName(ByVal fraksjoner As Object, ByVal fraksjonId As Integer) As String If fraksjoner Is Nothing Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "fraksjoner is Nothing") Return "Unknown" End If WriteDebugLog(DEBUG_LOGGING_ENABLED, "Searching for fraksjon with ID: " & fraksjonId) For Each fraksjon As Object In fraksjoner WriteDebugLog(DEBUG_LOGGING_ENABLED, "Checking fraksjon ID: " & fraksjon("Id")) If fraksjon("Id") = fraksjonId Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "Found fraksjon: " & fraksjon("Navn")) Return fraksjon("Navn").ToString() End If Next WriteDebugLog(True, "No matching fraksjon found.") Return "Unknown" End Function Function GetFraksjonIcon(ByVal fraksjoner As Object, ByVal fraksjonId As Integer) As String If fraksjoner Is Nothing Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "fraksjoner is Nothing") Return "" End If WriteDebugLog(DEBUG_LOGGING_ENABLED, "Searching for icon for fraksjon ID: " & fraksjonId) For Each fraksjon As Object In fraksjoner WriteDebugLog(DEBUG_LOGGING_ENABLED, "Checking fraksjon ID: " & fraksjon("Id")) If fraksjon("Id") = fraksjonId Then WriteDebugLog(DEBUG_LOGGING_ENABLED, "Found icon: " & fraksjon("NorkartStandardFraksjonIkon")) Return fraksjon("NorkartStandardFraksjonIkon").ToString() End If Next WriteDebugLog(DEBUG_LOGGING_ENABLED, "No matching icon found.") Return "" End Function 'Function to log debug messages to a file Sub WriteDebugLog(ByVal enabled As Boolean, ByVal message As String) If Not enabled Then Exit Sub Dim logFilePath As String = "C:\Program Files (x86)\HomeSeer HS4\Logs\renovasjon_debug.txt" Try Dim logMessage As String = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") & " - " & message & vbCrLf System.IO.File.AppendAllText(logFilePath, logMessage) Catch ex As Exception hs.WriteLog("Soppel Error", "Failed to write to log file: " & ex.Message) End Try End Sub Denne versjonen laster ned fraksjonene og bilder fra apiet og oppretter en sub device pr. fraksjon. Det blir da seende ut slik: Konfigureres slik som @clio75 har beskrevet 😃 1 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.