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

Anbefalte innlegg

Skrevet

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.

 

image.png.f70545df05905e89bfd956e0adce34d0.png


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 :)

 

Skrevet

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.

 

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

Skrevet
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 :)

Skrevet
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. :) 

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

Skrevet
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

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

image.png.aa934e37a58b8818260a67c9293e7c29.png

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

 

 

Skrevet (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 av Guahtdim
Skrevet
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.

image.png.aa934e37a58b8818260a67c9293e7c29.png

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.

 

Skrevet

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.

Skrevet
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!

  • Like 1
  • 3 år senere...
  • 10 måneder senere...
Skrevet

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

  • Like 1
Skrevet

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:

image.png.a48279369df8c03305c76fc66b8dcc15.png

Konfigureres slik som @clio75 har beskrevet 😃

  • Thanks 1

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.